首页 文章

AttributeError:'Model'对象没有属性'_name'

提问于
浏览
0
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model


input_img = Input(shape=(784,))
encoded = Dense(128, activation='relu')(input_img)
encoded = Dense(64, activation='relu')(encoded)
encoded = Dense(64, activation='relu')(encoded)
encoded = Dense(64, activation='relu')(encoded)
encoded = Dense(64, activation='relu')(encoded)
encoded = Dense(64, activation='relu')(encoded)
encoded = Dense(32, activation='relu', name='encoder_output')(encoded)
decoded = Dense(64, activation='relu', name='decoder_input')(encoded)
decoded = Dense(128, activation='relu')(decoded)
decoded = Dense(128, activation='relu')(decoded)
decoded = Dense(128, activation='relu')(decoded)
decoded = Dense(128, activation='relu')(decoded)
decoded = Dense(128, activation='relu')(decoded)
decoded = Dense(784, activation='sigmoid')(decoded)
autoencoder = Model(input_img, decoded)

decoder = Model(inputs=autoencoder.get_layer('decoder_input').input,outputs=autoencoder.output)

运行此代码后,我收到此错误 . 我想要做的是从自动编码器中提取解码器 .

我看到here,他们用图层的索引提取它 . 但我不知道索引 .

decoder_input = Input(shape=(encoding_dim,))
decoder = Model(decoder_input, autoencoder.layers[-1](decoder_input))

1 回答

  • 0

    我不确定这些示例的来源,但是解剖API来创建这些模型并不是预期的用途 . 如果您查看库作者的blog post,最好将编码器和解码器分开:

    input_img = Input(shape=(784,))
    encoded = Dense(128, activation='relu')(input_img)
    encoded = Dense(64, activation='relu')(encoded)
    encoded = Dense(64, activation='relu')(encoded)
    encoded = Dense(64, activation='relu')(encoded)
    encoded = Dense(64, activation='relu')(encoded)
    encoded = Dense(64, activation='relu')(encoded)
    encoded = Dense(32, activation='relu')(encoded)
    encoder = Model(input_img, encoded)
    
    decoder_input = Input(shape=(32,))
    decoded = Dense(64, activation='relu')(decoder_input)
    decoded = Dense(128, activation='relu')(decoded)
    decoded = Dense(128, activation='relu')(decoded)
    decoded = Dense(128, activation='relu')(decoded)
    decoded = Dense(128, activation='relu')(decoded)
    decoded = Dense(128, activation='relu')(decoded)
    decoded = Dense(784, activation='sigmoid')(decoded)
    decoder = Model(decoder_input, decoded)
    
    autoenc = decoder(encoder(input_img))
    autoencoder = Model(input_img, autoenc)
    

    关键是 Model 只是另一层,实际上它继承自 Layer 类 . 因此,您可以创建较小的模型,然后像层一样使用它们 .

相关问题