如何使用PyBrain训练一个简单的线性函数?

我刚尝试了PyBrain,希望它能学习简单的线性函数 f(x) = 4x+1:

# Build the networkfrom pybrain.tools.shortcuts import buildNetworknet = buildNetwork(1, 2, 1, bias=True)# Add samplesfrom pybrain.datasets import SupervisedDataSetds = SupervisedDataSet(1, 1)for x in range(1000):    ds.addSample((x, ), (4*x+1,))# Train with samplesfrom pybrain.supervised.trainers import BackpropTrainertrainer = BackpropTrainer(net, ds)for i in range(100):    error = trainer.train()    print("Error: %0.2f" % error)# See if it remembers print("Test function f(x)=4x+1")for i in range(10):    print("f(%i) = %i" % (i, net.activate((i, ))))

但当我执行这段代码时,得到的结果非常错误:

f(0) = 1962f(1) = 1962f(2) = 1962f(3) = 1962f(4) = 1962f(5) = 1962f(6) = 1962f(7) = 1962f(8) = 1962f(9) = 1962

为什么这不起作用呢?

尝试2

代码:

# Build the networkfrom pybrain.tools.shortcuts import buildNetworknet = buildNetwork(1, 2, 1, bias=True)# Add samplesfrom pybrain.datasets import SupervisedDataSetds = SupervisedDataSet(1, 1)for x in range(1000):    ds.addSample((x, ), (4*x+1,))    ds.addSample((x, ), (4*x+1,))# Train with samplesfrom pybrain.supervised.trainers import BackpropTrainertrainer = BackpropTrainer(net, ds, learningrate=0.001, momentum=0.99)print("Start training")a = trainer.trainUntilConvergence(dataset=ds,                                  maxEpochs=100,                                  verbose=True,                                  continueEpochs=10,                                  validationProportion=0.1)print(a)print("Finished training")# See if it remembersprint("Test function f(x)=4x+1")for i in range(10):    print("f(%i) = %i" % (i, net.activate((i, ))))

输出:

Start trainingtrain-errors: [  827395.411895  755443.286202  722073.904381  748336.584579 [...]695939.638106  726953.086185  736527.150008  739789.458146  736074.235677  731222.936020  675937.725009]valid-errors: [  2479217.507148  915115.526570  703748.266402  605613.979311  592809.132542  686959.683977  612248.174146  [...]655606.225724  637762.864477  643013.094767  620825.083765  609063.451602  607935.458244  716839.447374]([827395.41189463751, 755443.28620243724, 722073.90438077366, 748336.58457926242, 739568.58919456392, 725496.58682491502, [...]637762.86447708646, 643013.09476733557, 620825.08376532339, 609063.45160197129, 607935.45824447344, 716839.44737418776])Finished trainingTest function f(x)=4x+1f(0) = 1955f(1) = 1955f(2) = 1955f(3) = 1955f(4) = 1955f(5) = 1955f(6) = 1955f(7) = 1955f(8) = 1955f(9) = 1955

回答:

神经网络通常用于训练函数 enter image description here。这意味着你不能直接使用线性函数的 (x, f(x)) 对来进行训练。(然而,这可以通过线性回归来实现)。

相反,网络需要用变量的聚类来训练,例如类似于以下内容:

#!/usr/bin/env pythonfrom random import normalvariate# Build the networkfrom pybrain.tools.shortcuts import buildNetworknet = buildNetwork(2, 1, 1, bias=True)# Add samplesfrom pybrain.datasets import SupervisedDataSetds = SupervisedDataSet(2, 1)for i in range(100):    x = normalvariate(3, 0.6)    y = normalvariate(2, 1)    ds.addSample((x, y), (0,))for i in range(100):    x = normalvariate(7, 0.5)    y = normalvariate(1, 0.1)    ds.addSample((x, y), (1,))# Train with samplesfrom pybrain.supervised.trainers import BackpropTrainertrainer = BackpropTrainer(net, ds, learningrate=0.1, momentum=0.99)print("Start training")print(trainer.train())a = trainer.trainUntilConvergence(dataset=ds,                                  maxEpochs=1000,                                  verbose=True,                                  continueEpochs=10,                                  validationProportion=0.1,                                  outlayer=softmax)print("Finished training")print(trainer.train())# See if it remembersprint("Test function f(x)=4x+1")for x in range(-10,10):    for y in range(-10,10):        print("f(%i, %i) = %i" % (x, y, net.activate((x, y))))print("f(%i, %i) = %i" % (3, 2, net.activate((3, 2))))print("f(%i, %i) = %i" % (7, 1, net.activate((7, 1))))

可以在我的博客上找到一个带有可视化的工作示例

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注