我在Keras有一个预先训练过的模特。我想训练另一个模型,其中模型的输出被输入用于已经训练的模型,并且已经训练的模型的输出被用在未训练模型的损失函数中。像
这样的东西in_a + mod_b(some kind of feedback from B here) --> Model A --> out_a --> Model B --> out_b
error = (in_a - out_b)**2
然后使用此错误来训练模型A.
in_a
在此系统中可视为常量,并且还有反馈循环
有关如何在keras或tensorflow中执行此操作的任何想法
答案 0 :(得分:0)
这是一个想法。构建模型A直到输出层,我们假设它与模型B的输入层兼容。另外,假设您使用预训练的VGG16作为模型B.您将使用预训练的权重加载模型:
from keras.applications.vgg16 import VGG16
# Model A is trainable
x = Input(shape=(32,))
x_d = Dense(10)(x)
model_a_out = Dense(10)(x_d)
# Model B
model_b = VGG16(weights='imagenet', include_top=True)
# Freeze Model B
for layer in model_b.layers:
layer.trainable = False
# Set input to Model B as output from A
model_b.input = model_a_out
# Train as usual
model_b.compile... and model_b.fit ...
另一种方法是首先要构建A.然后:
for layer in model_b.layers:
new_layer = layer
new_layer.trainable = False
model_a.add(new_layer)
查看Keras Applications页面了解一些想法。