如何定义(稀疏)可变对角张量

时间:2019-04-01 12:41:05

标签: tensorflow

在我想使用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])

非常感谢您!

1 个答案:

答案 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)