i = 0;
while (fscanf(fp, "%f %f %d", &x[i], &y[i], &outputs[i]) != EOF) {
if (outputs[i] == 0) {
outputs[i] = -1;
}
i++;
}
patternCount = i;
我从上面的代码中不理解这一行的含义:
if (outputs[i] == 0) {
outputs[i] = -1;
它代表什么。输出是矩阵或向量。??
代码的参考是: Perceptron learning algorithm not converging to 0
I have a output file that has 3 columns:
1 0 0
0 0 1
0 1 0
所以它是一个矢量文件??
答案 0 :(得分:3)
输出被定义为包含整数值的一维数组。
float x[208], y[208];
int outputs[208];
数组中的每个索引都可以看作与data文件中读取的行相对应。
i x y outputs
--------------------------------------
0 | -8.818681 3.025210 1
1 | 3.653846 -2.969188 0
2 | ... ... .
.. | ... ... .
208 | -6.565934 -4.649860 1
如果 i == 0那么
x[0] == -8.818681
y[0] == 3.025210
outputs[0] == 1
用户 Amro 发布的精彩代码和信息解释了输出的限制和功能。
“ ...偏见项,即连接到值1的输入的第三个权重组件。(+ 1 / -1) 的“强>
数据文件中输出的值已分配了一个/零值。
因此,有问题的代码会检查从文件读入的输出的值是否等于零并重新分配给-1。
if (outputs[i] == 0)
outputs[i] = -1;
答案 1 :(得分:2)
据我所知,代码是从文件读取的,文件应该有重复的模式,每个模式由3个数字组成。
你的循环将每个模式中的第一个数字复制到x,第二个数字复制到y,最后一个数字复制到输出。但是,只要第三个数字为零,就会更改为-1。
patternCount将存储文件读取的数量
答案 2 :(得分:2)
感知器是来自人工智能/神经网络的术语。它的运作方式与单个神经元应该在大脑中运作的方式大致相同。
它有许多输入和一个输出。
所有这个文件正在指定给定输入集的输出应该是什么。这就是为x/y
和output
命名的原因。
至于为什么它会将输出从0变为-1(顺便说一句就是这样:将第三个文件列中的零变为负数),我不确定。感知器的输出几乎总是输入到其他感知器中,所以将-1传递给期望0或1的东西是一个......有趣的......想法。