在吴安德(Andrew Ng)的深度学习Coursera课程中,有一个关于触发词检测的作业(例如,不是我的:jupyter notebook)。
在作业中,他们只是提供了经过训练的模型,因为他们声称使用4000多个带有GPU的训练示例进行训练需要花费几个小时。
我不仅使用提供的模型,还尝试使用它们的功能创建自己的训练示例,然后从头开始训练模型。原始音频文件保持不变。有2个背景文件,所以我确保每个背景有2000个训练示例:
n_train_per_bg = 2000
n_train = len(backgrounds)*n_train_per_bg
orig_X_train = np.empty((n_train, Tx, n_freq))
orig_Y_train = np.empty((n_train, Ty , 1))
for bg in range(len(backgrounds)):
for n in range(n_train_per_bg):
print("bg: {}, n: {}".format(bg, n))
x, y = create_training_example(backgrounds[bg], activates, negatives)
orig_X_train[bg*n_train_per_bg + n, :, :] = x.T
orig_Y_train[bg*n_train_per_bg + n, :, :] = y.T
np.save('./XY_train/orig_X_train.npy', orig_X_train)
np.save('./XY_train/orig_Y_train.npy', orig_Y_train)
但是,运行一个小时后,我得到的结果令人非常失望。在同一练习中,后面的示例之一显示了它们正常运行的模型,该模型在x轴上的400标记附近检测到触发词“激活”时显示了一个概率峰值:
这是我的,它不仅没有检测到任何东西,而且还很简单!:
我所做的唯一修改是:
batch_size
设置为600 我知道我可能仍需要合并更多的纪元,但令我惊讶的是,输出概率将保持不变。我是在做一些可怕的错误,还是我只需要相信模型会收敛到更有意义的地方?