简单CNN

时间:2017-05-24 19:24:33

标签: deep-learning keras conv-neural-network training-data

我正在使用keras实现一个简单的二进制分类网络。我有一个包含2个类别的数据集,我正在尝试使用这些数据训练我的网络。我没有庞大的数据集。这两个类别的图像总数约为500个。

网络如下:

    self.model = Sequential()

    self.model.add(Conv2D(128, (2, 2), padding='same', input_shape=dataset.X_train.shape[1:]))
    self.model.add(Activation('relu'))
    self.model.add(MaxPooling2D(pool_size=(2, 2)))
    self.model.add(Dropout(0.25))

    self.model.add(Conv2D(64, (2, 2), padding='same'))
    self.model.add(Activation('relu'))
    self.model.add(MaxPooling2D(pool_size=(2, 2)))
    self.model.add(Dropout(0.25))

SGD配置:

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)

我正在使用binary_crossentropy

模型训练和损失图如下所示: Model Accuracy Model Loss

我只是想知道为什么图表中有很多大峰值以及我可以做些什么来优化它。

我是新手,因此任何意见和建议都将受到赞赏。

谢谢!

2 个答案:

答案 0 :(得分:1)

如果你看一下训练/测试中每个时代的结尾,似乎精度下降(损失也增加),这意味着数据集的顺序不会改变,这可能不会导致更好的泛化在我看来,在每个时代你应该做的是在训练阶段随机化你的数据集(批处理),但是对于测试阶段,你可以离开它,因为模型不再进行任何学习< / p>

答案 1 :(得分:1)

我相信这些高峰实际上与新纪元的开始相吻合。在整个历元中,使用动量时,前一批的梯度用于计算当前梯度。这就解释了为什么损失在一个时期内一直在稳步减少,而在下一个时期开始时却不断上升,也就是说,当新时期开始时,优化器不使用针对先前时期中批次计算的梯度。