package ren;
public class rev {
int number;
int number_var;
int number_step;
double[] beta=new double[5];
double[][] alpha=new double[5][5];
double[][][] theta=new double[6][5][5];
double[][] x=new double[101][3];
int[] y=new int[101];
double[][] enc=new double[7][5];
double[][] dec=new double[7][5];
double[] beta_op=new double[5];
double[][] enc_op=new double[7][5];
double[][] dec_op=new double[7][5];
int[][] esx=new int[7][101];
int[][] esxs=new int[7][101];
void makedata(){
int eq,s,v,tr;
int[][] e=new int[5][101];
int[][] es=new int[5][101];
for(eq=1;eq<number_var+1;eq++){
for(s=1;s<number+1;s++){
double z=alpha[eq][0];
for(v=1;v<number_var+1;v++){
z=z+alpha[eq][v]*x[s][v];
}
es[eq][s]=0;
if(z>0)es[eq][s]=1;
}
}
for(tr=1;tr<number_step+1;tr++){
for(eq=1;eq<number_var+1;eq++){
for(s=1;s<number+1;s++){
e[eq][s]=es[eq][s];
}}
for(eq=1;eq<number_var+1;eq++){
for(s=1;s<number+1;s++){
double z=theta[tr][eq][0];
for(v=1;v<number_var+1;v++){
z=z+theta[tr][eq][v]*e[v][s];
}
es[eq][s]=0;
if(z>0)es[eq][s]=1;
}
}
}
for(eq=1;eq<number_var+1;eq++){
for(s=1;s<number+1;s++){
e[eq][s]=es[eq][s];
}}
for(eq=1;eq<number_var;eq++){
for(s=1;s<number+1;s++){
double z=enc[eq][0];
for(v=1;v<number_var;v++){
z=z+enc[eq][v]*e[v][s];
}
es[eq][s]=0;
if(z>0)es[eq][s]=1;
}
}
double maxg=999;
for(tr=1;tr<101;tr++){
double g1;
nn_rev sub=new nn_rev();
sub.es=es;
sub.y=y;
sub.number_var=number_var;
sub.number=number;
g1=sub.makedata();
beta=sub.beta;
int sx;
if(g1<maxg){maxg=g1;
for(sx=0;sx<number_var;sx++){
beta_op[sx]=beta[sx];
}
}
}
System.out.println(maxg);
}
}
package ren;
public class f_rev {
double[] op=new double[101];
double[][] e=new double[5][101];
int[][] es=new int[5][101];
int number;
int number_step;
int number_var;
double[] beta=new double[5];
double[][] alpha=new double[5][5];
double[][][] theta=new double[3][5][5];
int[] y=new int[101];
double[][] x=new double[101][5];
int s,sx,tr;
double makedata(){
for(s=1;s<number+1;s++){
double z=beta[0];
for(sx=1;sx<number_var;sx++){
z=z+beta[sx]*es[sx][s];
}
op[s]=1/(1+Math.exp(-z));
}
double don=0;
for(s=1;s<number+1;s++){
don=don+(op[s]-y[s])*(op[s]-y[s]);
}
return don;
}
}
package ren;
public class nn_rev {
int number;
int number_step;
int number_var;
double[] beta=new double[5];
double[][] alpha=new double[5][5];
double[][][] theta=new double[6][5][5];
int[] y=new int[101];
double[][] x=new double[101][4];
int s,sx,tr;
double[][] a=new double[7][5];
double[][] dalpha=new double[7][5];
double[] b=new double[5];
double[] dbeta=new double[5];
double[][] dtheta=new double[5][5];
double[][][] th=new double[6][5][5];
int[][] es=new int[5][101];
double makedata(){
int q,s,sx;
beta[0]=-Math.random();
for(sx=1;sx<number_var;sx++){
beta[sx]=Math.random();
}
double g1=0;
double g2;
int trial=0;
while(trial<50){
trial=trial+1;
f_rev sub=new f_rev();
sub.es=es;
sub.y=y;
sub.number_var=number_var;
sub.number=number;
sub.beta=beta;
g1=sub.makedata();
int m;
for(m=0;m<number_var;m++){
fresh();
double h=0.01;
b[m]=b[m]+h;
f_rev sub2=new f_rev();
sub2.y=y;
sub2.number_var=number_var;
sub2.number=number;
sub2.beta=b;
sub2.es=es;
g2=sub2.makedata();
dbeta[m]=(g2-g1)/h;
}
int eq;
double sig=0;
for(m=0;m<number_var;m++){
sig=sig+dbeta[m]*dbeta[m];
}
for(m=0;m<number_var;m++){
b[m]=beta[m]-0.01*g1*dbeta[m]/sig;
}
f_rev sub4=new f_rev();
sub4.y=y;
sub4.es=es;
sub4.number_step=number_step;
sub4.number_var=number_var;
sub4.number=number;
sub4.beta=b;
g2=sub4.makedata();
if(g2<g1)refresh();
if(g2>g1)trial=10000;
}
return g1;
}
void fresh(){
int eq,m;
for(m=0;m<number_var+1;m++){
b[m]=beta[m];
}
}
void refresh(){
int eq,m;
for(m=0;m<number_var+1;m++){
beta[m]=b[m];
}
}
}
最終更新:2018年03月20日 23:37