繁体   English   中英

Keras:如何在顺序模型中获取图层形状

[英]Keras: How to get layer shapes in a Sequential model

我想访问Sequential Keras 模型中所有层的层大小。 我的代码:

model = Sequential()
model.add(Conv2D(filters=32, 
               kernel_size=(3,3), 
               input_shape=(64,64,3)
        ))
model.add(MaxPooling2D(pool_size=(3,3), strides=(2,2)))

然后我想要一些像下面这样的代码来工作

for layer in model.layers:
    print(layer.get_shape())

.. 但事实并非如此。 我收到错误: AttributeError: 'Conv2D' object has no attribute 'get_shape'

如果你想以一种奇特的方式打印输出:

model.summary()

如果您想要尺寸易于访问的形式

for layer in model.layers:
    print(layer.get_output_at(0).get_shape().as_list())

可能有比这更好的访问形状的方法。 感谢丹尼尔的灵感。

根据Keras Layer的官方文档,可以通过layer.output_shapelayer.input_shape访问图层输出/输入形状。

from keras.models import Sequential
from keras.layers import Conv2D, MaxPool2D


model = Sequential(layers=[
    Conv2D(32, (3, 3), input_shape=(64, 64, 3)),
    MaxPool2D(pool_size=(3, 3), strides=(2, 2))
])

for layer in model.layers:
    print(layer.output_shape)

# Output
# (None, 62, 62, 32)
# (None, 30, 30, 32)

只需使用model.summary() ,它就会打印所有图层及其输出形状。


如果你需要它们作为数组、元组等,你可以尝试:

for l in model.layers:
    print (l.output_shape)

对于多次使用的图层,它们包含“多个入站节点”,您应该分别获取每个输出形状:

if isinstance(layer.outputs, list):
    for out in layer.outputs:
        print(K.int_shape(out))
            

第一层将以 (None, 62, 62, 32) 形式出现。 None与 batch_size 相关,将在训练或预测期间定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM