簡體   English   中英

Keras Sequential 模型輸入層

[英]Keras Sequential model input layer

在 Keras 中創建 Sequential 模型時,我了解您在第一層提供輸入形狀。 這個輸入形狀是否會成為隱式輸入層?

例如,下面的模型明確指定了 2 個 Dense 層,但這實際上是一個具有 3 個層的模型,其中包含一個由輸入形狀隱含的輸入層,一個具有 32 個神經元的隱藏密集層,然后一個具有 10 個可能輸出的輸出層?

model = Sequential([
    Dense(32, input_shape=(784,)),
    Activation('relu'),
    Dense(10),
    Activation('softmax'),
])

好吧,它實際上確實一個隱式輸入層,即您的模型是具有三層(輸入、隱藏和輸出)的“老式”神經網絡的示例。 這在 Keras Functional API 中更加明顯(查看文檔中的示例),其中您的模型將被編寫為:

inputs = Input(shape=(784,))                 # input layer
x = Dense(32, activation='relu')(inputs)     # hidden layer
outputs = Dense(10, activation='softmax')(x) # output layer

model = Model(inputs, outputs)

實際上,這個隱式輸入層是您必須僅在 Sequential API 模型的第一個(顯式)層中包含input_shape參數的原因 - 在后續層中,輸入形狀是從前一個(看到評論中的源代碼core.py )。

您還可以在tf.contrib.keras.layers.Inputtf.contrib.keras.layers.Input啟發性的文檔

這取決於你的觀點:-)

根據最近的 Keras 教程示例重寫您的代碼,您可能會使用:

model = Sequential()
model.add(Dense(32, activation='relu', input_dim=784))
model.add(Dense(10, activation='softmax')

...這使得您只有 2 個Keras層變得更加明確。 這正是你所擁有的(至少在 Keras 中),因為“輸入層”根本不是真正的(Keras)層:它只是一個存儲張量的地方,所以它也可能是一個張量本身.

每個Keras層都是一個轉換,輸出張量,可能與輸入具有不同的大小/形狀。 因此,雖然這里有 3 個可識別的張量(兩層的輸入、輸出),但只有 2 個轉換涉及對應於 2 個 Keras 層。

另一方面,在圖形上,您可以用 3 個(圖形)節點層和兩組連接節點層的線來表示該網絡。 從圖形上看,它是一個 3 層網絡。 但是這個圖形符號中的“層”是一堆圓圈,它們坐在頁面上什么都不做,而 Keras 中的層會轉換張量並為你做實際的工作。 就我個人而言,我會習慣 Keras 的觀點:-)

最后請注意,為了有趣和/或簡單起見,我將input_dim=784替換為input_shape=(784,)以避免 Python 用來混淆新手和創建一維元組的語法: (<value>,)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM