Как получить неправильные формы параметров в TensorFlow - PullRequest
0 голосов
/ 17 июня 2019

Я хочу умножить (произведение Адамара) матрицу с обучаемым тензором того же размера в TensorFlow. То есть каждый ненулевой элемент матрицы должен иметь обучаемый множитель. Как мне это сделать?

Следующее также «обучает» 0-элемент матрицы.

weights = tf.get_variable('weights', [len_matrix,len_matrix], initializer=tf.contrib.layers.xavier_initializer())

result = weights * matrix

1 Ответ

0 голосов
/ 17 июня 2019

Существует модуль с именем tf.sparse, который оптимизировал операции с разреженными матрицами, однако, как я обнаружил, он не имеет реализации разреженных переменных.

Единственный способ, который приходит мне в голову, эточтобы существенно сгладить разреженную матрицу без нулей, вы можете использовать простую одномерную переменную.Это предполагает, что вы знаете разреженную матрицу заранее.

a = np.array([[1.4, 0.0, 0.0], [0.0, -4.5, 0.0]])
ix = np.argwhere(a == 0).T
flat_a = a[ix[0], ix[1]]

weights = tf.get_variable('weights', [len(flat_a)], initializer=tf.contrib.layers.xavier_initializer())

result = weights * flat_a

... # when you want to obtain the full result matrix back

flat_result = sess.run(result)
result = np.zeros(a.shape)
result[ix[0], ix[1]] = flat_result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...