我在this tutorial之后在Keras中创建了一个自动编码器,但不断出现以下错误。
decoder = tf.keras.Model(encoded_input, decoded(input_img))
TypeError: 'Tensor' object is not callable
由于这种对象的性质,我认为这与不能以这种方式使用张量有关,但是我在理解为什么以及如何解决这个问题上有一些空白。
这是我的代码的一个最小工作示例:
# input_img input placeholder
input_img = tf.keras.layers.Input(shape=(16, 16, 1), name ="input")
encoded = tf.keras.layers.Dense(encoding_dim, activation='relu')(input_img)
decoded = tf.keras.layers.Dense(256, activation='sigmoid')(encoded)
autoencoder = tf.keras.Model(input_img, decoded)
encoder = tf.keras.Model(input_img, encoded)
encoded_input = tf.keras.layers.Input(shape=(encoding_dim,))
decoder = tf.keras.Model(input_img, decoded(encoded_input))
答案 0 :(得分:1)
Keras Model
期望输入和输出参数为 layers ,而不是张量。本教程是正确的-您似乎在decoder =
之前错过了一行:-decoder_layer = autoencoder.layers[-1]
一起更改了decoder =
:
input_img = tf.keras.layers.Input(shape=(16, 16, 256), name ="input")
encoded = tf.keras.layers.Dense(encoding_dim, activation='relu')(input_img)
decoded = tf.keras.layers.Dense(256, activation='sigmoid')(encoded)
autoencoder = tf.keras.Model(input_img, decoded)
encoder = tf.keras.Model(input_img, encoded)
encoded_input = tf.keras.layers.Input(shape=(encoding_dim,))
decoder_layer = autoencoder.layers[-1] # gets 'decoded' = last layer of 'autoencoder'
decoder = tf.keras.Model(encoded_input, decoder_layer(encoded_input))