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