nn_init_generator.c
来自「一个不错的GA-NN的神经网络模型的示范代码。适合入门学习」· C语言 代码 · 共 265 行
C
265 行
/* nn_init_generator.c *//* Copyright 2004-2007 Oswaldo Morizaki *//* This file is part of ga-nn-ag. ga-nn-ag is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. ga-nn-ag is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with ga-nn-ag; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA*/#include "my_header.h"#include "aux_prot.h"/*argc=variableargv=name init_file alpha conv_rat bias_corr delta_type momentum bias num1 num2 ...*/int main(int argc, char * argv[]){ FILE * file_ptr; int k,l,m; int * num_elem_layer; int num_neuron=0,num_layer; int counter; float alpha; float conv_rat; int bias_corr; int delta_type; int momentum; float bias; int num_con; float range; if (argc < 9) { printf("Too few arguments\nUsage: %s ",argv[0]); printf("init_file alpha conv_rat bias_corr delta_type momentum bias num1 ...\n"); return(1); } openlog("nn_init_gen",LOG_PID,LOG_LOCAL3); strncpy(char_buffer,argv[1],BUFFSIZE); if(!strncmp("r",argv[2],1)) { alpha=rand_gen(argc); } else if (strncmp("rr",argv[2],2)) { alpha=atof(argv[2]); } if(!strncmp("r",argv[3],1)) { conv_rat=rand_gen(argc+1); } else if (strncmp("rr",argv[3],2)) { conv_rat=atof(argv[3]); } if(!strncmp("r",argv[4],1)) { bias_corr=coin_toss(argc+2); } else if (strncmp("rr",argv[4],2)) { bias_corr=atoi(argv[4]); } if(!strncmp("r",argv[5],1)) { delta_type=dice_toss(bias_corr+argc,2); } else if (strncmp("rr",argv[5],2)) { delta_type=atoi(argv[5]); } if(!strncmp("r",argv[6],1)) { momentum=coin_toss(bias_corr+delta_type+argc); } else if (strncmp("rr",argv[6],2)) { momentum=atoi(argv[6]); } if(!strncmp("r",argv[7],1)) { bias=rand_gen(delta_type+momentum+bias_corr+argc); } else if (strncmp("rr",argv[7],2)) { bias=atof(argv[7]); } num_elem_layer = (int *)calloc(argc-8,sizeof(int)); num_layer=argc-8; range=1.0/(num_layer-1); for(k=8;k<argc;k++) { *(num_elem_layer+k-8)=atoi(argv[k]); num_neuron += *(num_elem_layer+k-8); } syslog(LOG_INFO,"num_layer: %d num_neuron: %d",num_layer,num_neuron); unlink(char_buffer); file_ptr=fopen(char_buffer,"w"); sprintf(char_buffer,"neuron_array\n"); fputs(char_buffer,file_ptr); sprintf(char_buffer,"num_neuron=%d\n",num_neuron); fputs(char_buffer,file_ptr); for (k=0;k<num_elem_layer[0]; k++) { sprintf(char_buffer,"neuron %d\n",k); fputs(char_buffer,file_ptr); sprintf(char_buffer,"alpha=%f\n",0.0); fputs(char_buffer,file_ptr); sprintf(char_buffer,"conv_rate=%f\n",0.0); fputs(char_buffer,file_ptr); sprintf(char_buffer,"bias_corr=%d\n",0); fputs(char_buffer,file_ptr); sprintf(char_buffer,"delta_type=%d\n",0); fputs(char_buffer,file_ptr); sprintf(char_buffer,"momentum=%d\n",0); fputs(char_buffer,file_ptr); sprintf(char_buffer,"x_c=%1.15f\n",0.0); fputs(char_buffer,file_ptr); sprintf(char_buffer,"y_c=%1.15f\n",(k+0.5)*(1.0)/( *num_elem_layer )); fputs(char_buffer,file_ptr); sprintf(char_buffer,"range=%1.15f\n",range); fputs(char_buffer,file_ptr); sprintf(char_buffer,"num_con=%d\n",0); fputs(char_buffer,file_ptr); sprintf(char_buffer,"bias=%f\n",0.0); fputs(char_buffer,file_ptr); fputc('\n',file_ptr); } counter=k; for (k=1;k<num_layer;k++) { for (l=0;l < *(num_elem_layer+k); l++) { sprintf(char_buffer,"neuron %d\n",counter); fputs(char_buffer,file_ptr); counter ++; if (!strncmp("rr",argv[2],2)) { sprintf(char_buffer,"alpha=%f\n",rand_gen(counter)); } else { sprintf(char_buffer,"alpha=%f\n",alpha); } fputs(char_buffer,file_ptr); if (!strncmp("rr",argv[3],2)) { sprintf(char_buffer,"conv_rate=%f\n",rand_gen(counter+1)); } else { sprintf(char_buffer,"conv_rate=%f\n",conv_rat); } fputs(char_buffer,file_ptr); if (!strncmp("rr",argv[4],2)) { sprintf(char_buffer,"bias_corr=%d\n",coin_toss(counter+2)); } else { sprintf(char_buffer,"bias_corr=%d\n",bias_corr); } fputs(char_buffer,file_ptr); if (!strncmp("rr",argv[5],2)) { sprintf(char_buffer,"delta_type=%d\n",dice_toss(counter+3,2)); } else { sprintf(char_buffer,"delta_type=%d\n",delta_type); } fputs(char_buffer,file_ptr); if (!strncmp("rr",argv[6],2)) { sprintf(char_buffer,"momentum=%d\n",coin_toss(counter+4)); } else { sprintf(char_buffer,"momentum=%d\n",momentum); } fputs(char_buffer,file_ptr); sprintf(char_buffer,"x_c=%1.15f\n",k*(1.0)/(num_layer-1)); fputs(char_buffer,file_ptr); sprintf(char_buffer,"y_c=%1.15f\n",(l+0.5)*(1.0)/( num_elem_layer[k] )); fputs(char_buffer,file_ptr); sprintf(char_buffer,"range=%1.15f\n",range); fputs(char_buffer,file_ptr); num_con=num_elem_layer[k-1]; sprintf(char_buffer,"num_con=%d\n",num_elem_layer[k-1]); fputs(char_buffer,file_ptr); if (!strncmp("rr",argv[7],2)) { sprintf(char_buffer,"bias=%f\n",rand_gen(counter+5)); } else { sprintf(char_buffer,"bias=%f\n",bias); } fputs(char_buffer,file_ptr); for(m=0;m<num_con;m++) { sprintf(char_buffer,"%1.15f:%1.15f:%f:%d\n",(k-1)*1.0/(num_layer-1), (m+0.5)*1.0/(num_elem_layer[k-1]),rand_gen(counter+m),0); fputs(char_buffer,file_ptr); } fputc('\n',file_ptr); } } fclose(file_ptr); exit(0);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?