【问题标题】:A question about input size in a tensorflow neural network关于张量流神经网络中输入大小的问题
【发布时间】:2021-12-06 10:13:25
【问题描述】:

我是 PyTorch 用户,但最近阅读了一些使用 tensorflow 实现的代码。 我的问题是,如果我们只有这样一个简单的神经网络,input 的大小在哪里指定?或者这个模型是否允许使用 variable 大小的输入?

class SimpleNet(tf.keras.Model):
    def __init__(self):
        super(SimpleNet, self).__init__()
        activation = tf.keras.activations.tanh
        self.features = [

         #Where is the input size specified?
            tf.keras.layers.Dense(89, activation),
            tf.keras.layers.Dense(6 * 32, activation),
            tf.keras.layers.Dense(32, activation),
            tf.keras.layers.Dense(1),
        ]

    def process(self, x):
        x = apply_layers(x, self.features)
        return x

    ...

【问题讨论】:

标签: python tensorflow deep-learning


【解决方案1】:

input_shape 是在您将真实数据传递给模型时推断出来的。这意味着,如果您没有明确定义 input_shape ,它是可变的。 例如,您可以在模型的第一层显式定义 input_shape

tf.keras.layers.Dense(89, activation, input_shape=(5,))

并且每一层都从前一层的输出中推导出所需的input shape。但是请注意,一旦您为模型提供了真实数据,它就会存储此 input_shape 以供将来使用。另一个例子表明,只要与第一个Dense层兼容,数据的形状并不重要:

import tensorflow as tf

activation = tf.keras.activations.tanh
model1 = tf.keras.Sequential(
    [
    tf.keras.layers.Dense(89, activation),
    tf.keras.layers.Dense(6 * 32, activation),
    tf.keras.layers.Dense(32, activation),
    tf.keras.layers.Dense(1),
    ])

tf.print('Works -->', model1(tf.random.normal((10, 1))).shape)
model2 = tf.keras.Sequential(
    [
    tf.keras.layers.Dense(89, activation),
    tf.keras.layers.Dense(6 * 32, activation),
    tf.keras.layers.Dense(32, activation),
    tf.keras.layers.Dense(1),
    ])
tf.print('Works -->', model2(tf.random.normal((10, 5))).shape)
Works --> TensorShape([10, 1])
Works --> TensorShape([10, 1])

其中 10 表示样本数,1 和 5 表示特征数。

【讨论】:

  • 知道了,所以它是从第一个输入推断出来的,然后要求所有其他输入的大小相同。
  • 更新答案。
  • @AloneTogether:感谢您的回答。你写了“每一层都从前一层的输出中派生出所需的输入形状。” --> 但这仅对 Dense 层有效,对吧?对于其他类型的 Tensorflow 神经网络(如问题标题中所示),可能会有所不同。例如,对于像 RNN 或 LSTM 这样的循环层,据我所知,输入大小必须是 [Batch, Timesequence, Features]。
  • 是的,我在回答中指的是密集层。 RNN 或 LSTM 显然需要不同的输入形状。
猜你喜欢
  • 1970-01-01
  • 2016-10-03
  • 2017-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多