CNN 在第一个 epoch 后输出 nan 损失

问题描述 投票:0回答:1

我正在用我的数据训练我的 CNN 模型,在我做了一些调整之后(我将 sigmoid 激活更改为卷积上的 relu 并添加了学习率衰减函数),我在第一个 epoch 后得到了 NAN 损失和 NAN mae。谁能告诉我我该怎么办?

def scheduler(epoch, lr):
    return 1/(1+(1/math.e)*epoch)*lr

lr_schedule = tf.keras.callbacks.LearningRateScheduler(scheduler)
with tpu_strategy.scope():
    modelCNN = tf.keras.Sequential()
    modelCNN.add(tf.keras.layers.Conv2D(100, (8, 8), strides=(2, 2), activation='relu', input_shape=(256, 256, 1)))
    modelCNN.add(tf.keras.layers.BatchNormalization()) 
    modelCNN.add(tf.keras.layers.MaxPooling2D(pool_size=(8, 8), strides=(3, 3)))
    
    modelCNN.add(tf.keras.layers.Conv2D(100, (4, 4), strides=(1, 1), activation='relu'))
    modelCNN.add(tf.keras.layers.BatchNormalization()) 
    modelCNN.add(tf.keras.layers.GlobalMaxPooling2D())
    
    modelCNN.add(tf.keras.layers.Dense(100, activation = 'relu'))
    modelCNN.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.01), loss='mean_absolute_error', metrics=['mae'])

modelCNN.fit(X_train, Y_train, epochs=96, validation_data=(X_test, Y_test), callbacks=[lr_schedule])
Epoch 1/96 8127/8127 [==============================] - 232s 26ms/step - loss: 64.8304 - mae: 64.8304 - val_loss: nan - val_mae: nan - lr: 0.0100
Epoch 2/96 3448/8127 [===========>..................] - ETA: 1:12 - loss: nan - mae: nan
python tensorflow deep-learning conv-neural-network
1个回答
0
投票

尝试降低学习率。它非常高,可能是导致此错误的原因。 数据越多,lr 越低越好,而且数据量很大。 通常 lr=0.001 对于大多数机器学习任务来说都很好,所以尝试一下。

我还建议对损失使用mean_squared_error,因为它会鼓励模型纠正更大的错误,而不是尝试纠正更小的细节,但是使用mae进行更多的epochs也可以。

modelCNN.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), loss='mean_squared_error', metrics=['mae']).
© www.soinside.com 2019 - 2024. All rights reserved.