📄 bpanndlg.cpp
字号:
{
outQuanFile<<Wp[io1*Innodes+jo1]<<",";
}
outQuanFile<<"\n";
}//取得输入层至第一隐层权值Wp
outQuanFile.close();
//~输出文本文件
//=====================================
//状态显示
m_state.Format("权值初始化完成!%2.4f,%2.4f\r\n",Yout[0],Yout[1]);
UpdateData(false);
//按钮允许
GetDlgItem(IDC_BPANNSAVE)->EnableWindow(true);
}
//=========================~Train============================================
void CBpAnnDlg::OnBpannsave()
{
// TODO: Add your control notification handler code here
//状态显示
m_state.Format("保存当前已经训练好的神经网络.\r\n");
UpdateData(false);
}
void CBpAnnDlg::InitDataTrans(int in_nodes, int hide_layer, int hide_nodes, int out_nodes, double learn_ratio)
{
Innodes=in_nodes;
Hidelayer=hide_layer;
Hidenodes=hide_nodes;
Outnodes=out_nodes;
Learnratio=learn_ratio;
}
void CBpAnnDlg::InitWeights(double *pWp, double *pVp)
{
int test=0;
//初始化输入层权值
for(int iw=0;iw<Hidenodes;iw++)
{
for(int jw=0;jw<Innodes;jw++)
{
pWp[iw*Innodes+jw] = double(rand()%100); //产生0~100
pWp[iw*Innodes+jw] = pWp[iw*Innodes+jw]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pWp[iw*Innodes+jw] = -pWp[iw*Innodes+jw];
test ++;
}
//Wp[i][j]<0?printf("%.3f ",Wp[i][j]):printf(" %.3f ",Wp[i][j]);
}
//printf("\n");
}
//初始化输出层权值
for(int iv=0;iv<Outnodes;iv++)
{
for(int jv=0;jv<Hidenodes;jv++)
{
pVp[iv*Hidenodes+jv] = double(rand()%100); //产生0~100
pVp[iv*Hidenodes+jv] = pVp[iv*Hidenodes+jv]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pVp[iv*Hidenodes+jv] = -pVp[iv*Hidenodes+jv];
test ++;
}
//Wp[i][j]<0?printf("%.3f ",Wp[i][j]):printf(" %.3f ",Wp[i][j]);
}
//printf("\n");
}
}
void CBpAnnDlg::InitWeights(double *pWp, double *pVp, double *pYp1)
{
int test=0;
//初始化输入层权值
for(int iw=0;iw<Hidenodes;iw++)
{
for(int jw=0;jw<Innodes;jw++)
{
pWp[iw*Innodes+jw] = double(rand()%100); //产生0~100
pWp[iw*Innodes+jw] = pWp[iw*Innodes+jw]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pWp[iw*Innodes+jw] = -pWp[iw*Innodes+jw];
test ++;
}
//Wp[i][j]<0?printf("%.3f ",Wp[i][j]):printf(" %.3f ",Wp[i][j]);
}
//printf("\n");
}
//初始化输出层权值
for(int iv=0;iv<Outnodes;iv++)
{
for(int jv=0;jv<Hidenodes;jv++)
{
pVp[iv*Hidenodes+jv] = double(rand()%100); //产生0~100
pVp[iv*Hidenodes+jv] = pVp[iv*Hidenodes+jv]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pVp[iv*Hidenodes+jv] = -pVp[iv*Hidenodes+jv];
test ++;
}
//Wp[i][j]<0?printf("%.3f ",Wp[i][j]):printf(" %.3f ",Wp[i][j]);
}
//printf("\n");
}
//初始化隐层1权值
for(int ih1=0;ih1<Hidenodes;ih1++)
{
for(int jh1=0;jh1<Hidenodes;jh1++)
{
pYp1[ih1*Hidenodes+jh1] = double(rand()%100); //产生0~100
pYp1[ih1*Hidenodes+jh1] = pYp1[ih1*Hidenodes+jh1]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pYp1[ih1*Hidenodes+jh1] = -pYp1[ih1*Hidenodes+jh1];
test ++;
}
//Wp[i][j]<0?printf("%.3f ",Wp[i][j]):printf(" %.3f ",Wp[i][j]);
}
//printf("\n");
}
}
void CBpAnnDlg::InitWeights(double *pWp, double *pVp, double *pYp1, double *pYp2)
{
int test=0;
//初始化输入层权值
for(int iw=0;iw<Hidenodes;iw++)
{
for(int jw=0;jw<Innodes;jw++)
{
pWp[iw*Innodes+jw] = double(rand()%100); //产生0~100
pWp[iw*Innodes+jw] = pWp[iw*Innodes+jw]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pWp[iw*Innodes+jw] = -pWp[iw*Innodes+jw];
test ++;
}
//Wp[i][j]<0?printf("%.3f ",Wp[i][j]):printf(" %.3f ",Wp[i][j]);
}
//printf("\n");
}
//初始化输出层权值
for(int iv=0;iv<Outnodes;iv++)
{
for(int jv=0;jv<Hidenodes;jv++)
{
pVp[iv*Hidenodes+jv] = double(rand()%100); //产生0~100
pVp[iv*Hidenodes+jv] = pVp[iv*Hidenodes+jv]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pVp[iv*Hidenodes+jv] = -pVp[iv*Hidenodes+jv];
test ++;
}
//Wp[i][j]<0?printf("%.3f ",Wp[i][j]):printf(" %.3f ",Wp[i][j]);
}
//printf("\n");
}
//初始化隐层1权值
for(int ih1=0;ih1<Hidenodes;ih1++)
{
for(int jh1=0;jh1<Hidenodes;jh1++)
{
pYp1[ih1*Hidenodes+jh1] = double(rand()%100); //产生0~100
pYp1[ih1*Hidenodes+jh1] = pYp1[ih1*Hidenodes+jh1]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pYp1[ih1*Hidenodes+jh1] = -pYp1[ih1*Hidenodes+jh1];
test ++;
}
//Wp[i][j]<0?printf("%.3f ",Wp[i][j]):printf(" %.3f ",Wp[i][j]);
}
//printf("\n");
}
//初始化隐层2权值
for(int ih2=0;ih2<Hidenodes;ih2++)
{
for(int jh2=0;jh2<Hidenodes;jh2++)
{
pYp2[ih2*Hidenodes+jh2] = double(rand()%100); //产生0~100
pYp2[ih2*Hidenodes+jh2] = pYp2[ih2*Hidenodes+jh2]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pYp2[ih2*Hidenodes+jh2] = -pYp2[ih2*Hidenodes+jh2];
test ++;
}
//Wp[i][j]<0?printf("%.3f ",Wp[i][j]):printf(" %.3f ",Wp[i][j]);
}
//printf("\n");
}
}
void CBpAnnDlg::InitWeights(double *pWp, double *pVp, double *pYp1, double *pYp2, double *pYp3)
{
int test=0;
//初始化输入层权值
for(int iw=0;iw<Hidenodes;iw++)
{
for(int jw=0;jw<Innodes;jw++)
{
pWp[iw*Innodes+jw] = double(rand()%100); //产生0~100
pWp[iw*Innodes+jw] = pWp[iw*Innodes+jw]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pWp[iw*Innodes+jw] = -pWp[iw*Innodes+jw];
test ++;
}
//Wp[i][j]<0?printf("%.3f ",Wp[i][j]):printf(" %.3f ",Wp[i][j]);
}
//printf("\n");
}
//初始化输出层权值
for(int iv=0;iv<Outnodes;iv++)
{
for(int jv=0;jv<Hidenodes;jv++)
{
pVp[iv*Hidenodes+jv] = double(rand()%100); //产生0~100
pVp[iv*Hidenodes+jv] = pVp[iv*Hidenodes+jv]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pVp[iv*Hidenodes+jv] = -pVp[iv*Hidenodes+jv];
test ++;
}
//Wp[i][j]<0?printf("%.3f ",Wp[i][j]):printf(" %.3f ",Wp[i][j]);
}
//printf("\n");
}
//初始化隐层1权值
for(int ih1=0;ih1<Hidenodes;ih1++)
{
for(int jh1=0;jh1<Hidenodes;jh1++)
{
pYp1[ih1*Hidenodes+jh1] = double(rand()%100); //产生0~100
pYp1[ih1*Hidenodes+jh1] = pYp1[ih1*Hidenodes+jh1]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pYp1[ih1*Hidenodes+jh1] = -pYp1[ih1*Hidenodes+jh1];
test ++;
}
//Wp[i][j]<0?printf("%.3f ",Wp[i][j]):printf(" %.3f ",Wp[i][j]);
}
//printf("\n");
}
//初始化隐层2权值
for(int ih2=0;ih2<Hidenodes;ih2++)
{
for(int jh2=0;jh2<Hidenodes;jh2++)
{
pYp2[ih2*Hidenodes+jh2] = double(rand()%100); //产生0~100
pYp2[ih2*Hidenodes+jh2] = pYp2[ih2*Hidenodes+jh2]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pYp2[ih2*Hidenodes+jh2] = -pYp2[ih2*Hidenodes+jh2];
test ++;
}
//Wp[i][j]<0?printf("%.3f ",Wp[i][j]):printf(" %.3f ",Wp[i][j]);
}
//printf("\n");
}
//初始化隐层3权值
for(int ih3=0;ih3<Hidenodes;ih3++)
{
for(int jh3=0;jh3<Hidenodes;jh3++)
{
pYp3[ih3*Hidenodes+jh3] = double(rand()%100); //产生0~100
pYp3[ih3*Hidenodes+jh3] = pYp3[ih3*Hidenodes+jh3]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pYp3[ih3*Hidenodes+jh3] = -pYp3[ih3*Hidenodes+jh3];
test ++;
}
//Wp[i][j]<0?printf("%.3f ",Wp[i][j]):printf(" %.3f ",Wp[i][j]);
}
//printf("\n");
}
}
void CBpAnnDlg::InitWeights(double *pWp, double *pVp, double *pYp1, double *pYp2, double *pYp3, double *pYp4)
{
int test=0;
//初始化输入层权值
for(int iw=0;iw<Hidenodes;iw++)
{
for(int jw=0;jw<Innodes;jw++)
{
pWp[iw*Innodes+jw] = double(rand()%100); //产生0~100
pWp[iw*Innodes+jw] = pWp[iw*Innodes+jw]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pWp[iw*Innodes+jw] = -pWp[iw*Innodes+jw];
test ++;
}
//Wp[i][j]<0?printf("%.3f ",Wp[i][j]):printf(" %.3f ",Wp[i][j]);
}
//printf("\n");
}
//初始化输出层权值
for(int iv=0;iv<Outnodes;iv++)
{
for(int jv=0;jv<Hidenodes;jv++)
{
pVp[iv*Hidenodes+jv] = double(rand()%100); //产生0~100
pVp[iv*Hidenodes+jv] = pVp[iv*Hidenodes+jv]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pVp[iv*Hidenodes+jv] = -pVp[iv*Hidenodes+jv];
test ++;
}
//Wp[i][j]<0?printf("%.3f ",Wp[i][j]):printf(" %.3f ",Wp[i][j]);
}
//printf("\n");
}
//初始化隐层1权值
for(int ih1=0;ih1<Hidenodes;ih1++)
{
for(int jh1=0;jh1<Hidenodes;jh1++)
{
pYp1[ih1*Hidenodes+jh1] = double(rand()%100); //产生0~100
pYp1[ih1*Hidenodes+jh1] = pYp1[ih1*Hidenodes+jh1]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pYp1[ih1*Hidenodes+jh1] = -pYp1[ih1*Hidenodes+jh1];
test ++;
}
//Wp[i][j]<0?printf("%.3f ",Wp[i][j]):printf(" %.3f ",Wp[i][j]);
}
//printf("\n");
}
//初始化隐层2权值
for(int ih2=0;ih2<Hidenodes;ih2++)
{
for(int jh2=0;jh2<Hidenodes;jh2++)
{
pYp2[ih2*Hidenodes+jh2] = double(rand()%100); //产生0~100
pYp2[ih2*Hidenodes+jh2] = pYp2[ih2*Hidenodes+jh2]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pYp2[ih2*Hidenodes+jh2] = -pYp2[ih2*Hidenodes+jh2];
test ++;
}
//Wp[i][j]<0?printf("%.3f ",Wp[i][j]):printf(" %.3f ",Wp[i][j]);
}
//printf("\n");
}
//初始化隐层3权值
for(int ih3=0;ih3<Hidenodes;ih3++)
{
for(int jh3=0;jh3<Hidenodes;jh3++)
{
pYp3[ih3*Hidenodes+jh3] = double(rand()%100); //产生0~100
pYp3[ih3*Hidenodes+jh3] = pYp3[ih3*Hidenodes+jh3]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pYp3[ih3*Hidenodes+jh3] = -pYp3[ih3*Hidenodes+jh3];
test ++;
}
//Wp[i][j]<0?printf("%.3f ",Wp[i][j]):printf(" %.3f ",Wp[i][j]);
}
//printf("\n");
}
//初始化隐层4权值
for(int ih4=0;ih4<Hidenodes;ih4++)
{
for(int jh4=0;jh4<Hidenodes;jh4++)
{
pYp4[ih4*Hidenodes+jh4] = double(rand()%100); //产生0~100
pYp4[ih4*Hidenodes+jh4] = pYp4[ih4*Hidenodes+jh4]/1000; //产生0~0.1
int flag = rand()%2;
if(flag == 0)
{
pYp4[ih4*Hidenodes+jh4] = -pYp4[ih4*Hidenodes+jh4];
test ++;
}
//Wp[i][j]<0?printf("%.4f ",Wp[i][j]):printf(" %.4f ",Wp[i][j]);
}
//printf("\n");
}
}
void CBpAnnDlg::ForCalcul(double *pIn, double *pW, double *pOut, int nIn, int nOut)
{
int i,j;
double net;
for(j = 0; j < nOut; j++)
{
net = 0.0;
for(i = 0; i < nIn; i++)
{
net += pW[j*nIn+i]*pIn[i]; //输入层到隐层各个单元的加权和
}
pOut[j] = 1.0/(1.0+exp(-net)); //计算隐层个单元输出
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -