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

问题描述 投票:0回答:1

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

非常感谢你提前!

tensorflow
1个回答
0
投票

一种方法是使用tf.stack,它将维数为n的张量列表转换为维数为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)
© www.soinside.com 2019 - 2024. All rights reserved.