我正在尝试在自动编码器中提取thelayer
的输出,并且到目前为止已经参考了this Keras文档和this stackoverflow。当我尝试提取输出时,出现以下错误:
Traceback (most recent call last):
File "train.py", line 36, in <module>
outputs=autoencoder.get_layer(layer_name).output)
File "..Traceback (most recent call last):
File "train.py", line 36, in <module>
outputs=autoencoder.get_layer(layer_name).output)
File "..python3.6/site packages/tensorflow/python/keras/engine/network.py", line 567, in get_layer
raise ValueError('No such layer: ' + name)
ValueError: No such layer: thelayer
", line 567, in get_layer
raise ValueError('No such layer: ' + name)
ValueError: No such layer: thelayer
代码:
encoder_img = tf.keras.layers.Input(shape=(16,16,1), name="input")
x = tf.keras.layers.Conv2D(1024, 1, activation='relu',kernel_initializer=keras.initializers.RandomUniform)(encoder_img)
x = tf.keras.layers.MaxPooling2D(1)(x)
inputtothelayer = tf.keras.layers.Conv2D(512, 1, activation='relu')(x)
thelayer = tf.keras.layers.MaxPooling2D(1)(inputtothelayer)
bottleneck = tf.keras.layers.Conv2D(256, 3, activation='relu')(thelayer)
x = tf.keras.layers.Conv2DTranspose(512, 1, activation='relu')(bottleneck)
x = tf.keras.layers.UpSampling2D(1)(x)
x = tf.keras.layers.Conv2DTranspose(1024, 1, activation='relu')(x)
x = tf.keras.layers.UpSampling2D(1)(x)
decoder_output = tf.keras.layers.Conv2DTranspose(1, 3, activation='relu')(x)
autoencoder = tf.keras.Model(inputs=encoder_img,outputs=decoder_output, name='autoencoder')
autoencoder.fit(data, data,
epochs=1,
batch_size=512,
shuffle=True,)
layer_name = 'thelayer'
intermediate_layer_model = autoencoder(inputs=inputtothelayer, outputs=autoencoder.get_layer(layer_name).output)
intermediate_output = intermediate_layer_model.predict(data)
print(intermediate_layer_model)
答案 0 :(得分:2)
更改以下行:
thelayer = tf.keras.layers.MaxPooling2D(1)(inputtothelayer)
bottleneck = tf.keras.layers.Conv2D(256, 3, activation='relu')(thelayer)
收件人:
pool = tf.keras.layers.MaxPooling2D(1, name="thelayer")(inputtothelayer)
bottleneck = tf.keras.layers.Conv2D(256, 3, activation='relu')(pool)
如果要按名称model.get_layer(layer_name)
检索图层,则应在name
属性中包含图层名称。此外,如果要获取中间层的输出,请执行以下操作:
layer_name = 'thelayer'
intermediate_layer_model = autoencoder(inputs=inputtothelayer, outputs=autoencoder.get_layer(layer_name).output)
intermediate_output = intermediate_layer_model.predict(data)
print(intermediate_layer_model)
执行以下操作:
layer_name = 'thelayer'
intermediate_layer_model = tf.keras.Model(inputs=encoder_img, outputs=autoencoder.get_layer(layer_name).output)
intermediate_output = intermediate_layer_model.predict(np.random.rand(10,16,16,1))
print(intermediate_layer_model)
请注意,我正在使用相同的tf.keras.Model
创建一个新的tf.keras.layers.Input
,其中输出为intermediate_output
。
答案 1 :(得分:0)
自从我换了机器后,我遇到了同样的问题。这意味着代码在旧机器上是正确的,但在新机器上却出现了这个错误。
解决方案> 我已经安装>
pip install tf-nightly
和
pip install keras
然后它工作正常。