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

Tok*_*rby 15 python theano deep-learning keras tensorflow

我想访问SequentialKeras模型中所有图层的图层大小.我的代码:

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)))
Run Code Online (Sandbox Code Playgroud)

然后我想像下面的代码一样工作

for layer in model.layers:
    print(layer.get_shape())
Run Code Online (Sandbox Code Playgroud)

..但它没有.我收到错误:AttributeError: 'Conv2D' object has no attribute 'get_shape'

Tok*_*rby 27

如果您希望以奇特的方式打印输出:

model.summary()
Run Code Online (Sandbox Code Playgroud)

如果您希望以可访问的形式提供尺寸

for layer in model.layers:
    print(layer.get_output_at(0).get_shape().as_list())
Run Code Online (Sandbox Code Playgroud)

可能有更好的方法来访问形状.感谢Daniel的灵感.


Dan*_*ler 11

只需使用model.summary(),它将打印所有图层的输出形状.


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

for l in model.layers:
    print (l.output_shape)
Run Code Online (Sandbox Code Playgroud)

它将作为第一层的(无,62,62,32).该None是有关的batch_size,并将培训或预测期间定义.


Dat*_*yen 9

根据Keras Layer的官方文档,可以通过layer.output_shape或 访问图层的输出/输入形状layer.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)
Run Code Online (Sandbox Code Playgroud)

  • “AttributeError:该层从未被调用,因此没有定义的输出形状” (3认同)
  • @Adrian 确保正确定义第一层的“inpute_shape”。您可以先通过调用“model.build()”来检查这一点。 (2认同)