【问题标题】:Multi-dimension input to a neural network神经网络的多维输入
【发布时间】:2019-12-31 09:31:02
【问题描述】:

我有一个多层神经网络。我有维度为[batch_size, 7, 4] 的神经网络的输入。当这个输入通过网络时,我观察到只有输入的第三维一直在变化,也就是说如果我的第一层有20个输出,那么第二层的输出是[batch_size, 7, 20]。我需要多层后的最终结果为[batchsize, 16]

我有以下问题:

  • 是否使用了其他两个维度?
  • 如果没有,如何修改我的网络以使用所有三个维度?
  • 如何有意义地删除一维以获得所需的二维输出?

以下是我目前在 Tensorflow v1.14Python 3 中的实现:

out1 = tf.layers.dense(inputs=noisy_data, units=150, activation=tf.nn.tanh)  # Outputs [batch, 7, 150]
out2 = tf.layers.dense(inputs=out1, units=75, activation=tf.nn.tanh)  # Outputs [batch, 7, 75] 
out3 = tf.layers.dense(inputs=out2, units=32, activation=tf.nn.tanh)  # Outputs [batch, 7, 32]
out4 = tf.layers.dense(inputs=out3, units=16, activation=tf.nn.tanh)  # Outputs [batch, 7, 16]

感谢任何帮助。谢谢。

【问题讨论】:

    标签: python tensorflow machine-learning deep-learning neural-network


    【解决方案1】:

    问题 1 的答案:没有使用第二维 (axis=1) 中的数据值,因为如果您查看下面代码 sn-p 的输出(假设为 batch_size=2):

    >>> input1 = tf.placeholder(float, shape=[2,7,4])
    >>> tf.layers.dense(inputs=input1, units=150, activation=tf.nn.tanh)
    >>> graph = tf.get_default_graph()
    >>> graph.get_collection('variables')
    [<tf.Variable 'dense/kernel:0' shape=(4, 150) dtype=float32_ref>, <tf.Variable 'dense/bias:0' shape=(150,) dtype=float32_ref>]
    

    您可以看到dense 层忽略了第二维的值。但是,尽管官方 tensorflow docs 没有说明所需的输入形状,但第 1 维的值将被视为 batch 的一部分。

    问题 2 的答案Reshape 输入 [batch_size, 7, 4][batch_size, 28],在将输入传递到第一个 dense 层之前使用下面的代码行:

    input1 = tf.reshape(input1, [-1, 7*4])
    

    问题 3 的答案:如果您重塑上述输入,则无需删除维度。

    【讨论】:

    • 抱歉这么晚才回复。我拥有 3 个维度的数据的原因是它们在每个维度中都有一些含义。 reshape 有助于降维,没问题,但数据现在交错了,失去了所有意义。这就是我在问题中所说的“有意义”的意思。简而言之,虽然你已经成功地减少了一维,但它并没有帮助。谢谢
    猜你喜欢
    • 2012-10-05
    • 2017-03-16
    • 1970-01-01
    • 2017-10-06
    • 2011-03-29
    • 2010-10-13
    • 2012-01-16
    相关资源
    最近更新 更多