尽管学习率极低,但训练损失会随着时间而增加

时间:2020-07-22 16:29:04

标签: machine-learning tensorflow

我在带有Tensorflow后端的Keras上使用ResNet-50使用CIFAR-10数据集,但是我遇到了一个非常奇怪的训练模式,其中模型损失首先减少,然后开始增加,直到停滞/卡在由于学习率几乎为0,所以只有一个值。相应地,模型精度首先增加,然后开始降低,直到稳定在10%(又称随机猜测)。我不知道怎么了?

通常,这种U形模式的学习率太大(例如this post),但是这里不是这种情况。这种模式看起来也不像经典的“过度拟合”,因为训练和验证损失都随着时间而增加。在上面链接的post的答案中,有人提到如果使用Adam优化器,则在超出局部最小值的情况下,如果学习率较低,则损失可能会爆炸,我不确定是否可以遵循那里所说的,而且我使用的是重量减轻的SGD而不是Adam。

专门针对训练设置,我使用了具有随机初始化功能的resent50,具有0.9动量的SGD优化器和使用decoupled weight decay regularization的权重衰减为0.0001,批处理大小为64,初始学习率0.01,下降了0.5倍的方法每10个时期减少验证损失。

base_model = tf.keras.applications.ResNet50(include_top=False,
                                        weights=None,pooling='avg', 
                                        input_shape=(32,32,3))
prediction_layer = tf.keras.layers.Dense(10)
model = tf.keras.Sequential([base_model,
                         prediction_layer])
SGDW = tfa.optimizers.extend_with_decoupled_weight_decay(tf.keras.optimizers.SGD)
optimizer = SGDW(weight_decay=0.0001, learning_rate=0.01, momentum=0.9)
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
          metrics=["accuracy"])
reduce_lr= tf.keras.callbacks.ReduceLROnPlateau(monitor='val_loss',factor=0.5, patience=10)
model.compile(optimizer=optimizer, 
          loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
          metrics=["accuracy"])
model.fit(train_batches, epochs=250, 
      validation_data=validation_batches,
      callbacks=[reduce_lr])

enter image description here enter image description here enter image description here

0 个答案:

没有答案