Tensorflow:创建一个以变量为元素的矩阵

时间:2018-05-16 20:48:37

标签: python tensorflow

在Tensorflow中,我正在尝试创建以下矩阵:

A = [[a, 0], [0,b]]

ab是我要解决的参数。

这是我到目前为止所拥有的:

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,或者是否有人知道为什么形状会弄乱我正在做的事情?

2 个答案:

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