今天訓練keras時,發現在某些參數下,訓練過程中的loss和acc在開始就很差(loss很大,acc很小,大概0.1左右)然后就穩定不變了,經過思考發現可能是步長設置的太大了,於是改變步長,小於默認值0.001,定為0.0005。效果顯著提升。代碼:
model = tf.keras.models.Sequential([
# tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128,activation='relu',input_shape=(784,)), tf.keras.layers.Dense(64,activation='relu'), tf.keras.layers.Dense(10,activation=tf.nn.softmax), ]) model.compile(optimizer=tf.train.AdamOptimizer(learning_rate=0.0005),loss='sparse_categorical_crossentropy',metrics=['accuracy']) train_images_array = train_images.as_matrix() train_labels_array = train_labels.as_matrix() model.fit(train_images_array,train_labels_array,batch_size=64,epochs=100)
- train loss 不斷下降,test loss不斷下降,說明網絡仍在學習;
- train loss 不斷下降,test loss趨於不變,說明網絡過擬合;
- train loss 趨於不變,test loss不斷下降,說明數據集100%有問題;
- train loss 趨於不變,test loss趨於不變,說明學習遇到瓶頸,需要減小學習率或批量數目;
- train loss 不斷上升,test loss不斷上升,說明網絡結構設計不當,訓練超參數設置不當,數據集經過清洗等問題