理解代码的问题

problem in understanding the code

提问人:user414981 提问时间:8/11/2010 最后编辑:Communityuser414981 更新时间:8/11/2010 访问量:299

问:

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;

它代表什么。输出是矩阵或向量。??

代码的参考是:感知器学习算法不收敛到0

I have a output file that has 3 columns:

1 0 0
0 0 1
0 1 0

所以它是一个矢量文件??

C++

评论

0赞 Billy ONeal 8/11/2010
我不明白Matlab和C++怎么会出现在同一个问题中......
0赞 Hamish Grubijan 8/11/2010
它是一个数组,就像数学中的向量。它更改了向量和索引的位置。1-Dv_ivi
0赞 user414981 8/11/2010
哦对不起......我现在要删除那个标签..
0赞 user414981 8/11/2010
但为什么,output[i] = 0 => output[i] = -1???

答:

2赞 Louis Rhys 8/11/2010 #1

据我所知,代码是从文件中读取的,并且该文件应该具有重复的模式,每个模式由 3 个数字组成。

循环将每个模式中的第一个数字复制到 x,将第二个数字复制到 y,将最后一个数字复制到输出。但是,每当第三个数字为零时,它就会更改为 -1。

patternCount 将存储文件中读取的模式数量

2赞 paxdiablo 8/11/2010 #2

感知器是人工智能/神经网络的一个术语。它的运作方式与单个神经元在大脑中的运作方式大致相同。

它有许多输入和一个输出。

此文件所做的只是指定给定输入集的输出应该是什么。这就是为什么 和 的命名方式不同。x/youtput

至于为什么它将输出从 0 转换为 -1(顺便说一句,这就是它所做的一切:将第三个文件列中的零更改为负一),我不确定。感知器的输出几乎总是馈入其他感知器,因此将 -1 传递给期望 0 或 1 的东西是......有趣。。。想法。

评论

0赞 user414981 8/11/2010
谢谢。。。。你能看到我现在发布的另一个问题吗......在这个问题上,我非常需要帮助。
0赞 paxdiablo 8/11/2010
@ishamahajan,我很想帮忙,但不幸的是我不了解Matlab。
3赞 Adam 8/11/2010 #3


outputs 定义为包含整数值的一维数组。

float x[208], y[208];
int outputs[208];


数组中的每个索引都可以看作是对应于数据文件中读取的一行。

  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/0 值。 因此,有问题的代码会检查从文件中读入的输出值是否等于零,并重新分配给 -1。

if (outputs[i] == 0)
    outputs[i] = -1;

评论

0赞 user414981 8/11/2010
stackoverflow.com/questions/3454794/......你也帮助我解决这个问题
0赞 Adam 8/12/2010
我想帮忙,但我对Matlab一无所知。