2017-05-24 173 views
1

我正在使用keras来实现一个简单的二进制分类网络。我有一个包含2个类别的数据集,我正在尝试使用这些数据来训练我的网络。我没有庞大的数据集。在这两个类别的图像总数是500左右简单的CNN的不平衡训练和测试准确性

网络是如下:

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

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

我是新手,因此任何意见和建议将不胜感激。

谢谢!

+1

这就是为什么它被称为**随机**渐变下降。通过在每次迭代中使用小批量而不是整个数据集,梯度只是真实梯度的噪声估计。因此,错误图的行为有点像随机游走。只要没有重大的数值不稳定性,就不需要对其进行优化。 – Kh40tiK

回答

1

如果你看看训练/测试中每个时代的结束,似乎精度下降(损失也增加),这意味着你的数据集序列没有变化,这可能不会导致更好在我看来,在每个时代你应该做的是在训练阶段随机化你的数据集(批处理),但是对于测试阶段,你可以放弃它,因为模型没有做任何学习了

+0

感谢您的评论。你说得对,精度下降到最后。然而,我正在使用keras'self.model.fit_generator(datagen.flow(dataset.X_train,dataset.Y_train, batch_size = batch_size)的flow()方法, samples_per_epoch = dataset.X_train.shape [0], nb_epoch = nb_epoch, validation_data =(dataset.X_valid,dataset.Y_valid))'。它应该通过使用给定数据集中的随机批次来随机化数据集。 – blackbug

+0

对不起,我不知道keras,但如果你已经随机化,那么它可能是数据集的本质。祝你好运 – Eliethesaiyan

相关问题