![](/img/trans.png)
[英]Found unexpected instance while processing input tensors for keras functional model - Keras, Tensorflow
[英]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>
我假設第一種形式允許:
inputs
和outputs
附加為模型的屬性(同名),以便我們可以在其他地方重用它們。 例如與其他 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
您將需要明確地為conv1
和conv2
相同的張量,或者在模型之上創建任意標識層。 兩者都不是很令人滿意。
最后,他們消除了“也是輸入的層”和“正常層”之間的任意區別。 如果您使用InputLayer
您可以編寫代碼,其中明確區分哪個層是輸入和哪個層執行某些操作。 這提高了代碼的可讀性並使重構更加容易。 例如,替換第一層就像替換任何其他層一樣簡單,您無需考慮input_shape
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.