例如,我有一个张量A = tf.Variable([a, b, c, d, e])
tf.tile()
,它可以提供像[a, b, c, d, e, a, b, c, d, e]
但是我想将A
改成[a, a, b, b, c, c, d, d, e]
之类的元素,其中元素在原始位置重复。
(通过不同的操作)实现此目标的最有效的方法(较少的操作)是什么?
答案 0 :(得分:4)
您可以通过添加尺寸,沿该尺寸平铺并删除它来实现:
import tensorflow as tf
A = tf.constant([1, 2, 3, 4, 5])
B = tf.expand_dims(A, axis=-1)
C = tf.tile(B, multiples=[1,2])
D = tf.reshape(C, shape=[-1])
with tf.Session() as sess:
print('A:\n{}'.format(A.eval()))
print('B:\n{}'.format(B.eval()))
print('C:\n{}'.format(C.eval()))
print('D:\n{}'.format(D.eval()))
给予
A:
[1 2 3 4 5]
B: # Add inner dimension
[[1]
[2]
[3]
[4]
[5]]
C: # Tile along inner dimension
[[1 1]
[2 2]
[3 3]
[4 4]
[5 5]]
D: # Remove innermost dimension
[1 1 2 2 3 3 4 4 5 5]
编辑:如注释中所述,使用tf.stack
可以随时指定其他尺寸:
F = tf.stack([A, A], axis=1)
F = tf.reshape(F, shape=[-1])
with tf.Session() as sess:
print(F.eval())
[1 1 2 2 3 3 4 4 5 5]