您可以利用tf.pack https://www.tensorflow.org/versions/r0.7/api_docs/python/array_ops.html#pack and tf.解包 https://www.tensorflow.org/versions/r0.7/api_docs/python/array_ops.html#unpack,有点像:
pairs = tf.pack(tf.split(0, 64, pool3_flat))
left, right = tf.unpack(tf.transpose(pairs, perm=[1,0,2]))
merged_pairs = tf.concat(1, [left, right])
一种更简洁的方法是从一开始就将各对分开,以便您可以定义两个网络并在每个网络中使用相同的可训练变量。
你会得到类似的东西(跳过卷积层):
image_left = tf.placeholder(tf.float32, shape=[None, 64, 64, 1])
image_right = tf.placeholder(tf.float32, shape=[None, 64, 64, 1])
pool_left = tf.nn.max_pool(image_left, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
pool_right = tf.nn.max_pool(image_left, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
pool_flat_left = tf.reshape(pool_left, [-1, 32*32])
pool_flat_right = tf.reshape(pool_right, [-1, 32*32])
然后简单地在维度 1 中左右连接。
concat_layer = tf.concat(1, [pool_flat_left, pool_flat_right])
这样您也可以稍后改变批量大小。
确保每个尺寸(左和右)使用相同的权重和偏差。