使用tf.tile复制行张量?

Yan*_*ang 10 tensorflow

我有一个张量,它只是一个矢量,vector = [0.5 0.4]而tf.shape表示它有shape =(1,),我想复制矢量m次并且形状为[m,2],所以对于m = 2 ,matrix = [[0.5 0.4], [0.5 0.4]].如何使用tf.tile实现这一目标?

amo*_*ej1 16

拿下面的,vec是一个向量,multiply是你的m,重复向量的次数.tf.tile在载体上进行,然后使用tf.reshape它重新成形为所需的结构.

import tensorflow as tf

vec = tf.constant([1, 2, 3, 4])
multiply = tf.constant([3])

matrix = tf.reshape(tf.tile(vec, multiply), [ multiply[0], tf.shape(vec)[0]])
with tf.Session() as sess:
    print(sess.run([matrix]))
Run Code Online (Sandbox Code Playgroud)

这导致:

[array([[1, 2, 3, 4],
       [1, 2, 3, 4],
       [1, 2, 3, 4]], dtype=int32)]
Run Code Online (Sandbox Code Playgroud)


vij*_*y m 10

同样可以通过乘以a来实现ones matrix,vec然后让broadcasting诀窍:

tf.ones([m,1])*vec

vec = tf.constant([1., 2., 3., 4.])
m = 3
matrix = tf.ones([m, 1]) * vec

with tf.Session() as sess:
   print(sess.run([matrix]))

#Output: [[1., 2., 3., 4.],
#         [1., 2., 3., 4.],
#         [1., 2., 3., 4.]]
Run Code Online (Sandbox Code Playgroud)


Ran*_*esh 6

复制/复制张量(可以是一维向量、二维矩阵或任何维度)可以通过创建该张量的副本列表(使用纯 python)来完成,然后使用 tf.stack - 将两个步骤合二为一(短线。这是复制 2D 张量的示例:

import tensorflow as tf
tf.enable_eager_execution()

a = tf.constant([[1,2,3],[4,5,6]])  # shape=(2,3)
a_stack = tf.stack([a] * 4)  # shape=(4,2,3)

print(a)
print(a_stack)
Run Code Online (Sandbox Code Playgroud)

"[a]*4" 创建一个包含相同张量的四个副本的列表(这是纯python)。tf.stack 然后将它们一个接一个地堆叠在第一个轴上(轴 = 0)

在图形模式下:

import tensorflow as tf

a = tf.constant([[1,2,3],[4,5,6]])  # shape=(2,3)
a_stack = tf.stack([a] * 4)  # shape=(4,2,3)

sess = tf.Session()
print('original tensor:')
print(sess.run(a))
print('stacked tensor:')
print(sess.run(a_stack))
Run Code Online (Sandbox Code Playgroud)