【发布时间】:2016-09-22 14:53:41
【问题描述】:
我正在尝试使用 keras 对图像进行二元分类。
我的 CNN 模型在训练数据上得到了很好的训练(提供了 ~90% 的训练准确率和 ~93% 的验证准确率)。但是在训练期间,如果我设置批量大小=15000,我会得到图 I 输出,如果我设置批量大小=50000,我会得到图 II 作为输出。有人可以告诉我出了什么问题吗?预测不应该取决于批量大小,对吧?
我用于预测的代码:
y=model.predict_classes(patches, batch_size=50000,verbose=1)
y=y.reshape((256,256))
我的模型:-
model = Sequential()
model.add(Convolution2D(32, 3, 3, border_mode='same',
input_shape=(img_channels, img_rows, img_cols)))
model.add(Activation('relu'))
model.add(Convolution2D(32, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Convolution2D(64, 3, 3, border_mode='same'))
model.add(Activation('relu'))
model.add(Convolution2D(64, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(nb_classes))
model.add(Activation('softmax'))
# let's train the model using SGD + momentum (how original).
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
optimizer=sgd,
metrics=['accuracy'])
【问题讨论】:
-
实际上似乎预测大小很重要并影响结果。检查 kares 代码:github.com/fchollet/keras/blob/master/keras/engine/training.py [第 818 行] github.com/fchollet/keras/blob/master/keras/models.py [第 548 行]
-
那么,有什么解决办法吗? :(
-
神经网络的解决方案与以往一样:尝试不同的设置并进行比较。另见http://svail.github.io/rnn_perf/,第 5.1 节
-
没错!尝试找到适合批量大小的值,您也可以尝试默认值 32
-
对于训练,我可以理解batch size对准确率有一定影响。但是预测应该取决于批量大小?
标签: python machine-learning neural-network deep-learning keras