Stavo tentando di creare una rete neurale che utilizza l'apprendimento di rinforzo. Ho scelto scikit-neuralnetwork come libreria (perché è semplice). Sembra, però, che il montaggio due volte fa crollare Theano.sknn - mancata corrispondenza delle dimensioni di input sul secondo adattamento
Ecco il codice più semplice che provoca l'arresto (Nota, non importa ciò che gli strati non ci sono, né il tasso di apprendimento o n_iter):
import numpy as np
from sknn.mlp import Classifier, Layer
clf = Classifier(
layers=[
Layer("Softmax")
],
learning_rate=0.001,
n_iter=1)
clf.fit(np.array([[0.]]), np.array([[0.]])) # Initialize the network for learning
X = np.array([[-1.], [1.]])
Y = np.array([[1.], [0.]])
clf.fit(X, Y) # crash
Ed ecco l'errore che ho ottenuto:
ValueError: Input dimension mis-match. (input[0].shape[1] = 2, input[1].shape[1] = 1)
Apply node that caused the error: Elemwise{Mul}[(0, 1)](y, LogSoftmax.0)
Toposort index: 12
Inputs types: [TensorType(float64, matrix), TensorType(float64, matrix)]
Inputs shapes: [(1L, 2L), (1L, 1L)]
Inputs strides: [(16L, 8L), (8L, 8L)]
Inputs values: [array([[ 1., 0.]]), array([[ 0.]])]
Outputs clients: [[Sum{axis=[1], acc_dtype=float64}(Elemwise{Mul}[(0, 1)].0)]]
testato in Python 2.7.11
Ha sknn non supporta il montaggio più volte, o sto facendo qualche idiota sbaglio? In caso contrario, come si dovrebbe implementare l'apprendimento di rinforzo?
sknn non ha partial_fit (cercato di trovare molto prima questa domanda). Altrimenti, non sono riuscito a far funzionare le reti neurali di sklearn. – seequ
Quali versioni stai utilizzando perché quel codice funziona correttamente? – ncfirth
Puoi vedere il metodo 'partial_fit' nei sknn docs http://scikit-neuralnetwork.readthedocs.io/en/latest/module_mlp.html#classifier – ncfirth