神经网络ConvNetJs - 为什么它不能收敛

时间:2015-10-28 20:13:08

标签: neural-network conv-neural-network

首先......我不认为这是ConvNetJs的问题,我认为这是我对神经网络的理解问题。

给出2个随机数,检测当加在一起时结果是否均匀。

示例:

[4,6] = true

[3,4] = false

我的设置:

var layer_defs = [];
layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:2});
layer_defs.push({type:'fc', num_neurons:20, activation:'relu'});
layer_defs.push({type:'softmax', num_classes:2});

net = new convnetjs.Net();
net.makeLayers(layer_defs);
var trainer = new convnetjs.Trainer(net, {method: 'adadelta', l2_decay: 0.001,batch_size: 10}

然后我训练它(随机数)进行10,000次迭代。它永远不会接近。最多只有56%的准确度。

使用相同的设置但不同的问题:

第一个数字是否大于第二个数字。 它在1000次迭代中的准确度达到99%。

我尝试过的事情: 更多图层 更多神经元 svm vs softmax

我想知道这是否是一个“不可分类的”问题。

1 个答案:

答案 0 :(得分:4)

问题是添加两个数字并将结果分类为奇数或甚至不适合神经网络的问题。神经网络试图估计一个函数。估计的函数越平滑,神经网络就越容易收敛。 (这可能不是100%正确但会解决这个问题)

为了帮助想象为什么这两个问题如此不同,假设我们使第一个数字保持不变。现在考虑问题的图表,其中添加第二个数字并尝试确定结果是奇数还是偶数。该图将随着第二个数字的每个增量来回振荡。

然而,第二个问题将是一个更简单的图表。图表只有一个位置,从小于,等于,大于。