值错误:没有这样的层-提取张量流keras层的输出

时间:2019-08-20 23:13:03

标签: tensorflow keras conv-neural-network

我正在尝试在自动编码器中提取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)

2 个答案:

答案 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

然后它工作正常。