2

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

给定 2 个随机数,检测相加结果是否为偶数。

例子:

[4,6] = 真

[3,4] = 假

我的设置:

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%。

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

第一个数字是否大于第二个数字。它在 1,000 次以下迭代中达到 99% 的准确率。

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

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

4

1 回答 1

4

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

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

然而,第二个问题将是一个更简单的图表。该图将只有一个点从小于、等于、大于切换。

于 2015-10-29T13:36:48.573 回答