我是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维恒等矩阵,但不能更高。 请帮助我
答案 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.reshape
或tf.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)