首页 文章

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

提问于
浏览
0

我在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

    这是一个想法 . 构建模型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页面了解一些想法 .

相关问题