theano - Numpy 和 Theano 的 set_subtensor() 中索引分配之间的差异

标签 theano

我正在尝试使用 set_subtensor() 在 Theano 中进行索引分配,但它为 Numpy 的索引分配提供了不同的结果。我是否做错了什么,或者这是 set_subtensor 和 Numpy 的索引分配工作方式的差异?

我想做的事:

X = np.zeros((2, 2))
X[[[0, 1], [0, 1]]] = np.array([1, 2])

X is now:
[[ 1.  0.]
 [ 0.  2.]]

尝试在 Theano 中做同样的事情:

X = theano.shared(value=np.zeros((2, 2)))
X = T.set_subtensor(X[[[0, 1], [0, 1]]], np.array([1, 2]))
X.eval()

引发此错误

ValueError: array is not broadcastable to correct shape

最佳答案

这凸显了 numpy 和 Theano 之间的细微差别,但可以轻松解决。

可以通过使用位置列表或位置元组在 numpy 中启用高级索引。在 Theano 中,只能使用位置元组。

变化如此

X = T.set_subtensor(X[[[0, 1], [0, 1]]], np.array([1, 2]))

X = T.set_subtensor(X[([0, 1], [0, 1])], np.array([1, 2]))

解决了 Theano 中的问题。

如果发生变化,在 numpy 中仍会得到相同的结果

X[[[0, 1], [0, 1]]] = np.array([1, 2])

X[([0, 1], [0, 1])] = np.array([1, 2])

关于theano - Numpy 和 Theano 的 set_subtensor() 中索引分配之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32813590/

相关文章:

php - 如何在 GPU 上启用 php 运行 python 脚本?

Theano:新 Jetson TX1 上的 GPU 使用情况

python - 我不明白有什么问题 InvalidArgumentError : Conv2DCustomBackpropInputOp only supports NHWC

python - Windows 64 位和普通 Python 3.5 上的 Theano

python - Keras:模型加载后如何设置学习阶段

keras - 卷积层的输出形状

tensorflow - 如何使用复值权重进行反向传播

python - Theano 中的符号矩阵幂级数

python - keras "image_dim_ordering"配置不起作用

python - 在 Theano 中使用随机数