【发布时间】:2019-07-24 18:35:38
【问题描述】:
我正在训练一个 CNN 模型,这是代码。
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(16, (3,3), activation='relu', input_shape=(300, 300,3)),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Flatten(input_shape=(300, 300)),
tf.keras.layers.Dense(512, activation=tf.nn.relu),
tf.keras.layers.Dense(256, activation=tf.nn.relu),
tf.keras.layers.Dense(64, activation=tf.nn.relu),
tf.keras.layers.Dense(1, activation='linear')
])
我使用 Adam 的学习率为 0.00003,训练了 100 个 epoch。
但是,验证的 10 个 epoch 开始在 0.16 和 0.22 之间波动。 (我不能使用提前停止,因为每次我重试训练时,都会在随机数的时期后达到最小值)。
这个学习曲线正常吗?我能做些什么来改进它?
【问题讨论】:
-
根据我的经验,这是绝对正常的,不用担心。你可以尝试将你的训练推得更久一些(大约
500epochs)并降低你的学习率(除以3,然后是10),看看你是否能得到更好的结果。 -
您也可以尝试添加 BatchNorms。我不知道您要解决什么问题,但是使用 Conv2D,通常是个好主意
-
谢谢你的回答我会试试这个。
-
我尝试了 300 个 epoch 验证并没有改变我可以看到我过度拟合,因为只有测试减少到 0。我尝试了 Dropout 和 BatchNormalization 但错误增加了它变成了 0.18- 0.28
-
好吧,那我猜你还是试着降低你的学习率,但是再一次,有这种振荡是完全正常的(但它们可能是学习率太高的症状)
标签: python tensorflow conv-neural-network