簡體   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