2017-03-15 9 views
0

私はTheanoを初めて勉強しました。私は、学習プロセスとしてTheanoで実装しているPythonでANNを持っています。私はSpyderを使用しています。Theanoコスト関数、TypeError:不明なパラメータタイプ:<class 'numpy.ndarray'>

そしてTheanoはエラーをスローします:TypeError例外:不明なパラメータの型:クラスの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

あなたtheano.functionあなたの入力がnumpyのアレイ(X_inputとy_input)です。

cost = theano.function(inputs=[X, y], outputs=fc, updates=[ 

これはのように、実際の計算を実行するためにnumpyの配列を呼び出すことができる関数を作成します:あなたは、入力のような記号変数、なりたい

actual_cost = cost(X_input, y_input) 
+0

屋ああ!ルーキーの間違い私は推測する:あなたの素早く&有用な応答のためのThxスティーブ! – user5012940

関連する問題