Tensorflow-了解layer.output

问题描述 投票:0回答:1

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

[此外,使用NST,我们实际上不是在训练模型,而是将梯度应用于图像(input)本身。因此,如果我们要从头开始创建新的Model,这是否还意味着其权重都未经训练了?

tl; dr:什么是Layer.outputs?为什么我们从预训练模型中真正需要它们呢?如何将这些输出传递给从头生成的新模型,仍然如何转移来自预训练的VGG19的知识?

python tensorflow keras style-transfer
1个回答
0
投票
enter image description here因此,图层同时具有输入和输出。您可以认为一个节点是中心节点,传入边缘以权重的形式提供信息,而出端边缘以新权重的形式离开该节点(应用激活fxn之后)。通过连接输入和将图层输出到节点。节点及其激活是vgg模型固有的!
© www.soinside.com 2019 - 2024. All rights reserved.