2016-04-24 5 views
2

Ich versuche ein neuronales Netzwerk zu schaffen, das xor Problem mit scikit-neuralnetwork lernen kann. Ich erhalte Leistung von 1 für allesmlp classifier von scikit-neuralnetwork funktioniert nicht für xor

import sknn.mlp as mlp; 
import numpy as np; 
""" input layer """ 
ip_layer = mlp.Layer('Sigmoid', units=2); 
hidden_layer = mlp.Layer('Tanh', units=3); 
op_layer = mlp.Layer('Softmax', units=1); 
nn = mlp.Classifier([ip_layer, hidden_layer, op_layer], n_iter=10000); 
nn.fit(np.array([[0,0], [1,0], [0,1], [1,1]]), np.array([[0], [1], [1], [0]])); 
print nn.predict(np.array([[0,0], [0,1], [1, 0], [1, 1]])) 

es prognostiziert [[1], [1], [1], [1]]. Es ist eine andere Frage auf Stack-Überlauf selbst, die einen ähnlichen Code versucht, aber ich war nicht in der Lage, die Lösung zu verstehen, und es hat mir nicht erlauben, Kommentar zu schreiben scikit-neuralnetwork mismatch error in dataset size

Es mir Warnung folgende gibt. Ich bin mir nicht sicher, ob es relevant ist.

/usr/local/lib/python2.7/dist-packages/theano/tensor/signal/downsample.py:6: UserWarning: downsample module has been moved to the theano.tensor.signal.pool module. "downsample module has been moved to the theano.tensor.signal.pool module.") [(4, 1)]

Antwort

2

mit Ihrem ursprünglichen Code, den ich bekommen AssertionError: Mismatch between dataset size and units in output layer.

Ich habe modifizierte Code units=2 für die Ausgangsschicht zu haben (dies scheint Schlüssel zu sein), und bekam die korrekte Vorhersage Ausgabe von [[0], [1], [1], [0]]

import sknn.mlp as mlp;            
import numpy as np; 

ip_layer = mlp.Layer('Sigmoid', units=2) 
hidden_layer = mlp.Layer('Tanh', units=3) 
op_layer = mlp.Layer('Softmax', units=2) # <-- units=2, not 1 

nn = mlp.Classifier(
    [ip_layer, hidden_layer, op_layer], 
    n_iter=10000 
) 

x_train = np.array([[0,0],[1,0],[0,1],[1,1]]) 
y_train = np.array([[0],[1],[1],[0]]) 

nn.fit(x_train, y_train) 

y_predict = nn.predict(x_train) 

print 'y_predict is', y_predict 

Die Ausgangsspur mit der korrekten Vorhersage

Meine Umgebung Versionen

Python 2.7.9 

>>> np.__version__ 
'1.11.0' 
>>> sknn.__version__ 
u'0.7' 
>>> lasagne.__version__ 
'0.1' 
>>> theano.__version__ 
'0.8.2' 

Theano Warnung

Was die Warnung UserWarning: downsample module has been moved to the theano.tensor.signal.pool module., scheint dies in der Bibliothek gutartigen und einfach eine Schnittstelle Veränderung zu sein, die Aktualisierung der theano Version 0.8.0 sollte es reparieren (sknn verwendet lasagne und theano darunter)

ref https://github.com/Lasagne/Lasagne/issues/605

ref https://github.com/Lasagne/Lasagne/pull/644

+0

Vielen Dank. Meins funktioniert nicht, wenn ich es in zwei Einheiten mache. Könnte das sein, weil ich eine andere Version oder etwas verwende? Ich erhalte den gleichen Fehler AssertionError: Mismatch zwischen Datensatzgröße und Einheiten in der Ausgabeschicht. – user2559431

+0

Meine Versionen der Antwort hinzugefügt, hoffe, dass hilft! – bakkal

+0

Ich benutze numpy Version von 1.8.2. Ruhe alles ist ähnlich wie deins. Python-Version ist 2.7.6. – user2559431

0

Sehen, wie Sie die Sigmoid Aktivierung verwenden Funktion arbeiten an einem binären Klassifikationsproblem, sollte die Ausgangsschicht.

op_layer = mlp.Layer('Sigmoid', units=1);.

+0

Danke für die Antwort. Ich habe diese Änderung versucht. Das scheint nicht zu funktionieren. Ich bekomme den gleichen Output. Ich werde den Code erneut durchgehen und zu dir zurückkommen :) – user2559431