我正在为语音识别实现CNN。输入为形状为(85314,99,1)的MEL频率,标签采用35种输出类别(形状:(85314,35))进行一键编码。当我运行模型时,训练精度(图2)开始很高,并且在历时数上保持不变,而验证的损失(图1)却增加了。因此,它可能过度拟合,但我找不到问题的根源。我已经降低了学习速度,并按批处理大小进行游戏,但结果保持不变。培训数据的数量也应该足够。我的超参数设置是否在其他地方出现问题?
我的模型和超参数定义如下:
#hyperparameters
input_dimension = 85314
learning_rate = 0.0000025
momentum = 0.85
hidden_initializer = random_uniform(seed=1)
dropout_rate = 0.2
# create model
model = Sequential()
model.add(Convolution1D(nb_filter=32, filter_length=3, input_shape=(99, 1), activation='relu'))
model.add(Convolution1D(nb_filter=16, filter_length=1, activation='relu'))
model.add(Flatten())
model.add(Dropout(0.2))
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(64, activation='relu'))
model.add(Dense(35, activation='softmax'))
model.compile(loss='binary_crossentropy', optimizer='sgd', metrics=['acc'])
history = model.fit(frequencies_train, labels_hot, validation_split=0.2, epochs=10, batch_size=50)
答案 0 :(得分:1)
您正在使用“ binary_crossentropy”解决多个类的问题。将其更改为“ categorical_crossentrop”。
Keras使用binary_crossentropy和两个以上标签模型计算的准确性是错误的。