我训练了一个 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
其中第一列是网络的输出,第二列是输入。网络的输出必须接近输入值。 有什么问题?我哪里做错了?是过拟合的问题还是我遗漏了什么?
最佳答案
打字错误:
net._setParameters=(1.76464967 , 0.46764103 , 1.63394395 ,-0.95327762 , 1.19760151, -1.20449402, -1.34050959)
此行有效地将私有(private) _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
关于python - 无法在 pybrain 上构建正确的 ffnn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20546456/