在张量流中制作单位矩阵

时间:2018-08-30 03:43:47

标签: python tensorflow matrix identity

我是python和tensorflow的初学者。

所以我需要一些关于张量知识的建议,或者至少是谷歌搜索关键字

我想做

import tensorflow as tf

grad = input_gradient # tensor Variable 
noise_scalar = tf.random_normal([1], stddev=stddev)[0]
grad_shape = grad.shape.as_list()

noise_mat = some_identity_matrix(grad_shape) # I don't know this

noise_mat = tf.scalar_mul(noise_scalar, noise_mat)
grad = tf.add(grad, noise_mat)

我不知道如何使单位矩阵具有与输入渐变形状相同的大小,它们具有各种大小,例如(1,)(5,5)(5,5,1,1)(5,5,1 ,64)...

使用tf.eye(..)可以制作1、2维恒等矩阵,但不能更高。 请帮助我

1 个答案:

答案 0 :(得分:0)

根据所需的输出,我可以想到两种可能性:

1)使用batch_shape参数,tf.reshape并可能使用tf.transpose

ident = tf.eye(5, batch_shape=(3, 4)      # shape = (3, 4, 5, 5)
# switch axis 2 with axis 0
ident = tf.transpose(ident, (2, 1, 0, 3)) # shape = (5, 4, 3, 5)

2)与tf.expand_dims结合使用tf.reshapetf.tile

ident = tf.eye(5)                         # shape = (5, 5)
ident = tf.reshape(ident, (5, 1, 1, 5))   # shape = (5, 1, 1, 5)
# or: ident = tf.expand_dims(tf.expand_dims(ident, axis=1), axis=1)
ident = tf.tile(ident, (1, 4, 3, 1))      # shape = (5, 4, 3, 5)