簡體   English   中英

在帶有 Tensorflow 張量的 Keras 模型中使用 InputLayer(或 Input)有什么好處?

[英]What is the advantage of using an InputLayer (or an Input) in a Keras model with Tensorflow tensors?

甲Keras模型可以用作一個張量一個Tensorflow功能,通過所述功能API,如所描述這里

所以我們可以這樣做:

from keras.layers import InputLayer

a = tf.placeholder(dtype=tf.float32, shape=(None, 784))

model = Sequential()
model.add(InputLayer(input_tensor=a, input_shape=(None, 784)))
model.add(Dense(32, activation='relu'))
model.add(Dense(10, activation='softmax'))

output = model.output

這是一個張量:

<tf.Tensor 'dense_24/Softmax:0' shape=(?, 10) dtype=float32>

但是,這也可以在沒有任何InputLayer情況下InputLayer

a = tf.placeholder(dtype=tf.float32, shape=(None, 784))

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

output = model(a)

工作,並且output具有與以前相同的形狀:

<tf.Tensor 'sequential_9/dense_22/Softmax:0' shape=(?, 10) dtype=float32>

我假設第一種形式允許:

  • 明確地將inputsoutputs附加為模型的屬性(同名),以便我們可以在其他地方重用它們。 例如與其他 TF 操作。
  • 將作為輸入給出的張量轉換為_keras_history輸入,並帶有額外的元數據(例如源代碼所述的_keras_history )。

但這不是我們不能用第二種形式做的事情,那么, InputLayer (和Input a InputLayer是否有特殊用法(多個輸入除外)?
此外, InputLayer很棘手,因為它使用input_shape與其他 keras 層不同:我們指定批次大小(此處為None ),通常情況並非如此...

InputLayer似乎有一些用途:

  • 首先,它允許您按原樣提供純張量流張量,而無需指定其形狀。 例如你可以寫

     model.add(InputLayer(input_tensor=a))

    這很好,有幾個明顯的原因,其中包括減少重復。

  • 其次,它們允許您使用單個輸入編寫非序列網絡,例如

     input / \\ / \\ / \\ conv1 conv2 | |

    如果沒有InputLayer您將需要明確地為conv1conv2相同的張量,或者在模型之上創建任意標識層。 兩者都不是很令人滿意。

  • 最后,他們消除了“也是輸入的層”和“正常層”之間的任意區別。 如果您使用InputLayer您可以編寫代碼,其中明確區分哪個層是輸入和哪個層執行某些操作。 這提高了代碼的可讀性並使重構更加容易。 例如,替換第一層就像替換任何其他層一樣簡單,您無需考慮input_shape

暫無
暫無

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

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