我创建了三个具有相同架构的卷积自动编码器,以从与不同类型树相关的一些图像中提取特征。
我的代码类似于:
model1 = myAutoencoder()
model2 = myAutoencoder()
model3 = myAutoencoder()
opt = keras.optimizers.Adam(learning_rate=0.001)
loss = keras.losses.MeanSquaredError()
model1.compile(opt=opt, loss=loss)
model2.compile(opt=opt, loss=loss)
model3.compile(opt=opt, loss=loss)
然后我训练:
#X1, X2, X3 are tensors of 64x64 RGB images: for example(100, 64,64,3)
model1.fit(X1, X1)
model2.fit(X2, X2)
model3.fit(X3, X3)
然而,只有第一个模型在学习,而第二个和第三个模型被困在与图中相同的损失:
有趣的是,如果我交换模型 1 和模型 2 的位置,如下所示:
model2.fit(X2, X2)
model1.fit(X1, X1)
model3.fit(X3, X3)
那么只有模型 2 正在学习,模型 1 和模型 3 卡住了。我不明白为什么...
编辑:我正在做的实际培训是这样的:
def scheduler(epoch, lr):
if epoch < 50:
return lr
else:
return lr * np.math.exp(-0.1)
model2.fit(X2, X2, epochs=100, callbacks=[LearningRateScheduler(scheduler)])
model1.fit(X1, X1, epochs=100, callbacks=[LearningRateScheduler(scheduler)])
model3.fit(X3, X3, epochs=100, callbacks=[LearningRateScheduler(scheduler)])
我发现如果我删除回调,学习过程是“正常的”,是否有回调干扰模型的原因?