我试图使用符号变量的索引进行一些符号计算。
X = T.matrix('X')
y = T.matrix('y')
z = T.dot(T.dot(X,y[0]),y[1]).norm(L=2)
callable_function = theano.function([y,X], z)
callable_function(np.array([np.array([[3],[5]]),np.array([[4,1]])]),np.array([1,2]))
我正在
AttributeError: ('Bad input argument to theano function with name "C:/Users/LIKAN/PycharmProjects/deepEEG/test.py:17" at index 0(0-based)', "'float' object has no attribute 'dtype'")
如何正确使用符号变量索引?
答案 0 :(得分:1)
您将y
和X
都声明为矩阵,但您对已编译的Theano函数的输入是对象数组和向量。
np.array([np.array([[3],[5]]),np.array([[4,1]])])
是一个对象数组,因为它构造为numpy数组的数组。请注意np.array([np.array([[3],[5]]),np.array([[4,1]])]).dtype == object
。
要创建矩阵,只需在numpy数组构造中使用多维数组。你甚至不需要创建numpy数组,只需传递vanilla Python列表。由于你的第二个参数(对于X
)是一个向量,我假设输入值是正确的,并且符号变量声明是不正确的。通过这些更改,将运行以下代码:
import numpy as np
import theano
import theano.tensor as T
X = T.vector('X')
y = T.matrix('y')
z = T.dot(T.dot(X,y[0]),y[1]).norm(L=2)
callable_function = theano.function([y,X], z)
print callable_function([[3,5],[4,1]], [1,2])