我是theano的新手。我想用theano函数代替我的脚本中的numpy函数以加速计算过程。我不确定该如何做。
我的最终目标是对三维刚体应用仿射变换,为每次变换后的构象分配一个得分,并对决定得分的参数进行优化。
以下是我想要实现的一个示例。
import numpy as numpy
import theano
import theano.tensor as T
pi = 3.141592653
deg2rad = lambda angle: (angle/180.)*pi
# generate 3D transformation matrix for rotation around x axis by angle
def rotate_x_axis_numpy(angle): # my old numpy function
a = deg2rad(angle)
cosa = np.cos(a)
sina = np.sin(a)
R = np.identity(4)
R[1][1] = cosa; R[1][2] = -sina
R[2][1] = sina; R[2][2] = cosa
return R
angle_var = T.dscalar()
def rotate_x_axis_expr(angle): # new theano function expression I expected to work
a = T.deg2rad(angle)
cosa = T.cos(a)
sina = T.sin(a)
R = theano.shared(np.identity(4))
R[1][1] = cosa; R[1][2] = -sina
R[2][1] = sina; R[2][2] = cosa
return R
rotate_x_axis_theano = theano.function([angle_var], rotate_x_axis_expr(angle_var))
上述的 Theano 函数没有通过编译。我收到了以下错误信息。
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)<ipython-input-85-8d98ae1d1c9b> in <module>()
17 return R
18
---> 19 rotate_x_axis_theano = theano.function([angle_var],rotate_x_axis_expr(angle_var))
<ipython-input-85-8d98ae1d1c9b> in rotate_x_axis_expr(angle)
12
13
---> 14 R[1][1] = cosa; R[1][2] = -sina
15 R[2][1] = sina; R[2][2] = cosa
16
TypeError: 'TensorVariable' object does not support item assignment
一般而言,我的问题是:
(1) 有没有一种方法可以逐元素地为Theano矩阵分配、更新或初始化特定形状的值,
(2) 由于Theano与NumPy密切相关,在定义、优化和评估数学表达式方面有什么区别,
以及(3) Theano能否取代NumPy,我们可以仅使用Theano函数来定义、优化和评估数学表达式而不调用NumPy函数。
np.deg2rad
也存在,你使用lambda
的原因是什么? - askewchan