2016-08-17 2 views
0

Могу ли я просто присваивать значения определенным записям в тензоре? У меня возникают такие проблемы, когда я вычисляю матрицу взаимной корреляции матрицы признаков NxP feats, где N - наблюдения, а P - размерность. Некоторые столбцы являются постоянными, поэтому стандартное отклонение равно нулю, и я не хочу делиться на std для этих константных столбцов. Вот что я сделал:назначить определенные записи тензора, например set_subtensor от Theano

fmean, fvar = tf.nn.moments(feats, axes = [0], keep_dims = False) fstd = tf.sqrt(fvar) feats = feats - fmean sel = (fstd != 0) feats[:, sel] = feats[:, sel]/ fstd[sel] corr = tf.matmul(tf.transpose(feats), feats)

Однако, я получил эту ошибку: TypeError: 'Tensor' object does not support item assignment. Есть ли способ обхода проблемы?

ответ

0

Вы можете сделать свой feats a tf.Variable и использовать tf.scatter_update для выборочного обновления местоположения.

Это немного неудобно в том, что scatter_update нуждается в списке линейных индексов для обновления, поэтому вам нужно будет преобразовать скрытую 2D-спецификацию [:, sel] в явный список 1D-индексов. Там в примере построения индексов 1D от 2D here

Там какая-то работа в упрощении такого рода потребительных случае в вопросе #206

+0

я вижу. Попробует. Благодаря! –

Смежные вопросы