Machine learning 尽管学习率很低,但训练损失会随着时间的推移而增加

Machine learning 尽管学习率很低,但训练损失会随着时间的推移而增加,machine-learning,tensorflow,Machine Learning,Tensorflow,我在使用Tensorflow后端的Keras上使用ResNet-50处理CIFAR-10数据集,但我遇到了一种非常奇怪的训练模式,模型损失先减少,然后开始增加,直到它稳定/停留在一个值,因为学习率几乎为0。相应地,模型精度先增加,然后开始下降,直到稳定在10%(也称为随机猜测)。我想知道出了什么问题 通常,这种U型模式的学习率太高(如),但这里的情况并非如此。这种模式也不像经典的“过度拟合”,因为培训和验证损失都会随着时间的推移而增加。在对上述链接的回答中,有人提到,如果使用Adam优化器,当超

我在使用Tensorflow后端的Keras上使用ResNet-50处理CIFAR-10数据集,但我遇到了一种非常奇怪的训练模式,模型损失先减少,然后开始增加,直到它稳定/停留在一个值,因为学习率几乎为0。相应地,模型精度先增加,然后开始下降,直到稳定在10%(也称为随机猜测)。我想知道出了什么问题

通常,这种U型模式的学习率太高(如),但这里的情况并非如此。这种模式也不像经典的“过度拟合”,因为培训和验证损失都会随着时间的推移而增加。在对上述链接的回答中,有人提到,如果使用Adam优化器,当超过局部最小值时,在较小的学习率下,损失可能会爆炸,我不确定我是否能遵守那里所说的,而且我使用的是带有权重衰减的SGD,而不是Adam

特别是在培训设置中,我使用了随机初始化的RENERT50、动量为0.9、重量衰减为0.0001的SGD优化器、批量大小为64、初始学习率为0.01,每10个非递减的验证损失阶段,其下降系数为0.5

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])

您是否可以编辑您的问题以包括您的模型和培训循环代码?仅从损失图就很难看出这个问题。您是否可以再次检查您的训练集和测试集是否被随机洗牌(即,您的模型不是完全在一个类上训练,而是暴露在它从未见过的另一个类上)?我已经添加了代码片段。我已经仔细检查了数据加载过程。数据在加载时被洗牌,在批处理时再次洗牌。只有在这个特定的模型设置下,我才会遇到这个问题。如果我更改optimizer,则不会出现此问题,因此我认为问题与数据洗牌无关。移除权重衰减后,您是否看到相同的行为?否。移除权重衰减后,训练将变得正常。似乎体重下降是原因。但另一方面,当我转向亚当时,我并没有观察到这种模式,不管是否有重量衰减。因此,问题可能归结为为什么SGD+重量衰减会导致这种模式?我不确定,但在Tensorflow文档(第二个“注释”)中,他们说,如果学习率也在衰减,则手动衰减重量衰减: