2014-12-11 21 views
5

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

Trả lời

4

Các tế bào thần kinh pybrain cơ bản sẽ ra một cái gì đó giữa 0 và 1. Chia Y của bạn bằng 300 (giá trị tối đa có thể), và bạn sẽ nhận được kết quả tốt hơn.

Thông thường, tìm Y tối đa cho tập dữ liệu của bạn và chia tỷ lệ mọi thứ theo đó.

+0

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

+0

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

Các vấn đề liên quan