bounty还有4天到期。回答此问题可获得+50声望奖励。vivian.ai正在寻找来自信誉良好来源的答案:迁移学习:精度非常低并且没有增加。
在Dog Breed Classification . kaggle notebook上工作。模型的精度非常非常低(小于0.01)并且没有增加。
base_model = keras.applications.Xception(
weights="imagenet",
include_top=False
)
inputs = tf.keras.Input(shape=(224, 224, 3))
x = data_augmentation(inputs)
x = preprocess_input(x)
x = base_model(x) # non-trainable
x = global_avg(x)
x = tf.keras.layers.Dropout(0.3)(x)
outputs = prediction_layer(x) #120 classes so 120 units
model = tf.keras.Model(inputs, outputs)
model.compile(optimizer=keras.optimizers.SGD(learning_rate=1, momentum=0.9),
loss="sparse_categorical_crossentropy",
metrics=['accuracy'])
history = model.fit(
train_ds,
epochs=50,
validation_data=valid_ds,
class_weight=class_weight
)
我看了keras github所以尝试
for layer in base_model.layers:
if "batch_norm" not in str(layer):
layer.trainable = False
但没有改善。
2条答案
按热度按时间oogrdqng1#
先尝试无dropout
特别是当你的模型看起来没有学习的时候,没有很好的解释在你的模型架构中已经有了dropout。正则化排在第二位,然后从更小的dropout率开始。
重新配置优化程序
学习率为1的SGD可能会对你的体重造成很大的影响。尝试使用ADAM及其默认学习率
可训练假
一定要让base_model的权重trainable=False,这是迁移学习的要点。Trainable true可以在其他一切正常并且数据集足够大,可以合理地训练imagenet的所有权重时设置(我怀疑-不知道你的数据集)。
验证数据
检查你的验证数据是什么样子的,并确保那里的样本是合理的,没有标签切换或类似的错误发生。
ve7v8dk22#
除了上面提到的,你可以尝试以下方法,看看是否有改善:
1.使用回调函数'ReduceLROnPlateau'来根据需要增加或减少学习率:
reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.1,patience=5, min_lr=0.00001, mode='auto')
1.在训练模型之前设置这些设置(根据变量名称和批量大小值进行替换):
STEPS_PER_EPOCHS = training_set.n//training_set.batch_size
VALIDATION_STEPS = validation_set.n//validation_set.batch_size
1.修改拟合函数以适应回调函数: