将占位符添加到图层

时间:2018-05-29 09:37:09

标签: tensorflow

我有一个含有2个节点的Tensorflow图层。这些是另外2个较大隐藏层的输出节点。现在我想在这一层添加2个新节点,所以我最终总共有4个节点,并进行最后一次计算。到目前为止,添加的节点实现为占位符,并具有动态形状,具体取决于批处理大小。这是网的草图:

Nodes 3 and 4 have to be concatenated to nodes 1 and 2 from the middle layer

现在我想将节点3和4连接到先前计算的层的节点1和2。我知道这有tf.concat,但我不明白如何正确地做到这一点。

如何将与原始网络输入相同的批量大小的占位符添加到特定图层?

修改

当我使用tf.concat而不是axis=1时,我最终会遇到以下问题:

z = tf.placeholder(tf.float32, shape=[None, 2])
Weight_matrix = weight_variable([4, 2])
bias = bias_variable([4, 2])
concat = tf.concat((dnn_out, z), 1)
h_fc3 = tf.nn.relu(tf.matmul(concat, Weight_matrix) + bias)

tf.matmul结果添加偏差会引发InvalidArgumentError: Incompatible shapes: [20,2] vs. [4,2]

1 个答案:

答案 0 :(得分:1)

由于您的数据是批处理的,可能是在第一维上,您需要在第二维(axis=1)上进行连接:

import tensorflow as tf
import numpy as np

dnn_output = tf.placeholder(tf.float32, (None, 2)) # replace with your DNN(input) result
additional_nodes = tf.placeholder(tf.float32, (None, 2))

concat = tf.concat((dnn_output, additional_nodes), axis=1)
print(concat)
# > Tensor("concat:0", shape=(?, 4), dtype=float32)
dense_output = tf.layers.dense(concat, units=2)
print(dense_output)
# > Tensor("dense/BiasAdd:0", shape=(?, 2), dtype=float32)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(dense_output, feed_dict={dnn_output: np.ones((5, 2)),
                                            additional_nodes: np.zeros((5, 2))}))