我是Theano的新手,只是学习它。我在python中有一个ANN,我在Theano中实现了学习过程。我正在使用Spyder。
Theano抛出错误:TypeError:未知参数类型:class'numpy.ndarray'
我不确定错误在哪里。它是成本函数还是梯度下降?它的典型原因是什么?
这是我的代码:
X = T.dmatrix()
y = T.dmatrix()
X_input = np.genfromtxt('X.csv',delimiter=',') #5000x195
y_input = np.genfromtxt('y.csv',delimiter=',') #5000x75
input_layer_size, hidden_layer_size_1, hidden_layer_size_2, y_size = 195, 15, 15, 75
theta1 = theano.shared(np.array(np.random.rand(hidden_layer_size_1, (input_layer_size+1)), dtype=theano.config.floatX))
theta2 = theano.shared(np.array(np.random.rand(hidden_layer_size_2, (hidden_layer_size_1+1)), dtype=theano.config.floatX))
theta3 = theano.shared(np.array(np.random.rand(y_size, hidden_layer_size_2+1), dtype=theano.config.floatX))
def computeCost(X, y, w1, w2, w3):
m = X.shape[0]
b = T.ones((m,1))
a_1 = T.concatenate([b, X], axis=1)
z_2 = T.dot(a_1, T.transpose(w1))
a_2 = T.nnet.nnet.sigmoid(z_2)
a_2 = T.concatenate([b, a_2], axis=1)
z_3 = T.dot(a_2, T.transpose(w2))
a_3 = T.nnet.nnet.sigmoid(z_3)
a_3 = T.concatenate([b, a_3], axis=1)
z_4 = T.dot(a_3, T.transpose(w3))
h = T.nnet.nnet.sigmoid(z_4)
cost = T.sum(-y * T.log(h) - (1-y) * T.log(1-h))/m
return cost
fc = computeCost(X, y, theta1, theta2, theta3)
def grad_desc(cost, theta):
alpha = 0.1 #learning rate
return theta - (alpha * T.grad(cost, wrt=theta))
cost = theano.function(inputs=[X_input, y_input], outputs=fc, updates=[
(theta1, grad_desc(fc, theta1)),
(theta2, grad_desc(fc, theta2)),
(theta3, grad_desc(fc, theta3))])
我的上一个代码生成了这个错误:
Traceback (most recent call last):
File "ipython-input-88-099323f95e73", line 1, in <module>
cost = theano.function(inputs=[X_input, y_input], outputs=fc, updates=[(theta1, grad_desc(fc, theta1)), (theta2, grad_desc(fc, theta2)), (theta3, grad_desc(fc, theta3))])
File "C:\Program Files\Anaconda3\lib\site-packages\theano\compile\function.py", line 320, in function
output_keys=output_keys)
File "C:\Program Files\Anaconda3\lib\site-packages\theano\compile\pfunc.py", line 390, in pfunc
for p in params]
File "C:\Program Files\Anaconda3\lib\site-packages\theano\compile\pfunc.py", line 390, in <listcomp>
for p in params]
File "C:\Program Files\Anaconda3\lib\site-packages\theano\compile\pfunc.py", line 489, in _pfunc_param_to_in
raise TypeError('Unknown parameter type: %s' % type(param))
TypeError: Unknown parameter type: class 'numpy.ndarray'
答案 0 :(得分:0)
在你的theano.function
你的输入是numpy数组(X_input和y_input)。您希望输入是符号变量,例如:
cost = theano.function(inputs=[X, y], outputs=fc, updates=[
这将创建一个可以使用numpy数组调用的函数来执行实际计算,如:
actual_cost = cost(X_input, y_input)