2014-12-11 13 views
5

मैं pyBrain पर सबसे सरल प्रतिगमन करने की कोशिश कर रहा हूं लेकिन किसी भी तरह से मैं असफल रहा हूं।सरल रिग्रेशन उदाहरण pyBrain

तंत्रिका नेटवर्क समारोह वाई सीखना चाहिए = 3 * एक्स

from pybrain.supervised.trainers import BackpropTrainer 
from pybrain.datasets import SupervisedDataSet 
from pybrain.structure import FullConnection, FeedForwardNetwork, TanhLayer, LinearLayer, BiasUnit 
import matplotlib.pyplot as plt 
from numpy import * 

n = FeedForwardNetwork() 
n.addInputModule(LinearLayer(1, name = 'in')) 
n.addInputModule(BiasUnit(name = 'bias')) 
n.addModule(TanhLayer(1,name = 'tan')) 
n.addOutputModule(LinearLayer(1, name = 'out')) 
n.addConnection(FullConnection(n['bias'], n['tan'])) 
n.addConnection(FullConnection(n['in'], n['tan'])) 
n.addConnection(FullConnection(n['tan'], n['out'])) 
n.sortModules() 

# initialize the backprop trainer and train 
t = BackpropTrainer(n, learningrate = 0.1, momentum = 0.0, verbose = True) 

#DATASET 
DS = SupervisedDataSet(1, 1) 
X = random.rand(100,1)*100 
Y = X*3+random.rand(100,1)*5 
for r in xrange(X.shape[0]): 
    DS.appendLinked((X[r]),(Y[r])) 

t.trainOnDataset(DS, 200) 
plt.plot(X,Y,'.b') 
X=[[i] for i in arange(0,100,0.1)] 
Y=map(n.activate,X) 
plt.plot(X,Y,'-g') 

यह कुछ भी जानने नहीं है। मैंने छिपी परत को हटाने की कोशिश की है (क्योंकि इस उदाहरण में हमें इसकी आवश्यकता भी नहीं है) और नेटवर्क ने नाएन की भविष्यवाणी करना शुरू कर दिया। क्या चल रहा है?

संपादित करें: इस कोड है कि मेरी समस्या हल है:

#DATASET 
DS = SupervisedDataSet(1, 1) 
X = random.rand(100,1)*100 
Y = X*3+random.rand(100,1)*5 
maxy = float(max(Y)) 
maxx = 100.0 
for r in xrange(X.shape[0]): 
    DS.appendLinked((X[r]/maxx),(Y[r]/maxy)) 

t.trainOnDataset(DS, 200) 

plt.plot(X,Y,'.b') 
X=[[i] for i in arange(0,100,0.1)] 
Y=map(lambda x: n.activate(array(x)/maxx)*maxy,X) 
plt.plot(X,Y,'-g') 

उत्तर

4

बुनियादी pybrain न्यूरॉन्स 300 के द्वारा अपने वाई के बीच 0 और 1. फूट डालो उत्पादन कुछ करने जा रहे हैं (अधिकतम संभव मूल्य), और आप बेहतर परिणाम मिलेगा।

अधिक आम तौर पर, अपने डेटासेट के लिए अधिकतम वाई ढूंढें, और उसके द्वारा सबकुछ स्केल करें।

+0

मुझे इनपुट को अधिकतम (100) से विभाजित करना पड़ा। जब मैं 1 से नीचे और 0 से ऊपर न्यूरॉन्स आउटपुट मानों को प्रशिक्षण शुरू करता हूं .. मुझे समझ में नहीं आता कि यह कैसे काम करता है .. –

+0

मैंने यह जांचने के लिए पाइब्रेन के आंतरिक में प्रवेश नहीं किया है, लेकिन यह किसी भी घटना में अच्छा है आपके इनपुट को स्केल करने के लिए सामान्य अभ्यास, ताकि जब आपके पास एकाधिक इनपुट हों (जो, आपको दिया गया है, तो आपके पास यहां नहीं है, लेकिन अन्य मामलों में आप करेंगे) वे इसके बारे में भारित शुरू करते हैं। – rossdavidh

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