烤宽面条:隐藏层上的L2正则化从损失函数返回NaN

时间:2017-01-11 23:14:44

标签: python lasagne

我试图在烤宽面条中组合一个非常简单的3层神经网络。 30个输入神经元,10个神经元隐藏层,1-神经元输出层。我使用binary_crossentropy损失函数和sigmoid非线性。我想在进入输出层的边缘上进行l1正则化,并在从输入到隐藏层的边缘上进行l2正则化。我使用的代码非常接近于lasagne文档的正则化页面上的示例代码。

L1正则化似乎工作正常,但每当我将L2正则化的惩罚项添加到损失函数时,它返回nan。当我从下面的最后一行中删除术语l2_penalty * l2_reg_param时,一切正常。此外,我能够在隐藏层l_hid1上执行L1正则化而不会出现任何问题。

这是我第一次涉足theano和lasagne,所以我觉得这个错误可能很简单,但我只是不太了解它。

这是网络设置代码:

l_in = lasagne.layers.InputLayer(shape=(942,1,1,30),input_var=input_var)

l_hid1 = lasagne.layers.DenseLayer(l_in, num_units=10, nonlinearity=lasagne.nonlinearities.sigmoid, W=lasagne.init.GlorotUniform())

network = lasagne.layers.DenseLayer(l_hid1, num_units=1, nonlinearity=lasagne.nonlinearities.sigmoid)

prediction = lasagne.layers.get_output(network)

l2_penalty = regularize_layer_params(l_hid1, l2)
l1_penalty = regularize_layer_params(network, l1)

loss = lasagne.objectives.binary_crossentropy(prediction, target_var)
loss = loss.mean()
loss = loss + l1_penalty * l1_reg_param + l2_penalty * l2_reg_param

非常感谢任何帮助。谢谢!

0 个答案:

没有答案