Q:怎么看loss和acc的變化(loss幾回合就不變了怎么辦?)
(轉自http://blog.csdn.net/SMF0504/article/details/71698354)
- train loss 不斷下降,test loss不斷下降,說明網絡仍在學習;
- train loss 不斷下降,test loss趨于不變,說明網絡過擬合;
- train loss 趨于不變,test loss不斷下降,說明數據集100%有問題;
- train loss 趨于不變,test loss趨于不變,說明學習遇到瓶頸,需要減小學習率或批量數目;
- train loss 不斷上升,test loss不斷上升,說明網絡結構設計不當,訓練超參數設置不當,數據集經過清洗等問題。
Q:訓練過程中loss數值為負數?
【原因】輸入的訓練數據沒有歸一化造成
【解決方法】把輸入數值通過下面的函數過濾一遍,進行歸一化
def data_in_one(inputdata):
inputdata = (inputdata-inputdata.min())/(inputdata.max()-inputdata.min())
return inputdata
Q:如何讓訓練過程可視化
import keras
from keras.utils import np_utils
import matplotlib.pyplot as plt
%matplotlib inline
#寫一個LossHistory類,保存loss和acc
class LossHistory(keras.callbacks.Callback):
def on_train_begin(self, logs={}):
self.losses = {'batch':[], 'epoch':[]}
self.accuracy = {'batch':[], 'epoch':[]}
self.val_loss = {'batch':[], 'epoch':[]}
self.val_acc = {'batch':[], 'epoch':[]}
def on_batch_end(self, batch, logs={}):
self.losses['batch'].append(logs.get('loss'))
self.accuracy['batch'].append(logs.get('acc'))
self.val_loss['batch'].append(logs.get('val_loss'))
self.val_acc['batch'].append(logs.get('val_acc'))
def on_epoch_end(self, batch, logs={}):
self.losses['epoch'].append(logs.get('loss'))
self.accuracy['epoch'].append(logs.get('acc'))
self.val_loss['epoch'].append(logs.get('val_loss'))
self.val_acc['epoch'].append(logs.get('val_acc'))
def loss_plot(self, loss_type):
iters = range(len(self.losses[loss_type]))
plt.figure()
# acc
plt.plot(iters, self.accuracy[loss_type], 'r', label='train acc')
# loss
plt.plot(iters, self.losses[loss_type], 'g', label='train loss')
if loss_type == 'epoch':
# val_acc
plt.plot(iters, self.val_acc[loss_type], 'b', label='val acc')
# val_loss
plt.plot(iters, self.val_loss[loss_type], 'k', label='val loss')
plt.grid(True)
plt.xlabel(loss_type)
plt.ylabel('acc-loss')
plt.legend(loc="upper right")
plt.show()
在模型中,model語句前加上:
history = LossHistory()
然后在model.fit里加上callbacks = {history},以及下面調用history
model.fit(x, y, batch_size=32, nb_epoch=20,validation_data = (xt,yt),validation_steps=None,callbacks=[history])
history.loss_plot('epoch')
結果如下:
image.png