Mat*_*att 4 python numpy neural-network tensorflow
您好,我是 TensorFlow 的新手,我想将 2D 张量连接到 3D 张量。我不知道如何通过利用 TensorFlow 函数来做到这一点。
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)
Run Code Online (Sandbox Code Playgroud)
我会通过使用循环和新的 numpy 数组来让它工作,但那样我就不会使用 TensorFlow 转换。关于如何使这成为可能的任何建议?我不明白转换是怎样的:tf.expand_dims
或者tf.reshape
可能在这里有帮助......
感谢您分享您的知识。
这应该可以解决问题:
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())
Run Code Online (Sandbox Code Playgroud)
给出:
[[[ 1 2 10 11]
[ 3 4 10 11]]
[[ 5 6 12 13]
[ 7 8 12 13]]]
Run Code Online (Sandbox Code Playgroud)
实际上有一个不同的技巧,它不时用于代码库,例如 OpenAI 的基线。
假设您的高斯策略有两个张量。mu
和std
。标准偏差与mu
批量大小 1 的形状相同,但由于您对所有操作使用相同的参数化标准偏差,当批量大小大于 1 时,两者会有所不同:
mu : Size<batch_size, feat_n>
std: Size<1, feat_n>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,要做的一件简单的事情(就像 OpenAI 基线所做的那样)是:
params = tf.concat([mu, mu * 0 + std])
Run Code Online (Sandbox Code Playgroud)
零乘法将 转换std
为与 相同的等级mu
。
享受,祝训练好运!
ps: numpy
andtensorflow
的concat
操作符不会自动应用广播,因为根据维护者的说法,当两个张量的形状不匹配时,通常是编程错误的结果。这在 numpy 中没什么大不了的,因为计算是急切地评估的。但是对于 tensorflow,这意味着您必须使用tf.shape
运算符手动明确地广播较低的等级(或具有 [1, *_] 形状的等级)。
归档时间: |
|
查看次数: |
6244 次 |
最近记录: |