Python 如何用TensorFlow连接两个不同形状的张量?

Python 如何用TensorFlow连接两个不同形状的张量?,python,numpy,tensorflow,neural-network,Python,Numpy,Tensorflow,Neural Network,你好,我是TensorFlow的新手,我想将2D张量连接到3D张量。我不知道如何利用张量流函数来实现 tensor_3d = [[[1,2], [3,4]], [[5,6], [7,8]]] # shape (2, 2, 2) tensor_2d = [[10,11], [12,13]] # shape (2, 2) out: [[[1,2,10,11], [3,4,10,11]], [[5,6,12,13], [7,8,12,13]]] # shape (2

你好,我是TensorFlow的新手,我想将2D张量连接到3D张量。我不知道如何利用张量流函数来实现

tensor_3d = [[[1,2], [3,4]], [[5,6], [7,8]]]  # shape (2, 2, 2)
tensor_2d = [[10,11], [12,13]]                # shape (2, 2)

out: [[[1,2,10,11], [3,4,10,11]], [[5,6,12,13], [7,8,12,13]]]  # shape (2, 2, 4)
我会通过使用循环和新的numpy数组来实现它,但这样我就不会使用TensorFlow变换。关于如何实现这一点,有什么建议吗?我看不出像:
tf.expand_dims
tf.reformate
这样的转换在这里有什么帮助


谢谢分享您的知识。

这应该可以做到:

import tensorflow as tf

a = tf.constant([[[1,2], [3,4]], [[5,6], [7,8]]]) 
b = tf.constant([[10,11], [12,13]])

c = tf.expand_dims(b, axis=1) # Add dimension
d = tf.tile(c, multiples=[1,2,1]) # Duplicate in this dimension
e = tf.concat([a,d], axis=-1) # Concatenate on innermost dimension

with tf.Session() as sess:
    print(e.eval())
给出:

[[[ 1  2 10 11]
[ 3  4 10 11]]

[[ 5  6 12 13]
[ 7  8 12 13]]]

实际上,有一个不同的技巧,在代码库(比如OpenAI的基线)中经常使用

假设高斯策略有两个张量
mu
std
。对于批次大小1,标准偏差的形状与
mu
的形状相同,但由于您对所有操作使用相同的参数化标准偏差,因此当批次大小大于1时,两者会有所不同:

mu : Size<batch_size, feat_n>
std: Size<1, feat_n>
零乘法将
std
转换为与
mu
相同的等级

享受训练,祝你好运

ps:
numpy
tensorflow
concat
操作员没有自动应用广播,因为根据维护人员的说法,当两个张量的形状不匹配时,通常是编程错误的结果。这在numpy中并不是什么大问题,因为计算是急切地进行评估的。但对于tensorflow,这意味着您必须使用
tf.shape
操作符手动显式广播较低的秩(或具有shape[1,*.])

params = tf.concat([mu, mu * 0 + std])