2015-08-06 9 views
5

L'errore:TypeError "argomento di input inappropriato alla funzione Theano"

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,).')

Si prega di avvisare come risolvere?

Il codice e dati possono essere scaricati su questo link: http://u.163.com/axfWJ81e e inserisci questo codice: QU90WxTZ

E qui è il mio codice:

# -*- 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

Qual è la linea 77? – eickenberg

risposta

2

Il problema è che dite Theano Y è una matrice di valori in virgola mobile ma il valore fornito per Y è un vettore di numeri interi.

Non è del tutto chiaro quale sia corretto, ma ho il sospetto che tu intenda che Y sia un vettore di numeri interi e che usi la variante 1-hot dell'entropia incrociata. Se è così, il problema potrebbe essere risolto cambiando la definizione di Theano di Y a

Y = T.lvector() 
Problemi correlati