2014-12-11 24 views
5

Ben pyBrain üzerinde basit regresyon yapmaya çalışıyorum ama bir şekilde başarısız ediyorum.Basit Regresyon Örneği pyBrain

Nöral Ağ işlevi Y öğrenmelidir = 3 * X

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

Bir şey öğrenmiyor. Gizli katmanı kaldırmaya çalıştım (çünkü bu örnekte buna ihtiyacımız yok) ve ağ NaN'leri tahmin etmeye başladı. Neler oluyor?

DÜZENLEME: Bu, sorunumu çözdü kodudur:

#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') 

cevap

4

temel pybrain nöronlar 300 tarafından 0 ile 1 Divide arasındaki çıkış şeye (mümkün olan maksimum değeri) sizin Y gidiyoruz ve sen Daha iyi sonuçlar alacağım.

Daha genel olarak, veri kümeniz için maksimum Y değerini bulun ve bununla ilgili her şeyi ölçeklendirin.

+0

Ayrıca girişi maksimum (100) olarak bölmek zorunda kaldım. Antrenmana başladığımda nöronların çıkış değerleri 1'in üzerinde ve 0'ın altında. Bunun nasıl çalıştığını anlayamıyorum .. –

+0

Nasıl çalıştığını kontrol etmek için pybrain içlerine girmedim, ama her durumda iyi. Girişlerinizi ölçeklendirmek için genel uygulama, böylece birden fazla girdiniz olduğunda (ki burada, burada değilsiniz, ancak diğer durumlarda), onlar aynı şekilde ağırlıklı olarak başlıyorlar. – rossdavidh