我正在tensorflow docs网页上的NST教程中,我在这里是从预先训练的VGG19模型的输出中创建一个新模型。
def vgg_layers(layer_names):
""" Creates a vgg model that returns a list of intermediate output values."""
# Load our model. Load pretrained VGG, trained on imagenet data
vgg = tf.keras.applications.VGG19(include_top=False, weights='imagenet')
vgg.trainable = False
outputs = [vgg.get_layer(name).output for name in layer_names]
model = tf.keras.Model([vgg.input], outputs)
return model
我们有VGG19模型中的图层名称列表(即block1_conv1
)。从预先训练的模型中,我们获得名称列表中指定的每个图层的输出。然后,我们构建一个新的model
,并将这些outputs
传入作为新模型的最终输出。
我不太了解的是,经过预先训练的VGG19模型在将输入传递给它之前如何具有outputs
?也许我误会了outputs
在这里的含义,但是我的理解是,给定input
,层将[[compute一个output
。但是如果没有input
,它如何提供有用的output
?
input
)本身。因此,如果我们要从头开始创建新的Model
,这是否还意味着其权重都未经训练了?tl; dr:什么是Layer.outputs?为什么我们从预训练模型中真正需要它们呢?如何将这些输出传递给从头生成的新模型,仍然如何转移来自预训练的VGG19的知识?