資源簡介
神經網絡實現異或問題,采用的是2:2:1的結構,并采用sigmoid函數
代碼片段和文件信息
/********************************************
**
**??神經網絡實現異或操作
** 臧瀟?清華大學
** 2012.10.18
**
****************************************************/
#include?
#include?
#include?
#include?
#define?Ni?2?//?輸入層神經元的個數
#define?Nm?2?//?隱含層神經元的個數?
#define?No?1?//?輸出層神經元的個數
#define?Enom?0.02?//?誤差下限,達到這個誤差以內即可認為訓練成功
#define?MAXSAMPLE?1000?//?樣本的最大個數
#define?BP_LEARNING (float)(0.5) //?學習系數
//?輸入層神經元只有傳遞的功能
float?HWeight[Ni+1][Nm];?//?隱含層神經元的輸入權值
float?OWeight[Nm+1][No];?//?輸出層神經元的輸出權值
float?inputValue[Ni];
float?destValue[No];
float?E;?//?每輪的誤差
//?訓練的過程
int?train(float?in[Ni]float?d[No]);
//?神經網絡初始化
void?init();
//?測試的過程
int?processTest(float?in[Ni]);
//Sigmoid函數
float?Sigmoid(float?num);
int?main()?
{
float?input[MAXSAMPLE][Ni];?//?輸入
float?dest[MAXSAMPLE][No];?//?目標輸出
float?test[Ni];?//?測試輸入
int?num;
int?ij;
long?count=0;
//?輸入相關的測試
printf(“Please?input?the?number?of?sample:“);
scanf(“%d“&num);
for(i=0;i {
for(j=0;j scanf(“%f“&input[i][j]);
for(j=0;j scanf(“%f“&dest[i][j]);
}
init();
while(1)
{
E=0;
for(i=0;i {
train(input[i]dest[i]);
}
if(E break;
if(count%20000==0)
printf(“第%d迭代的誤差為?%f?\n“countE);
count++;
}
//?訓練好的神經網絡測試
while(1)
{
printf(“Please?input?the?test?data:“);
for(i=0;i scanf(“%f“&test[i]);
processTest(test);
}
return?1;
}
//?測試的過程
int?processTest(float?in[Ni])
{
int?ij;
float?net[Nm]iin[Nm]out[No];
//?計算隱含層的神經元值
for(i=0;i {
net[i]=1*HWeight[0][i];
for(j=1;j net[i]+=HWeight[j][i]*in[j-1];
}
//?使用S函數
for(i=0;i iin[i]=Sigmoid(net[i]);
//?計算輸出層的值
for(i=0;i {
net[i]=1*OWeight[0][i];
for(j=1;j
評論
共有 條評論