在带有张量流张量的Keras模型中使用输入层(或输入)有什么好处?

2024-05-18 12:33:43 发布

您现在位置:Python中文网/ 问答频道 /正文

Keras模型可以通过函数API在张量上用作张量流函数,如here所述。

所以我们可以:

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的情况下工作:

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作为模型的属性(同名),以便我们可以在其他地方重用它们。比如其他的特遣部队。
  • 将作为输入给定的张量转换为Keras输入,并附加元数据(如_keras_history,如the source code中所述)。

但这不是我们不能用第二种形式做的,所以,有没有特别使用InputLayer(和Input)的用法(除了多个输入)?
此外,InputLayer很棘手,因为它使用的input_shape与其他keras层不同:我们指定批大小(None),通常情况下不是这样。。。


Tags: 模型noneaddinputoutputmodeltfactivation
1条回答
网友
1楼 · 发布于 2024-05-18 12:33:43

似乎InputLayer有一些用途:

  • 首先,它允许您按原样提供纯张量流张量,而不指定其形状。E、 g.你可以写

    model.add(InputLayer(input_tensor=a))
    

    这有几个明显的原因,其中包括减少重复。

  • 其次,它们允许您用一个输入来编写非顺序网络,例如

          a
         / \
        /   \
       /     \
    conv1   conv2
      |       |
    

    如果没有InputLayer,则需要显式地为conv1conv2提供相同的张量,或者在模型的顶部创建任意标识层。两者都不太讨人喜欢。

  • 最后,它们消除了“同时也是输入的层”和“正常层”之间的任意区别。如果您使用InputLayer,那么您可以在输入的层和执行某些操作的层之间有明显区别的地方编写代码。这提高了代码的可读性,并使重构更加容易。例如,替换第一层和替换任何其他层一样简单,您不需要考虑input_shape

相关问题 更多 >

    热门问题