如何解决归一化神经网络中的权重
由于参数-> 权重过大,算术异常不断发生。 所以我决定将它们标准化。当我应用下面的代码时,准确率并没有那么高,在第一个 epoch 时大约为 20%。
我怎样才能更好地标准化体重?
我是否也必须对偏见做些什么?
我的最终目标是让权重变小。有没有比标准化更好的方法?
void normalize(int m,int n,double *A){
int i,j;
double sum=0;
for (i = 0; i < m; i++){
for (j = 0; j < n; j++){
sum += pow(A[i * n + j],2);
}
for (j = 0; j < n; j++){
A[i * n + j]=A[i * n + j]/(sqrt(sum));
}
}
}
void backward6(double *A1,double *A2,double *A3,const double *b1,const double *b2,const double *b3,const double *x,unsigned char t,double *y,double *dEdA1,double *dEdA2,double *dEdA3,double *dEdb1,double *dEdb2,double *dEdb3){
double * before_fc1 = malloc(sizeof(double) * 784);
double * before_fc2 = malloc(sizeof(double) * 50);
double * before_fc3 = malloc(sizeof(double) * 100);
double * before_relu1 = malloc(sizeof(double) * 50);
double * before_relu2 = malloc(sizeof(double) * 100);
double * y0 = malloc(sizeof(double) * 784);
double * y1 = malloc(sizeof(double) * 50);
double * y2 = malloc(sizeof(double) * 100);
double *y3 = malloc(sizeof(double) * 10);
//順伝播
copy(1,784,x,before_fc1);
normalize(50,A1);
fc(50,A1,b1,before_relu1);
relu(50,before_relu1,before_fc2);
normalize(100,50,A2);
fc(100,before_fc2,A2,b2,before_relu2);
relu(100,before_relu2,before_fc3);
normalize(10,100,A3);
fc(10,before_fc3,A3,b3,y);
softmax(10,y,y);
//逆伝播
softmaxwithloss_bwd(10,t,y3);
fc_bwd(10,y3,dEdA3,dEdb3,y2);
relu_bwd(100,y2,y2);
fc_bwd(100,dEdA2,dEdb2,y1);
relu_bwd(50,y1,y1);
fc_bwd(50,before_fc1,dEdA1,dEdb1,y0);
//メモリ解放
free(y0);free(y1);free(y2);free(y3);
free(before_fc1);free(before_fc2);free(before_fc3);
free(before_relu1);free(before_relu2);
}
//6層による推論を行い、得られた結果[0:9]を返す
int inference6(const double *A1,const double *A2,const double *A3,double * y){
double * y1 = malloc(sizeof(double) * 50);
double * y2 = malloc(sizeof(double) * 100);
fc(50,y1);
relu(50,y1);
fc(100,y2);
relu(100,y2);
fc(10,y);
double max = y[0]; //yの要素の最大のもの
int index = 0; //yの要素が最大の時の添字
int i;
for (i = 0; i < 10; i++){
if (y[i] > max){
max = y[i];
index = i;
}
}
free(y1);
free(y2);
return index;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。