用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

概率式编程语言(probabilistic programming languages(PPLs))的未来探讨

如果计算机(或编程语言)是我们理解这个世界的“望远镜”,无论这个“望远镜”如何精巧,它还是要人去操纵,并且,会被一部分人嫌弃,继而造出新的“望远镜” —— David 9

David一直相信,真正有用的工具,无论如何复杂,终究会用简单高效的形式提供给大众。虽然,目前python或R进行大数据或AI研究的门栏已经很低,但很可能还不够低,

来自:https://pediatricspeech.net/post/helping-your-child-become-an-independent-thinker-by-using-declarative-language/

要寻找这样一种“完美”的编程语言,首先我们须认清编程的目的是:“人类对机器提要求,机器完成要求”。但事实上,人类这种复杂的动物是不可能“完美地满足”的。目前任何一门编程语言以及未来语言都会面临“声明式编程”还是“命令式编程”的窘境:

如果你发号施令(对最忠诚的仆人),一开始,你可能给一条简单笼统的指令(声明式编程),希望你的仆人心领神会、想方设法把该办的事都搞定,呈现给你完美的结果,但是,后来你发现情况并不都和你预料的符合,于是你把需要改进的地方逐条告诉了仆人(各个要点和关键次序),这时你更像是亲力亲为(命令式编程)。之后你又厌倦了手把手指导,又开始了笼统的指令。。。这样循环往复,看似矛盾的两个过程,也一直交错出现在现代代码中:参考https://reedbarger.com/what-is-the-difference-between-imperative-and-declarative-code/

我们不能指望计算机帮我们搞定一切,但我们总想让它帮我们搞定更多。

上一代编程,是无场景无数据“喂养”的确定性编程时代,下一代编程,可能是灵活关注场景,持续数据“喂养”(David认为“持续”很重要),且具有丰富不确定性的编程时代。

对于下一代编程方法,一个可能憧憬就是概率式编程语言(probabilistic programming languages(PPLs))。通过这种语言, 继续阅读概率式编程语言(probabilistic programming languages(PPLs))的未来探讨

11行python写一个神经网络,手把手快速入门神经网络

大家可能读过iamtrask超棒的文章(A Neural Network in 11 lines of Python):

11行python写一个神经网络:

X = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1] ])
y = np.array([[0,1,1,0]]).T
syn0 = 2*np.random.random((3,4)) - 1
syn1 = 2*np.random.random((4,1)) - 1
for j in xrange(60000):
    l1 = 1/(1+np.exp(-(np.dot(X,syn0))))
    l2 = 1/(1+np.exp(-(np.dot(l1,syn1))))
    l2_delta = (y - l2)*(l2*(1-l2))
    l1_delta = l2_delta.dot(syn1.T) * (l1 * (1-l1))
    syn1 += l1.T.dot(l2_delta)
    syn0 += X.T.dot(l1_delta)

参考文献:

https://iamtrask.github.io/2015/07/12/basic-python-network/