web-dev-qa-db-ja.com

Keras:シーケンシャルモデルでレイヤー形状を取得する方法

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'

13
Toke Faurby

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)
6
Dat Nguyen

出力を派手な方法で印刷したい場合:

model.summary()

アクセシブルなフォームでサイズが必要な場合

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

おそらくこれよりも形状にアクセスするより良い方法があるでしょう。インスピレーションをくれたダニエルに感謝します。

26
Toke Faurby

model.summary()を使用するだけで、すべてのレイヤーとその出力形状が印刷されます。


配列、タプルなどとして必要な場合は、次を試してください:

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

最初のレイヤーの(なし、62、62、32)として提供されます。 Noneはbatch_sizeに関連しており、トレーニングまたは予測中に定義されます。

11
Daniel Möller