2017-05-24 167 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

相關問題