遇到我創建這樣一個神經網絡:PyBrain:在廣場遇到了溢出,無效的值乘
n = FeedForwardNetwork()
inLayer = LinearLayer(43)
bias = BiasUnit()
hiddenLayer = SigmoidLayer(100)
outLayer = LinearLayer(1)
n.addInputModule(inLayer)
n.addModule(bias)
n.addModule(hiddenLayer)
n.addOutputModule(outLayer)
in_to_hidden = FullConnection(inLayer, hiddenLayer)
bias_to_hidden = FullConnection(bias, hiddenLayer)
hidden_to_out = FullConnection(hiddenLayer, outLayer)
n.addConnection(in_to_hidden)
n.addConnection(bias_to_hidden)
n.addConnection(hidden_to_out)
n.sortModules()
我訓練它通過以下方式(我簡化,它是在多次反覆進行培訓):
self.trainer = BackpropTrainer(self.neural_net, learningrate=0.8)
(...)
ds = SupervisedDataSet(self.net_input_size, 1)
ds.addSample([...], np.float64(learned_value))
(...)
self.trainer.trainOnDataset(ds)
有時候,我得到以下警告:
(...)/ lib目錄/ python3.5 /站點包/ PyBrain-0.3.1-py3.5.egg/pybr AIN /監督/培訓/ backprop.py:99:RuntimeWarning:在方遇到溢出 誤差+ = 0.5 *總和(outerr ** 2)
(...)/ LIB/python3.5 /站點包/PyBrain-0.3.1-py3.5.egg/pybrain/structure/modules/sigmoidlayer.py:14:RuntimeWarning:在乘法 inerr遇到無效值[:] = outbuf中*(1 - outbuf中)* outerr
,然後當我檢查保存的網絡文件我看到所有權重nan
:
(...)
<FullConnection class="pybrain.structure.connections.full.FullConnection" name="FullConnection-8">
<inmod val="BiasUnit-5"/>
<outmod val="SigmoidLayer-11"/>
<Parameters>[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]</Parameters>
</FullConnection>
(...)
您正在學習費率太高。正常費率(基於問題)大約是0.01或0.001,例如如果你正在學習速度如此之高,特別是如果你正在訓練大量的時代,你的權重可能會變得太高,因此分化爲NaN值。 – daniel451
@ascenator但是這個問題只發生在一開始(比方說20或30個時代) - 永遠不會遲到。 – Luke
@ascenator你可能是對的。我做了一些測試,訓練率爲0.1,並沒有看到任何警告。 – Luke