2016-06-24 5 views
6

強化学習を使用するニューラルネットワークを作成しようとしていました。私はライブラリとしてscikit-neuralnetworkを選んだ(これは単純なので)。しかし、それは二度とフィニッシュがテアノをクラッシュさせるようです。sknn - 2番目のフィットで入力ディメンションの不一致があります

は、ここでのクラッシュの原因となる最も単純なコードです(注、何であるか層は関係ありません、また学習率や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 

をそしてここで私が得たエラーがあります: Pythonの2.7.11

でテスト

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

sknnフィッティング複数回をサポートしていないか、私はいくつかのばかばかしいをしています間違い?そうでない場合は、どのように強化学習を実装することになっていますか?

答えて

1

私は非常に頻繁にsknnを使用しませんが、それはsklearnとよく似ていますので、私は助けることができます!

最初にfitメソッドを使用する場合、新しいデータに基づいてウェイトを更新する場合は、partial_fitメソッドを使用してウェイトを再初期化します。

クラッシュに関しては、Xという配列は2番目の次元ではなく1番目の次元で別の形になっているためです。

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) 

出力:

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

sknnは何partial_fitを持っていないが(ちなみに、この質問をする前にそれを見つけることを試みました)。ああ、私はSklearnのニューラルネットワークをまったく動作させることができませんでした。 – seequ

+0

そのコードがうまく動作するため、どのバージョンを実行していますか? – ncfirth

+1

sknnのドキュメントで 'partial_fit'メソッドを見ることができます。http://scikit-neuralnetwork.readthedocs.io/en/latest/module_mlp.html#classifier – ncfirth

関連する問題