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