Сделать единичную матрицу в тензорном потоке - PullRequest
0 голосов
/ 30 августа 2018

Я начинающий студент Python и tenorflow.

Так что мне нужен совет по тензорным знаниям или, по крайней мере, поисковое ключевое слово

Я хочу сделать

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-мерную единичную матрицу, но не выше. помогите мне, пожалуйста

1 Ответ

0 голосов
/ 30 августа 2018

Я могу представить две возможности, в зависимости от желаемого результата:

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)
...