提问人:user414981 提问时间:8/11/2010 最后编辑:Communityuser414981 更新时间:8/11/2010 访问量:299
理解代码的问题
problem in understanding the code
问:
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
所以它是一个矢量文件??
答:
2赞
Louis Rhys
8/11/2010
#1
据我所知,代码是从文件中读取的,并且该文件应该具有重复的模式,每个模式由 3 个数字组成。
循环将每个模式中的第一个数字复制到 x,将第二个数字复制到 y,将最后一个数字复制到输出。但是,每当第三个数字为零时,它就会更改为 -1。
patternCount 将存储文件中读取的模式数量
2赞
paxdiablo
8/11/2010
#2
感知器是人工智能/神经网络的一个术语。它的运作方式与单个神经元在大脑中的运作方式大致相同。
它有许多输入和一个输出。
此文件所做的只是指定给定输入集的输出应该是什么。这就是为什么 和 的命名方式不同。x/y
output
至于为什么它将输出从 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一无所知。
评论
1-D
v_i
v
i