2013-05-11 8 views
8

mlp पैकेज में विधि caretRSNNS में mlp फ़ंक्शन को कॉल करती है। RSNNS पैकेज में, मैं तंत्रिका नेट में कई छिपी परतों को स्थापित कर सकता हूं क्योंकि मुझे आकार पैरामीटर सेट करके पसंद है, उदा।क्या कैरेट पैकेज में एमएलपी विधि के साथ एक बहु-छिपी हुई परत तंत्रिका नेटवर्क स्थापित करने का कोई तरीका है?

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 नोड्स की दो छिपी हुई परतों के साथ एक तंत्रिका नेट स्थापित करेगा। मैं caret पैकेज का उपयोग करना चाहता हूं क्योंकि इसमें पैरामीटर/मॉडल खोज करने के साथ-साथ क्लस्टर के समानांतर कार्यान्वयन करने की कार्यक्षमता भी है। caret में, जब मैं विधि को देखता हूं, तो इसे केवल एक पैरामीटर के साथ ट्यून किया जा सकता है, size, उदा।

data(iris) 

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

3-नोड एकल छिपी हुई परत के साथ एक तंत्रिका नेट सेट करता है।

मैंने mlpGrid पर अन्य कॉलम जोड़ने का प्रयास किया है और ऐसे में, लेकिन caret एक दूसरी (या अधिक) छिपी परत जोड़ने की अनुमति नहीं देता है।

उत्तर

1

आपको "mlp" के कैरेट की "mlpML" विधि का उपयोग करना चाहिए। यह आरएसएनएनएस से एमएलपी फ़ंक्शन का उपयोग करता है, लेकिन आप अलग-अलग प्रति छिपी परत न्यूरॉन्स की संख्या को परिभाषित करने में सक्षम हैं। उदाहरण के लिए, निम्नलिखित कोड को काम करना चाहिए। आप अपनी परतों की परिभाषा के साथ अपने अनुकूलित ग्रिड को परिभाषित करते हैं, प्रत्येक परत (1, 2, और 3) और प्रति परत कितने न्यूरॉन्स परिभाषित करते हैं।

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

संक्षिप्त उत्तर यह है कि मुझे विश्वास नहीं है कि कैरेट एमएलपी विधि का उपयोग कर बहु-छिपे हुए परत नेटवर्क का समर्थन करता है।

यदि आप एमएलपी (या इसे आरएसएनएसएस को कॉल करने की आवश्यकता है) का उपयोग करने पर सेट हैं, तो आप दूसरे के इनपुट में पहले आउटपुट को खिलाने के लिए, दूसरी छिपी हुई परत को अनुकरण करने के रूप में नेटवर्क को एक साथ जोड़कर विचार कर सकते हैं। यह स्पष्ट रूप से कार्यान्वित करना अधिक कठिन होगा, और कई अनुकूलन खो देंगे जो आपको पहले स्थान पर कैरेट का उपयोग करना चाहते हैं।

दूसरी ओर, केयर एक विकल्प प्रदान करता है जो तंत्रिका पैकेज (विधि = 'तंत्रिकानेट') का उपयोग करता है। यह आपको एक बहु-छिपे हुए परत तंत्रिका नेटवर्क के साथ कैरेट का उपयोग करने की अनुमति देगा। हालांकि यह प्रलेखन से दिखता है कि केवल 3 छिपी परतें समर्थित हैं।

संबंधित मुद्दे