今天训练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不断上升,说明网络结构设计不当,训练超参数设置不当,数据集经过清洗等问题