Я следую учебному пособию по NST на веб-странице tenorflow docs, и я нахожусь в этом блоке, где мы создаем новую модель из результатов предварительно обученной модели 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
слой будет вычислять output
. Но без этого input
, как он может обеспечить output
, который имеет какое-либо применение?
Кроме того, с помощью NST мы на самом деле не обучаем модель, а применяем градиент к изображению (input
) сам. Итак, если мы создаем новый Model
с нуля, значит ли это, что все его веса не обучены?
tl; dr: Что такое Layer.outputs? И почему они все, что нам действительно нужно от предварительно обученной модели? Как передача этих выходов в новую модель, созданную с нуля, по-прежнему передает знания из предварительно обученного VGG19?