我开始学习深度学习,并发现了synaptic.js
。
我想创建一个预测系统,输入一组数字,希望AI能够理解其中的模式。
我的训练数据将是一个包含两个数字的数组,期望验证的输出是[x, y, z],其中x和z是表示偶数/奇数的布尔值,y是输入中两个数字的和。
因此:
var trainingSet = [{ 'input': [20, 34], 'output': [1, 54, 0]}, { 'input': [22, 33], 'output': [1, 55, 1]},{ 'input': [24, 35], 'output': [1, 59, 1]},{ 'input': [23, 36], 'output': [0, 59, 0]}];
如果我输入[20, 31]
,我希望AI能够知道答案。
我该如何设置这种逻辑呢?
我根据一个YouTube讲座创建了一个jsFiddle,但我不明白代码实际上在做什么…
我制作了一个循环来生成训练数据,在这个jsFiddle中,基本上是这样的:
// 训练数据生成器:var trainingSet = [];for (var i = 0; i < 500; i++) { var obj = {}; obj.input = [ Math.random() * 10, Math.random() * 10 ].map(Math.round); obj.output = [ Number(obj.input[0] % 2 == 0), obj.input[0] + obj.input[1], Number(obj.input[1] % 2 == 1) ] trainingSet.push(obj);}document.body.innerHTML = JSON.stringify(trainingSet);
回答:
除非你构建的生成器只是为了向我们解释问题,否则这个问题是无法解决的。更正式地说,不存在这样的函数,可以从输出中恢复输入。生成器产生随机数,保留的是它们是奇数还是偶数以及它们的和。存在无限多个数字满足这些条件。从你的例子来看:54 = 20 + 34 = 18 + 36 = 16 + 38 … 如果有驱动这个过程的机制,是可以做到的。但这是随机的。你的神经网络永远无法学习到模式,因为根本没有模式可言。