更新已使用 theano.tensor.cast() 转换的变量
Updating a variable that has been casted with theano.tensor.cast()
我正在尝试更新函数中的 theano 变量,简化如下:
copy_func = theano.function(
inputs=[idx],
updates=[
(a_variable, T.set_subtensor(a_variable[some_ptr], another_variable[idx]))
]
)
我的问题是出现错误
TypeError: ('update target must be a SharedVariable', Elemwise{Cast{int32}}.0)
我获取此变量的方法是使用以下内容(大部分是从 deeplearning.net 教程中复制的)(another_variable
的初始化方式类似):
a_variable = theano.shared(np.asarray(data,
dtype=theano.config.floatX),
borrow=True)
print type(a_variable)
a_variable = T.cast(a_variable, 'int32')
print type(a_variable)
打印
<class 'theano.tensor.sharedvar.TensorSharedVariable'>
<class 'theano.tensor.var.TensorVariable'>
即变量不再是"shared",解释错误。
这是有道理的,因为我猜变量现在只是原始共享浮点数的转换视图。但是我怎样才能更新一个有效转换的变量呢?
我自己解决了这个问题,答案当然是显而易见的。
我没有用转换后的版本覆盖 a_variable
变量,而是保留了未转换的版本:
a_variable_casted = T.cast(a_variable, 'int32')
更新现在在 a_variable
上完成,而 a_variable_casted
用于执行计算 a_variable
用于更早的计算。
显然可能有更优雅的方法来做到这一点,在这种情况下我很想听听!
我正在尝试更新函数中的 theano 变量,简化如下:
copy_func = theano.function(
inputs=[idx],
updates=[
(a_variable, T.set_subtensor(a_variable[some_ptr], another_variable[idx]))
]
)
我的问题是出现错误
TypeError: ('update target must be a SharedVariable', Elemwise{Cast{int32}}.0)
我获取此变量的方法是使用以下内容(大部分是从 deeplearning.net 教程中复制的)(another_variable
的初始化方式类似):
a_variable = theano.shared(np.asarray(data,
dtype=theano.config.floatX),
borrow=True)
print type(a_variable)
a_variable = T.cast(a_variable, 'int32')
print type(a_variable)
打印
<class 'theano.tensor.sharedvar.TensorSharedVariable'>
<class 'theano.tensor.var.TensorVariable'>
即变量不再是"shared",解释错误。 这是有道理的,因为我猜变量现在只是原始共享浮点数的转换视图。但是我怎样才能更新一个有效转换的变量呢?
我自己解决了这个问题,答案当然是显而易见的。
我没有用转换后的版本覆盖 a_variable
变量,而是保留了未转换的版本:
a_variable_casted = T.cast(a_variable, 'int32')
更新现在在 a_variable
上完成,而 a_variable_casted
用于执行计算 a_variable
用于更早的计算。
显然可能有更优雅的方法来做到这一点,在这种情况下我很想听听!