【发布时间】:2019-10-01 12:28:36
【问题描述】:
我制作了一个自动编码器,由编码器和解码器部分组成。 我已经设法将编码器从整个网络中分离出来,但我在解码器部分遇到了一些问题。
这部分有效:
encoder = tf.keras.Model(inputs=autoencoder.input, outputs=autoencoder.layers[5].output)
但是这部分没有:
decoder = tf.keras.Model(inputs=autoencoder.layers[6].input, outputs=autoencoder.output)
错误:
W0514 14:57:48.965506 78976 network.py:1619] 模型输入必须来自
tf.keras.Input(因此包含过去的层元数据),它们不能是先前非输入层的输出。在这里,指定为“model_15”的输入的张量不是输入张量,它是由 layer flatten 生成的。 请注意,输入张量是通过tensor = tf.keras.Input(shape)实例化的。 导致问题的张量是:flatten/Reshape:0
有什么想法可以尝试吗?
谢谢
/米凯尔
编辑: 对于kruxx
autoencoder = tf.keras.models.Sequential()
# Encoder Layers
autoencoder.add(tf.keras.layers.Conv2D(16, (3, 3), activation='relu', padding='same', input_shape=x_train_tensor.shape[1:]))
autoencoder.add(tf.keras.layers.MaxPooling2D((2, 2), padding='same'))
autoencoder.add(tf.keras.layers.Conv2D(8, (3, 3), activation='relu', padding='same'))
autoencoder.add(tf.keras.layers.MaxPooling2D((2, 2), padding='same'))
autoencoder.add(tf.keras.layers.Conv2D(8, (3, 3), strides=(2,2), activation='relu', padding='same'))
# Flatten encoding for visualization
autoencoder.add(tf.keras.layers.Flatten())
autoencoder.add(tf.keras.layers.Reshape((4, 4, 8)))
# Decoder Layers
autoencoder.add(tf.keras.layers.Conv2D(8, (3, 3), activation='relu', padding='same'))
autoencoder.add(tf.keras.layers.UpSampling2D((2, 2)))
autoencoder.add(tf.keras.layers.Conv2D(8, (3, 3), activation='relu', padding='same'))
autoencoder.add(tf.keras.layers.UpSampling2D((2, 2)))
autoencoder.add(tf.keras.layers.Conv2D(16, (3, 3), activation='relu'))
autoencoder.add(tf.keras.layers.UpSampling2D((2, 2)))
autoencoder.add(tf.keras.layers.Conv2D(1, (3, 3), activation='sigmoid', padding='same'))
> Model: "sequential"
> _________________________________________________________________
> Layer (type).................Output Shape..............Param #
> =================================================================
> conv2d (Conv2D)..............(None, 28, 28, 16)........160
> _________________________________________________________________
> max_pooling2d (MaxPooling2D).(None, 14, 14, 16)........0
> _________________________________________________________________
> conv2d_1 (Conv2D)............(None, 14, 14, 8).........1160
> _________________________________________________________________
> max_pooling2d_1 (MaxPooling2.(None, 7, 7, 8)...........0
> _________________________________________________________________
> conv2d_2 (Conv2D)............(None, 4, 4, 8)...........584
> _________________________________________________________________
> flatten (Flatten)............(None, 128)...............0
> _________________________________________________________________
> reshape (Reshape)............(None, 4, 4, 8)...........0
> _________________________________________________________________
> conv2d_3 (Conv2D)............(None, 4, 4, 8)...........584
> _________________________________________________________________
> up_sampling2d (UpSampling2D).(None, 8, 8, 8)...........0
> _________________________________________________________________
> conv2d_4 (Conv2D)............(None, 8, 8, 8)...........584
> _________________________________________________________________
> up_sampling2d_1 (UpSampling2 (None, 16, 16, 8).........0
> _________________________________________________________________
> conv2d_5 (Conv2D)............(None, 14, 14, 16)........1168
> _________________________________________________________________
> up_sampling2d_2 (UpSampling2.(None, 28, 28, 16)........0
> _________________________________________________________________
> conv2d_6 (Conv2D)............(None, 28, 28, 1).........145
> =================================================================
> Total params: 4,385
> Trainable params: 4,385
> Non-trainable params: 0
> ______________________________________
【问题讨论】:
-
你能打印出 autoencoder.layers[6].input 的内容吗?
-
Benjamin Breton:张量("flatten/Reshape:0", shape=(None, 128), dtype=float32)
-
你能提供你完整的自动编码器模型吗?
标签: tensorflow keras