【发布时间】:2017-06-19 00:50:20
【问题描述】:
我正在编写一个简单的代码来计算索引列表的单热编码。 例如:[1,2,3] => [[0,1,0,0],[0,0,1,0],[0,0,0,1]]
我写了一个函数来对单个向量做同样的事情:
n_val =4
def encoding(x_t):
z = T.zeros((x_t.shape[0], n_val))
one_hot = T.set_subtensor(z[T.arange(x_t.shape[0]), x_t], 1)
return one_hot
要在矩阵的行上重复相同的功能,我执行以下操作,
x = T.imatrix()
[m],_ = theano.scan(fn = encoding, sequences = x)
Y = T.stacklists(m)
f= theano.function([x],Y)
我期待一个 3D 张量,每个切片对应于矩阵行的 one-hot 编码。
编译函数时出现以下错误,
/Library/Python/2.7/site-packages/theano/tensor/var.pyc in __iter__(self)
594 except TypeError:
595 # This prevents accidental iteration via builtin.sum(self)
--> 596 raise TypeError(('TensorType does not support iteration. '
597 'Maybe you are using builtin.sum instead of '
598 'theano.tensor.sum? (Maybe .max?)'))
TypeError: TensorType does not support iteration. Maybe you are using builtin.sum instead of theano.tensor.sum? (Maybe .max?)
有人可以帮我理解我哪里出错了,以及如何修改代码以获得我需要的东西吗?
提前致谢。
【问题讨论】:
-
fnscan的参数需要返回一个列表
标签: python theano theano.scan