4

我已经训练了一个 ffnn 来适应 pybrain 的未知函数。我像这样构建ffnn

net = buildNetwork(1, 2, 1,hiddenclass=TanhLayer)

我对 pybrain 说用命令打印网络的参数

print net.params

pybrain 将参数返回给我

(1.76464967 , 0.46764103 , 1.63394395 ,-0.95327762 , 1.19760151, -1.20449402, -1.34050959)

现在我想在另一个脚本中使用这个拟合函数。我试过了

def netp(Q):
    net = buildNetwork(1, 2, 1,hiddenclass=TanhLayer)
    net._setParameters=(1.76464967 , 0.46764103 , 1.63394395 ,-0.95327762 , 1.19760151, -1.20449402, -1.34050959)
    arg=1.0/float(Q)
    p=float(net.activate([arg]))
    return p

问题是从网络返回的值完全不在意。例子

 0.0749046652125 1.0
-2.01920546405 0.5
-1.54408069672 0.333333333333
 1.05895945271 0.25
-1.01314347373 0.2
 1.56555648799 0.166666666667
 0.0824497539453 0.142857142857
 0.531176423655 0.125
 0.504185707604 0.111111111111
 0.841424535805 0.1

其中第一列是网络的输出,第二列是输入。网络的输出必须接近输入值。有什么问题?我在哪里做错了?这是过度拟合的问题还是我遗漏了什么?

4

1 回答 1

2

一个错字:

net._setParameters=(1.76464967 , 0.46764103 , 1.63394395 ,-0.95327762 , 1.19760151, -1.20449402, -1.34050959)

这一行有效地用元组替换了私有_setParamethers方法。尝试是否将此行替换为

net._setParameters([1.76464967 , 0.46764103 , 1.63394395 ,-0.95327762 , 1.19760151, -1.20449402, -1.34050959])

会有所帮助。

二、看不出1/Q操作的原因,就这么简单

>>> def netp(Q): return float(net.activate([Q]))
>>> for i in inp:
...   print '{}\t{:.5f}'.format(i, netp(i))

产量

1.0      0.97634
0.5      0.46546
0.33333  0.29013
0.25     0.20762
0.2      0.16058
0.16666  0.13042
0.14285  0.10952
0.125    0.09421
0.11111  0.08254
0.1      0.07335
于 2013-12-12T14:58:01.323 回答