总体问题:
大家好,我遇到了一个属性错误,但我不太确定原因是什么。我正在按照这个自编码器教程进行操作,并试图复制其中的一些代码。你们能告诉我我哪里做错了嗎?
自编码器构建:
# 这是原始空间的维度input_dim = maxlen# 这是潜在空间(编码空间)的维度latent_dim = 2encoder = Sequential([ Dense(128, activation='relu', input_shape=(input_dim,)), Dense(64, activation='relu'), Dense(32, activation='relu'), Dense(latent_dim, activation='relu')])decoder = Sequential([ Dense(64, activation='relu', input_shape=(latent_dim,)), Dense(128, activation='relu'), Dense(256, activation='relu'), Dense(input_dim, activation=None)])
当编码器和解码器在以下部分连接时,就会出现这个错误:
autoencoder = Model(inputs=encoder.input, outputs=decoder(encoder.output))
错误信息:
AttributeError: 'Sequential' object has no attribute '_nested_inputs'---------------------------------------------------------------------------AttributeError Traceback (most recent call last)<command-55734003> in <module>----> 1 autoencoder = Model(inputs=encoder.input, outputs=decoder(encoder.output)) 2 3 autoencoder.compile(loss='mse', optimizer='adam')/databricks/python/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py in input(self) 241 AttributeError: If no inbound nodes are found. 242 """--> 243 return self._nested_inputs 244 245 @propertyAttributeError: 'Sequential' object has no attribute '_nested_inputs'
我尝试过的方法:
任何建议都将不胜感激!
回答:
将你的encoder
和decoder
结合起来的最简单方法是实例化一个Input
层,并将其通过encoder
和decoder
传递。
inp = Input((input_dim,))autoencoder = Model(inputs=inp, outputs=decoder(encoder(inp)))autoencoder.compile('adam', 'mse')
这里是运行的笔记本