2015-08-06 7 views
5

Der Fehler:Typeerror „Bad Eingabeargument für Theanos Funktion“

TypeError: ('Bad input argument to theano function with name "c2.py:77" at index 1(0-based)', 'Wrong number of dimensions: expected 2, got 1 with shape (128L,).')

Bitte beraten, wie zu beheben? http://u.163.com/axfWJ81e und geben Sie diesen Code: QU90WxTZ

Und mein Code ist hier:

Der Code und die Daten können auf diesen Link heruntergeladen werden

# -*- coding: utf-8 -*- 
import os 
import pandas as pd 
import theano 
from theano import tensor as T 
import numpy as np 

def normalizeX(X): 
    return X/255.0 
data = pd.read_csv("digits3a.csv") 
trX = normalizeX(data.values[:, 1:].astype(float)) 
trY = data.values[:, 0] 
data = pd.read_csv("digits3b.csv") 
teX = normalizeX(data.values.astype(float)) 

def floatX(X): 
    return np.asarray(X, dtype=theano.config.floatX) 

def init_weights(shape): 
    return theano.shared(floatX(np.random.randn(*shape) * 0.01)) 

def model(X, w): 
    return T.nnet.softmax(T.dot(X, w)) 

X = T.fmatrix() 
Y = T.fmatrix() 
w = init_weights((784, 10)) 
py_x = model(X, w) 
y_pred = T.argmax(py_x, axis=1) 
cost = T.mean(T.nnet.categorical_crossentropy(py_x, Y)) 
gradient = T.grad(cost=cost, wrt=w) 
update = [[w, w - gradient * 0.05]] 
train = theano.function(inputs=[X, Y], outputs=cost, updates=update, allow_input_downcast=True) 
predict = theano.function(inputs=[X], outputs=y_pred, allow_input_downcast=True) 

for i in range(10): 
    for start, end in zip(range(0, len(trX), 128), range(128, len(trX), 128)): 
     cost = train(trX[start:end], trY[start:end]) 
    print i, np.mean(np.argmax(teY, axis=1) == predict(teX)) 
+0

behoben werden. Welches ist Zeile 77? – eickenberg

Antwort

2

Das Problem ist, dass Sie Theano Y sagen ist, eine Matrix von Fließkommawerten, aber der Wert, den Sie für Y angeben, ist ein Vektor von ganzen Zahlen.

Es ist nicht ganz klar, was richtig ist, aber ich vermute, dass Sie beabsichtigen, Y ein Vektor von ganzen Zahlen zu sein und die 1-heiße Variante der Kreuzentropie zu verwenden. Wenn ja, könnte das Problem durch Ändern der Theano-Definition von Y auf

Y = T.lvector()