2013-05-11 6 views
8

caretmlpメソッドは、RSNNSmlp関数を呼び出します。 RSNNSパッケージでは、サイズ・パラメータを設定することで、好きなようにニューラル・ネットの隠れ層をいくつでも設定できます。キャレットパッケージにmlpメソッドを使ってマルチ隠れ層ニューラルネットワークを設定する方法はありますか?

data(iris) 

#shuffle the vector 
iris <- iris[sample(1:nrow(iris),length(1:nrow(iris))),1:ncol(iris)] 

irisValues <- iris[,1:4] 
irisTargets <- decodeClassLabels(iris[,5]) 
#irisTargets <- decodeClassLabels(iris[,5], valTrue=0.9, valFalse=0.1) 

iris <- splitForTrainingAndTest(irisValues, irisTargets, ratio=0.15) 
iris <- normTrainingAndTestSet(iris) 

model <- mlp(iris$inputsTrain, iris$targetsTrain, size=c(5,7), learnFuncParams=c(0.1), 
      maxit=50, inputsTest=iris$inputsTest, targetsTest=iris$targetsTest) 

5ノードと7ノードの2つの隠れたレイヤーを持つニューラルネットを設定します。 caretパッケージを使用したいのは、パラメータ/モデル検索の機能とクラスタの並列実装があるためです。 caretでは、メソッドを参照するときに、1つのパラメータ、sizeでのみ調整できます。

data(iris) 

mlpGrid <- data.frame(.size=3) 
model2<-caret::train(Species~. , iris, method='mlp', tuneGrid=mlpGrid) 

3ノードの単一隠れ層を持つニューラルネットを設定します。

他の列をmlpGridなどに追加しようとしましたが、caretは2番目(またはそれ以上)の隠し層を追加できないようです。

答えて

1

キャレットの "mlpML"メソッドインスタント "mlp"を使用する必要があります。それはRSNNSのmlp関数を使用しますが、隠れ層ごとのニューロン数を別々に定義することができます。たとえば、次のコードで作業を行う必要があります。レイヤー、各レイヤー(12、および3)の定義と1つのレイヤーあたりのニューロン数でカスタマイズされたグリッドを定義します。

mlp_grid = expand.grid(layer1 = 10, 
         layer2 = 10, 
         layer3 = 10) 

mlp_fit = caret::train(x = train_x, 
       y = train_y, 
       method = "mlpML", 
       preProc = c('center', 'scale', 'knnImpute', 'pca'), 
       trControl = trainControl(method = "cv", verboseIter = TRUE, returnData = FALSE), 
       tuneGrid = mlp_grid) 

verboseIter=TRUEを考えると、それは、値が実際に適用されたことを示して

+ Fold01: layer1=10, layer2=10, layer3=10 
+ Fold02: layer1=10, layer2=10, layer3=10 
+ Fold03: layer1=10, layer2=10, layer3=10 
... 
0

私は、Caretがmlpメソッドを使ってマルチ隠れ層ネットワークをサポートしているとは思っていません。

mlp(またはRSNSSを呼び出す必要がある)を使用するように設定されている場合は、最初の出力を2番目の入力に入力してもう1つの隠れ層をシミュレートする場合と同様に、ネットワークを連鎖させることも考えられます。これは明らかに実装が難しく、最初にCaretを使用したい多くの最適化を失います。

一方、Caretはneuralnetパッケージ(method = 'neuralnet')を使用する代替手段を提供しています。これにより、複数の隠れたレイヤーのニューラルネットワークで、キャレットを使用することができます。しかし、ドキュメンテーションからは、隠されたレイヤーは3つしかサポートされていないように見えます。

関連する問題