📄 bpnet.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "UTLab.h"
//BP神经网络
#define n1 7 //输入节点数
#define n2 11 //中间层节点个数
#define n3 5 //输出节点数
#define m 400 //学习次数
void initialization(){
}
float bpnet(float tension, float inthick,float outthick, float meng, float tan,float ping,float tu)
{
float in1[n1];
float out1[n2];
float out2[n3];
float w1[n2][n1];
float w2[n3][n2];
float a1[n2];
float a2[n3];
float t[n3];
float df1[n2];
float df2[n3];
float s2[n3];
float s1[n2];
float w[n2][n3];
float z[n2][n3];
float a=0.5;
int i=0;
int j=0;
int k=0;
int n=0;
in1[1]=tension;
in1[2]=inthick;
in1[3]=outthick;
in1[4]=meng;
in1[5]=tan;
in1[6]=ping;
in1[7]=tu;
initialization();
for(n=1;n<=m;k++){
for(i=1;i<=n2;i++){
for(j=1;j<=n1;j++){
a1[j]=a1[j]+w1[i][j]*in1[j];
out1[j]=sigmoid(a1[j]);
}
}
for(i=1;i<=n3;i++){
for(j=1;j<=n2;j++){
a2[j]=a2[j]+w2[i][j]*in1[j];
out2[j]=a2[j];
}
}
for(i=1;i<=n3;i++){ //计算敏感度,更新权值
df2[i]=1;
s2[i]=-2*(t[i]-out2[i]);
for(j=1;j<=n2;j++){
w2[i][j]=w2[i][j]+a*out1[j];
}
}
for(i=1;i<=n3;i++){
for(j=1;j<=n2;j++){
w[j][i]=w2[i][j];
}
}
for(j=1;j<=n2;j++){
df1[j]=(1-out1[j])*out1[j];
s1[j]=0;
for(i=1;i<=n3;i++){
z[j][i]=df1[j]*w[j][i];
s1[j]=s1[j]+z[j][i]*s2[i];
}
}
for(j=1;j<=n2;j++){
for(k=1;k<=n1;k++){
w1[j][k]=w1[j][k]+a*s1[j]*in1[k];
}
}
}
return out2[n3];
}
void main()
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -