gpt4 book ai didi

python - 在带有 Tensorflow 张量的 Keras 模型中使用 InputLayer(或 Input)有什么好处?

转载 作者:太空狗 更新时间:2023-10-29 17:17:28 25 4
gpt4 key购买 nike

Keras 模型可以通过函数式 API 用作 Tensor 上的 Tensorflow 函数,如所述 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 明确附加为模型的属性(同名),以便我们可以在别处重用它们。例如与其他 TF 行动。
  • 使用附加元数据(例如 the source code 中所述的 _keras_history)将作为输入给出的张量转换为 Keras 输入。

但这不是我们不能用第二种形式做的事情,那么,InputLayer(和Input更不用说)是否有特殊用法(除了多个输入)?
此外,InputLayer 很棘手,因为它使用的 input_shape 与其他 keras 层不同:我们指定批量大小(此处为 None),这不是通常情况下...

最佳答案

InputLayer 似乎有一些用途:

  • 首先,它允许您按原样提供纯 tensorflow 张量,而无需指定它们的形状。例如。你可以写

      model.add(InputLayer(input_tensor=a))

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

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

          input
    / \
    / \
    / \
    conv1 conv2
    | |

    如果没有 InputLayer,您需要显式地为 conv1conv2 提供相同的张量,或者在模型之上创建任意标识层.两者都不太令人满意。

  • 最后,他们消除了“也是输入的层”和“普通层”之间的任意区别。如果您使用 InputLayer,您可以编写代码,明确区分输入层和执行某项操作的层。这提高了代码的可读性并使重构变得更加容易。例如,替换第一层变得和替换任何其他层一样容易,您不需要考虑 input_shape

关于python - 在带有 Tensorflow 张量的 Keras 模型中使用 InputLayer(或 Input)有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45217973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com