我有前馈神经网络,在 cca 34k 样本上训练并在 8k 样本上进行测试。数据集中有 139 个特征。ANN 在两个标签 0 和 1 之间进行分类,所以我在最后一层和两个隐藏层使用 sigmoid 函数,两者都有 400 个单位。NN 是使用以下 Keras 代码创建的:
model = Sequential()
model.add(Dense(units=139, input_dim=len(list(X))))
model.add(Dense(units=400))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(units=400))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(units=1))
model.add(Activation('sigmoid'))
model.compile(optimizer='sgd',
loss='binary_crossentropy',
metrics=['accuracy'])
checkpoint = ModelCheckpoint('tempmodelKeras.h5',period=1)
custom = LambdaCallback(on_epoch_end=lambda epoch,logs: test_callback_wrapper())
model.fit(X, y, epochs=500, batch_size=128, callbacks=[checkpoint,custom])
test_callback_wrapper()
仅用于在测试数据集上的每个 epoch 之后测试模型,然后计算不同阈值的平均精度分数。
现在我需要帮助的部分:下图显示了测试集的 X 轴上的纪元数和 Y 轴上的平均精度。
我尝试了三种不同的批量大小(32、128、256),但如果你看一下情节,看起来更小的批量大小在达到最大平均精度所需的时期数方面“更快”,但更容易到过拟合。但是,我阅读了几篇文章,其中写到较大的批次通常会导致过度拟合,而较小的批次更好。怎么可能在我的图像中,反之亦然,更大的批次表现更好?