[英]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.Input
上tf.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.