我正在使用 Python 和 Keras 为图像分类器制作卷积神经网络 (CNN)。我拍摄了大约 50 张文档图像和 150 张非文档图像进行训练。我缩小了分辨率,scipy.misc.imresize(small, (32,32))用于标准化图像,在查看这些像素化图像时,我认为我仍然可以分辨照片和文档之间的区别,所以我认为 ML 算法应该也可以。
我的问题是关于时期数和批量大小。我目前正在使用model.fit(X_train_temp, y_train_temp, epochs=N_epochs, batch_size=batch_size, verbose=verbose). 我在这里看到了有关该主题的问题:
如何设置 batch_size、steps_per epoch 和验证步骤
但答案非常基于定义;我在寻找直觉。我想知道是否有关于为给定问题设置纪元数和批量大小的值的一般准则。我对 epoch 数和批量大小进行了粗略的参数扫描。这是CNN模型:
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), input_shape=input_shape, activation='sigmoid'))
model.add(Conv2D(32, kernel_size=(3, 3), input_shape=input_shape, activation='sigmoid'))
model.add(Flatten())
model.add(Dense(num_classes, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
结果如下:
以下是我迄今为止所做的一些观察。圆圈区域似乎非常适合训练,因为相对较早地实现了高精度,并且随着进一步的时期过去,它似乎没有太大的波动。这似乎batch_size = 1通常是一个坏主意,因为训练似乎并没有改善模型。此外,这似乎batch_size >~ N_epochs是可取的。
问题1:一般batch_size = 1是坏的?或者这只是为了我的特定参数扫描?
问题2:一般情况下N_epochs >~ batch_size推荐吗?
问题 3:谁能谈谈问题 2 中概括的稳健性?
谢谢你。
