【发布时间】:2016-02-02 22:53:00
【问题描述】:
我找到了这个与我需要的确切型号相匹配的好资源:http://ufldl.stanford.edu/tutorial/supervised/LinearRegression/
重要的部分是这样的。
你有一个情节 x->y。每个 x 值都是“特征”的总和,或者我将如何表示它们,z。
因此,x->y 图的回归线将变为 h(SUM(z(subscript-i)),其中 h(x) 是回归线(函数)
在这个 NN 中,想法是每个 z-value 都被分配一个权重,以最小化最小二乘误差。
梯度函数用于更新权重以最小化误差。我相信我可能会错误地返回传播——我更新了权重。
所以我写了一些代码,但我的权重没有正确更新。
我可能只是误解了斯坦福帖子中的规范,所以我需要你的帮助。谁能验证我是否正确实现了这个 NN?
我的h(x) 函数是对初始数据的简单线性回归。换句话说,这个想法是神经网络会调整权重,使所有数据点都更接近这个线性回归。
for (epoch = 0; epoch < 10000; epoch++){
//loop number of games
for (game = 1; game < 39; game++){
sum = 0;
int temp1 = 0;
int temp2 = 0;
//loop number of inputs
for (i = 0; i < 10; i++){
//compute sum = x
temp1 += inputs[game][i] * weights[i];
}
for (i = 10; i < 20; i++){
temp2 += inputs[game][i] * weights[i];
}
sum = temp1 - temp2;
//compute error
error += .5 * (5.1136 * (sum) + 1.7238 - targets[game]) * (5.1136 * (sum) + 1.7238 - targets[game]);
printf("error = %G\n", error);
//backpropogate
for (i = 0; i < 20; i++){
weights[i] = sum * (5.1136 * (sum) + 1.7238 - targets[game]); //POSSIBLE ERROR HERE
}
}
printf("Epoch = %d\n", epoch);
printf("Error = %G\n", error);
}
【问题讨论】:
标签: c machine-learning neural-network regression gradient