在我想使用Tensorflow解决的一个问题中,我想构建一个n-dimensional
秩张量,该张量按块对角。也就是说,我想根据一系列低阶张量生成张量对象。
我尝试定义整个tf.Variable
张量,然后将值0
施加到某些变量,但是Tensorflow不允许在使用变量张量时进行赋值。
此外,我想创建具有相同自变量的“对角”张量,例如,使用堆叠的2D表示形式,即A 2维张量:
T = [A, 0;0 , A]
我当前的源代码:
shape1 = [3,3,10,10]
shape2 = [3,3]
i1 = tf.truncated_normal(shape1, stddev=1.0, dtype = tf.float32)
i2 = tf.truncated_normal(shape2, stddev=1.0, dtype = tf.float32)
A = tf.Variable(i1)
V = tf.Variable(i2)
for i in range(10):
for j in range(10):
if i != j:
A[:,:,i,j] = tf.zeros((3,3))
else:
A[:,:,i,j] = V
当然,此代码返回错误Variable object does not support item assignment
。
最后,我想要定义一个可变张量,例如:
T[:,:,i,j] = tf.zeros([D0,D1]), if i != j
和
T[:,:,i,j] = A, if i = j
with A = tf.variable([D0,D1])
非常感谢您!
答案 0 :(得分:0)
一种方法是使用tf.stack,它将t维的张量列表转换为n + 1维的张量。
l = []
for i in range(10):
li = [V * 0.0 if i != j else V for j in range(10)]
Ai = tf.stack(li)
l.append(Ai)
A = tf.stack(l)