Tôi đang cố gắng làm cho hồi quy đơn giản nhất trên pyBrain nhưng bằng cách nào đó tôi thất bại.Ví dụ hồi quy đơn giản pyBrain
Các Neural Network nên tìm hiểu các chức năng Y = 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')
Nó không biết bất cứ điều gì. Tôi đã cố gắng để loại bỏ các lớp ẩn (vì trong ví dụ này, chúng tôi thậm chí không cần điều đó) và mạng bắt đầu dự đoán NaNs. Điều gì đang xảy ra?
EDIT: Đây là mã mà giải quyết vấn đề của tôi:
#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')
Tôi cũng đã phải chia đầu vào cho tối đa (100). Khi tôi bắt đầu đào tạo các giá trị đầu ra của tế bào thần kinh trên 1 và dưới 0 .. tôi không hiểu cách thức hoạt động này .. –
Tôi đã không chọc vào bên trong của pybrain để kiểm tra cách nó hoạt động, nhưng nó là trong bất kỳ sự kiện một tốt thực hành chung để mở rộng đầu vào của bạn, để khi bạn có nhiều đầu vào (trong đó, được cấp, bạn không có ở đây, nhưng trong các trường hợp khác bạn sẽ) chúng bắt đầu có trọng số giống nhau. – rossdavidh