在Tensorflow中,我正在尝试创建以下矩阵:
A = [[a, 0], [0,b]]
a
和b
是我要解决的参数。
这是我到目前为止所拥有的:
a = tf.Variable((1,), name="a", dtype = tf.float64)
b = tf.Variable((1,), name="b", dtype = tf.float64)
const = tf.constant(0,dtype = tf.float64, shape = (1,))
A0 = tf.transpose(tf.stack([a,const]))
A1 = tf.transpose(tf.stack([const,b]))
A = tf.stack([A0,A1])
然而,A的形状最终为(2,1,2),这是错误的(因为A0和B0都有形状(1,2))
是否有更简单的方法在Tensorflow中创建矩阵对象A,或者是否有人知道为什么形状会弄乱我正在做的事情?
答案 0 :(得分:1)
您可以创建单个变量向量params = tf.Variable((2,), name="ab")
,然后与身份矩阵tf.eye(2)
相乘:
A = tf.matmul(tf.expand_dims(params,0), tf.eye(2))
答案 1 :(得分:0)
tf.stack
增加张量的秩(创建新轴)并将其合并到新轴中。如果要沿现有轴合并张量,则应使用tf.concat
。
a = tf.Variable((1,), name="a", dtype = tf.float64)
b = tf.Variable((1,), name="b", dtype = tf.float64)
const = tf.constant(0,dtype = tf.float64, shape = (1,))
A0 = tf.stack([a, const], axis=1)
A1 = tf.stack([const, b], axis=1) # more clear than tf.transpose
A = tf.concat((A0, A1), axis=0)
A现在是形状(2,2)。
为说明起见,每个对象都是具有一个元素的1级张量:
A = [1]
const = [0]
堆叠给出:
tf.stack((A, const), axis=0) = [[1], [0]] # 2x1 matrix
串联给出:
tf.concat((A, const), axis=0) = [1, 0] # 2 vector