为什么扫描向上扫描?

时间:2016-02-20 01:43:24

标签: python theano

此代码用于计算矩阵的轨迹(基于Theano“循环”教程中的示例)可以正常工作:

import numpy as np
import theano as th
import theano.tensor as T
floatX = 'float32'
X = T.matrix()
results = th.scan(lambda i,j,t_f : T.cast(X[i,j] + t_f, floatX),
                      sequences=[T.arange(X.shape[0]), T.arange(X.shape[1])],
                      outputs_info=np.asarray(0., dtype=floatX))[0]
result = results[-1]
compute_trace = th.function([X], result)
x = np.eye(5, dtype=floatX)
x[0] = np.arange(5, dtype=floatX)
print compute_trace(x)

但是如果我从lambda函数中删除了这样的强制转换操作:

lambda i,j,t_f : X[i,j] + t_f

生成以下错误消息:

ValueError:在编译扫描的内部函数时遇到以下错误:变量IncSubtensor {Set;:int64:}。0(参数编号2)的初始状态(扫描命名法中的outputs_info) dtype float32,而内部函数(fn)的结果有dtype float64。如果扫描的内部功能导致向上或向下转发,则会发生这种情况。

为什么这样? Xoutputs_info显式设置为float32。添加它们的结果如何变为float64?

0 个答案:

没有答案