我正在尝试将CNN的验证准确率从76%(目前)提高到90%以上 . 我将在下面显示有关CNN性能和配置的所有信息 .
从本质上讲,我希望我的CNN能够区分两类mel光谱图:
Class # 1
Class # 2
Here is the graph of accuracy vs epoch:
Here is the graph of loss vs. epoch
最后,这是模型架构配置
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),activation='relu',input_shape=(3, 640, 480)))
model.add(Conv2D(64, (3, 3), activation='relu', dim_ordering="th"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))
这是我对model.compile()和model.fit()的调用
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.SGD(lr=0.001),
metrics=['accuracy'])
print("Compiled model")
history = model.fit(X_train, Y_train,
batch_size=8,
epochs=50,
verbose=1,
validation_data=(X_test, Y_test))
如何更改CNN配置以提高验证准确度分数?
我尝试过的事情:
-
降低学习率以防止准确性的零星波动 .
-
将batch_size从64降低到8 .
-
将时期数增加到50(但不确定这是否足够) .
任何帮助将不胜感激!
UPDATE #1 我将时期数增加到200,并且在让程序一夜之间运行后,我得到了经过验证的准确度得分约为76.31%
我正在发布一张精确度与时代相关的图片以及下面的纪元
还有哪些具体关于我的模型架构可以改变以获得更好的准确性?
1 回答
首先,您必须获取music_tagger_cnn.py并将其放在项目路径中 . 之后,您可以构建您的模型:
您可以按所需的尺寸更改输入张量...我通常使用Theano暗淡排序,但Tensorflow作为后端,这就是为什么:
使用Theano暗淡排序,您必须考虑到必须更改样本维度的顺序
之后,您必须冻结这些您不想更新的图层
现在您可以设置自己的输出,例如:
之后你必须能够训练它:
请注意,标签应采用单热编码
我希望它会有所帮助!!
更新:发布代码,以便我可以帮助调试这些行并防止崩溃 .
编辑#2
编辑#3
我尝试了使用MusicTaggerCRNN作为melgrams的特征提取器的keras示例 . 然后我训练了一个简单的NN,它有2个密集层和一个二进制输出 . 在我的例子中采集的样本也是一个二元分类器,我使用了
keras==1.2.2
和tensorflow-gpu==1.0.0
,对我有用 .这是代码: