javascript - 前馈神经网络反向传播问题
问题描述
我正在尝试构建自己的小型神经网络库。
每次我运行我的代码时,它都会构建一个具有随机权重的新网络。然后我训练了 20,000 次:
const trainingData = [
{
data: [0,1],
target: [1]
},
{
data: [1,0],
target: [1]
},
{
data: [1,1],
target: [0]
},
{
data: [0,0],
target: [0]
}
]
const nn = new FNN(2,6,12,6,1)
for(let i = 0; i < 20000; i++) {
const index = Math.floor(Math.random() * 4)
nn.train(trainingData[index].data, trainingData[index].target)
}
console.log(nn.query([0,1]))
console.log(nn.query([1,0]))
console.log(nn.query([0,0]))
console.log(nn.query([1,1]))
如您所见,我正在尝试使用 4/5 层解决 XOR 问题(我知道这有点矫枉过正)。但是当我运行我的代码几次时,输出有时是错误的:
$ deno run sketch.ts
[ 0.9808040222512294 ]
[ 0.9808219014520584 ]
[ 0.009098634709446591 ]
[ 0.009259505045600065 ]
$ deno run sketch.ts
[ 0.984698425823075 ]
[ 0.9844728486048201 ]
[ 0.010107497773167363 ]
[ 0.010367109588917735 ]
$ deno run sketch.ts
[ 0.9856540170897103 ]
[ 0.5163204342937323 ] <-- this should be 1
[ 0.02873017555538064 ]
[ 0.516320908619891 ] <-- this should be 0
这里可能是什么问题?是因为随机权重吗?有趣的是,错误的输出总是彼此非常接近。
我正在使用 sigmoid 函数和 0.2 的学习率。随机权重在 -1 和 1 之间 (Math.random() * 2 - 1)
解决方案
推荐阅读
- javascript - 如何使用 JavaScript 在表格中添加一行?
- perl - 如何合并哈希数组中的哈希
- python - 比较平面徽标图像的好方法是什么
- python - 获取所选列总和的内存有效方法
- .net - 无法在 IIS 中使用 System.Management.Automation 库执行 AZ 注释
- oop - 覆盖参数类型?
- java - 使用 Java 将值插入数据库
- python - 如何将 pytesseract alto_xml 的结果添加到原始图像
- ruby-on-rails - 如何在 Rails 应用程序中包含插件/引擎?
- angular - ngx-paypal 不适用于生产版本