使用预先训练的模型训练模型

时间:2017-03-26 10:48:11

标签: tensorflow deep-learning keras

我在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中执行此操作的任何想法

1 个答案:

答案 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页面了解一些想法。