2016-06-24 18 views
6

Tôi đã cố tạo một mạng nơron sử dụng học tăng cường. Tôi đã chọn scikit-neuralnetwork làm thư viện (vì nó đơn giản). Dường như là, sự va chạm đó hai lần làm hỏng Theano.sknn - kích thước đầu vào không phù hợp với sự phù hợp thứ hai

Dưới đây là đoạn code đơn giản nhất gây ra vụ tai nạn (Lưu ý, nó không có vấn đề gì lớp có, cũng không tỷ lệ học hoặc 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 

Và đây là lỗi tôi nhận:

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)]] 

Tested bằng Python 2.7.11

Liệu sknn không hỗ trợ phù hợp nhiều lần, hoặc tôi đang làm một số ngu ngốc sai lầm? Nếu không, bạn phải triển khai học tập tăng cường như thế nào?

Trả lời

1

Tôi không sử dụng sknn rất thường xuyên tuy nhiên nó rất giống với sklearn vì vậy tôi có thể trợ giúp!

Trước hết khi sử dụng phương pháp fit, bạn sẽ khởi tạo lại trọng số, nếu bạn muốn cập nhật trọng số dựa trên dữ liệu mới, bạn nên sử dụng phương pháp partial_fit.

Liên quan đến sự cố, đó là vì bạn là X mảng là một hình dạng khác trong thứ nguyên đầu tiên chứ không phải là thứ hai.

import numpy as np 
from sknn.mlp import Classifier, Layer 

clf = Classifier(
    layers=[ 
     Layer("Softmax") 
     ], 
    learning_rate=0.001, 
    n_iter=1) 

# Original training data 
X = np.array([[0.]]) 
Y = np.array([[0.]]) 
print X.shape, Y.shape 

# Data used for second fitting 
X = np.array([[-1.], [1.]]) 
Y = np.array([[1.], [0.]]) 
print X.shape, Y.shape 


# Use the partial fit method to update weights 
clf.partial_fit(X, Y) # Initialize the network for learning 
clf.partial_fit(X, Y) # Update the weights 


# Multiple training examples by stacking two on top of each other 
X = np.concatenate((X, X)) 
Y = np.concatenate((Y, Y)) 
print X.shape, Y.shape 

clf.partial_fit(X, Y) 

Đầu ra:

(1, 1) (1, 1) 
(2, 1) (2, 1) 
(4, 1) (4, 1) 
+0

sknn không có partial_fit (cố gắng tìm nó theo cách trước khi đặt câu hỏi này). Oth, tôi không thể lấy mạng thần kinh của sklearn để làm việc cả. – seequ

+0

Bạn đang chạy phiên bản nào vì mã đó chạy tốt cho tôi? – ncfirth

+1

Bạn có thể xem phương thức 'partial_fit' trong tài liệu sknn http://scikit-neuralnetwork.readthedocs.io/en/latest/module_mlp.html#classifier – ncfirth

Các vấn đề liên quan