将 Flatten 层添加到 Sequential 模型时出错
Error when adding Flatten layer to Sequential model
我已经使用 Keras 创建并训练了一个自动编码器。
训练完这个模型后,我只想得到编码器部分,所以我做了一些 pop()
.
后来我创建了 Sequential()
模型,基于我的自动编码器模型的剩余层:
model_seq = Sequential(layers=autoencoder.layers)
要添加 Flatten()
层,我做了:
l_out = Flatten()(model_seq.output)
model_seq.layers.append(l_out)
在我看来这应该足够了,所以我打电话给 model_seq.summary()
来检查是否一切正常。
但不幸的是我遇到了这个错误:
model_seq.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) (None, 256, 256, 1) 0
_________________________________________________________________
conv2d_1 (Conv2D) (None, 256, 256, 32) 320
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 128, 128, 32) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 128, 128, 64) 18496
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 64, 64, 64) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 64, 64, 128) 73856
_________________________________________________________________
Traceback (most recent call last):
File "<ipython-input-49-cb26bbc86f4b>", line 1, in <module>
model_seq.summary()
File "C:\Users\helde\Miniconda3\lib\site-packages\keras\engine\topology.py", line 2740, in summary
print_fn=print_fn)
File "C:\Users\helde\Miniconda3\lib\site-packages\keras\utils\layer_utils.py", line 150, in print_summary
print_layer_summary(layers[i])
File "C:\Users\helde\Miniconda3\lib\site-packages\keras\utils\layer_utils.py", line 110, in print_layer_summary
fields = [name + ' (' + cls_name + ')', output_shape, layer.count_params()]
AttributeError: 'Tensor' object has no attribute 'count_params'
summary()
出现错误的部分正是 Flatten
层应该在的位置。
我是不是漏掉了什么?
在我看来,您似乎在混合使用 Sequential
和 Functional
API。 model_seq.add(Flatten())
呢?
我已经使用 Keras 创建并训练了一个自动编码器。
训练完这个模型后,我只想得到编码器部分,所以我做了一些 pop()
.
后来我创建了 Sequential()
模型,基于我的自动编码器模型的剩余层:
model_seq = Sequential(layers=autoencoder.layers)
要添加 Flatten()
层,我做了:
l_out = Flatten()(model_seq.output)
model_seq.layers.append(l_out)
在我看来这应该足够了,所以我打电话给 model_seq.summary()
来检查是否一切正常。
但不幸的是我遇到了这个错误:
model_seq.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) (None, 256, 256, 1) 0
_________________________________________________________________
conv2d_1 (Conv2D) (None, 256, 256, 32) 320
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 128, 128, 32) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 128, 128, 64) 18496
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 64, 64, 64) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 64, 64, 128) 73856
_________________________________________________________________
Traceback (most recent call last):
File "<ipython-input-49-cb26bbc86f4b>", line 1, in <module>
model_seq.summary()
File "C:\Users\helde\Miniconda3\lib\site-packages\keras\engine\topology.py", line 2740, in summary
print_fn=print_fn)
File "C:\Users\helde\Miniconda3\lib\site-packages\keras\utils\layer_utils.py", line 150, in print_summary
print_layer_summary(layers[i])
File "C:\Users\helde\Miniconda3\lib\site-packages\keras\utils\layer_utils.py", line 110, in print_layer_summary
fields = [name + ' (' + cls_name + ')', output_shape, layer.count_params()]
AttributeError: 'Tensor' object has no attribute 'count_params'
summary()
出现错误的部分正是 Flatten
层应该在的位置。
我是不是漏掉了什么?
在我看来,您似乎在混合使用 Sequential
和 Functional
API。 model_seq.add(Flatten())
呢?