重新思考机器学习新形式,模型实际评估,分布漂移问题,工程模型部署

目前习以为常的“验证集”和“测试集”的划分,在未来看来可能非常可笑 —— David 9

现今的机器学习(深度学习)的工作流已经到了需要重新思考的时候了。

从最常见的“验证集”和“测试集”的划分,就已经很陈旧了(虽还不是一无是处)。曾有学者认为,需要有一部分数据集彻底和训练集“隔绝”,从而达到最好的评估效果,即所谓的“测试集”,但其实漏洞很多,首先,用静态“测试集”去模拟动态的真实分布,在实际场景中会错误百出,其次,人类日常的学习没有什么“信息隔离”一说,接触到的信息都是可以学习的。有人会说,高考不就是人类通过“隔离”试卷信息选拔人才(“模型”)的过程吗?那么David要问一下大家,为什么会有“复读”再高考这种选择? 就是因为这个固定的隔离“测试集”漏洞太多了,有教师出题偏好的问题,有运气的问题,有学生状态的问题。

再说“验证集”,验证集和训练集真的区分很重要吗? 继续阅读重新思考机器学习新形式,模型实际评估,分布漂移问题,工程模型部署

用WAVENET做音频分类的一些坑,实验bug详解,WaveNet迁移学习,Check failed: work_element_count > 0 (0 vs. 0) cuda_launch_config

WaveNet是典型的音频端到端神经网络,和手动的特征提取方式(如MFCCs, Chroma, LinearPrediction Cepstrum Coefficients) 不同的当然是可以直接输入原始音频自动提特征。当然,WaveNet一开始是为了音频生成的,但是其核心结构扩展因果卷积,也可用在分类问题和回归问题:

wavenet的扩展因果卷积,每个输出只能依赖于之前的输入传导出来的神经元

我的实验是基于github上的代码wavenet-classifier和一个kaggle项目, 该代码是支持迁移学习预训练的,模型定义时加入load_dir和load参数即可:

wnc = WaveNetClassifier((4000,), (2,), kernel_size = 2, dilation_depth = 3, n_filters = 10, task = 'classification', load_dir='./pre_model/', load=True)

原文是480000维,264个类的分类问题,我这里改为了4000维,2个类的问题。

一开始跑的过程中会有AttributeError: ‘WaveNetClassifier’ object has no attribute ‘task’的错误,这个错误容易解决,https://github.com/mjpyeon/wavenet-classifier/issues/2,这里有解决方法加一行self.task = task就可以了。

另外,还可能碰到如下gpu错误:

Check failed: work_element_count > 0 (0 vs. 0) cuda_launch_config 继续阅读用WAVENET做音频分类的一些坑,实验bug详解,WaveNet迁移学习,Check failed: work_element_count > 0 (0 vs. 0) cuda_launch_config