neural-network - 为什么我的神经网络总是预测相同的输出?(突触.js)
问题描述
您好,这个问题与 Synaptic.js 有关。
我正在尝试使用神经网络从图像中读取手写数字。图像尺寸为 120x90,仅包含黑白像素。我正在使用 html5 画布将图像转换为矩阵,然后将其输入具有 10800 个输入、30 个隐藏层和 3 个输出的 NN。
var myNetwork = new synaptic.Architect.Perceptron(10800,30,3);
var learningRate = .3;
将 Image 转换为 Matrix 的代码:
var matrix = [];
for(i = 0; i < img.height; i++) {
for(j = 0; j < img.width; j++) {
var rgba = ctx.getImageData(j, i, 1, 1);
var avg = ((rgba["data"][0] + rgba["data"][1] + rgba["data"][2]) / 3);
var indice;
if(avg < 150) indice = 1;
else indice = 0;
matrix.push(indice);
}
}
上面的代码给出了我预期的结果,基本上它将“白色”像素转换为 0,将“黑色”像素转换为 1。附件是包含“1”的图像的矩阵示例(我调整了实际矩阵的大小,因为它太大了): 矩阵图
当我向 NN 提供两张图像时,每张图像都包含“1”或“2”手写数字,它对它们进行了很好的分类。同样,当我尝试再输入五张包含“1”或“2”手写数字的图像时,NN 仍然能够很好地对它们进行分类。
我用来训练 NN 的代码:
myNetwork.propagate(learningRate, [1, 0]); //Train NN to learn '1'
myNetwork.propagate(learningRate, [0, 1]); //Train NN to learn '2'
但是,当我开始将“3”输入网络时,它开始将每个图像输入(包括“1”和“2”)分类到第三类。基本上当输出大小大于 2 时,NN 将始终预测相同的输出,这是我训练它学习的最后一个类别。
myNetwork.propagate(learningRate, [0, 0, 1]); //Train NN to learn '3'
每个数字我有超过 75 张图像,我试图将它们全部提供,但 NN 总是将它们归类为“3”。我在这里做错了什么?任何帮助表示赞赏,谢谢!
解决方案
推荐阅读
- javascript - I am trying to access a folder outside of the current directory of my folder in express js
- continuous-integration - How to build a ci / cd pipeline with hybris commerce?
- swift - Custom init with @Namespace for .matchedGeometryEffect
- microsoft-graph-api - The method openShiftsRequests return Resource not found for the segment 'openShiftsRequests'
- python - Faster Way to Lookup Values in Numpy Structured Array
- python - Error setting up MNN module in a Raspberry pi 4 "dynamic module does not define module export function (PyInit_libMNN)"
- google-cloud-platform - Cross GSuite Organizations Domain-Wide Delegation
- c# - 如何使用自定义格式向 DateTime 变量添加天数
- javascript - 如何让控制台输出我的号码?
- java - 在 Java dropwizard 微服务上使用 jaeger 启用跟踪