我想使用Tensorflow和Keras在预训练模型中添加新图层。问题是,这些新图层不是要添加到模型的顶部,而是要在开始时添加。我想使用预训练网络作为模型的核心,创建一个三连体模型,该模型采用3种不同的输入并给出3种不同的输出。为此,我需要在模型的开头插入3个新的输入层。
默认路径是仅链接图层和模型,但是此方法将预先训练的模型视为新图层(当创建具有新输入和预先训练的模型的新模型时,模型仅包含4层,3个输入层以及整个预训练模型):
input_1 = tf.keras.layers.Input(shape = (224,224,3))
input_2 = tf.keras.layers.Input(shape = (224,224,3))
input_3 = tf.keras.layers.Input(shape = (224,224,3))
output_1 = pre_trained_model(input_1)
output_2 = pre_trained_model(input_2)
output_3 = pre_trained_model(input_3)
new_model = tf.keras.Model([input_1, input_2, input_3], [output_1, output_2, output_3])
new_model
只有4层,这是因为Keras API将pre_trained_model
视为一层。
我知道上面的选项可以正常工作,正如我在许多代码示例中所看到的那样,但是我想知道是否有更好的选择。我觉得很尴尬,因为最终模型的内部层的访问将被弄乱,更不用说在添加了3个输入层(预训练模型的输入层)之后模型将具有一个额外的输入层的事实仍然完整无缺,完全没有必要。)
答案 0 :(得分:1)
不,这不会添加图层,您正在创建一个多输入多输出模型,每个暹罗分支共享权重。 Keras中没有其他API可以执行此操作,因此这是您唯一的选择。
您总是可以通过pre_trained_model
变量访问内部模型的各个层,因此不会丢失任何内容。