资源简介

将模拟退火算法应用于神经网络中,可解决神经网络算法易陷入局部极小和收敛速度慢的问题

资源截图

代码片段和文件信息

// shengjingnet.cpp : 定义控制台应用程序的入口点。

#include “stdafx.h“

#define INput 7     //输入特征参数的种类
#define OUTput 4     //所分类别的个数
#define TrainNum 40  //共多少个训练数据

int t=0;
double EfrontTT0;
#define M  pow(float(10)6)*4 //循环次数

#include “backprop.h“

double **traindata;
int class_num[TrainNum];



void Data_Get()
{
traindata=alloc_2d_dbl(TrainNumINput);
char str[1000];
int i=0j;
FILE *f;
char* pNext;
f=fopen(“TrainData.txt““r“);
if(f==NULL)
{
printf(“Errorfile don‘t open\n“);
}
while(!feof(f))
{
fgets(str1000f);
class_num[i]=atoi(str);
pNext=str;
for(j=0;j {
pNext=strchr(pNext+1‘‘);
traindata[i][j]=atof(pNext+1);
}
i++;
}
fclose(f);
}
void Data_Deal(double maxt[INput]double mint[INput])
{
int ij;
for(i=0;i {
maxt[i]=mint[i]=traindata[0][i];
for(j=0;j {
if(maxt[i] {
maxt[i]=traindata[j][i];
}
if(mint[i]>traindata[j][i])
{
                mint[i]=traindata[j][i];
}
}
for(j=0;j {
//traindata[j][i]=(traindata[j][i]-mint[i])/(maxt[i]-mint[i]);
traindata[j][i]=2*(traindata[j][i]-mint[i])/(maxt[i]-mint[i])-1;
}

}
}

void output_result(BPNN *newl)
{
double *Nout;
int i;
    Nout = (double *) malloc ((unsigned) ((OUTput+1) * sizeof (double)));
    if (Nout == NULL) {
                     printf(“ALLOC_1D_DBL: Couldn‘t allocate array of doubles\n“);
                       }
    int ONE=0ZERO=0;
    int NUM;

for(i=1;i<=OUTput;i++)
{
if(newl->output_units[i]<0.5)
{
Nout[i]=0;
}
if(newl->output_units[i]>0.5)
{
Nout[i]=1;
}
if(newl->output_units[i]==0.5)
{
Nout[i]=-1;
}
}

for(i=1;i<=OUTput;i++)
{
if(Nout[i]==1)
{
ONE=ONE+1;
NUM=i;
}
if(Nout[i]==0)
{
ZERO=ZERO+1;
}
if(Nout[i]==-1)
{
printf(“无法判别其所属类别“);
break;
}
}
if(ONE==1 && ZERO>=1)
{
printf(“判断其属于第 %d 类\n“NUM);
}
else
{
printf(“无法判别其所属的类别\n“);
}
free(Nout);
Nout=NULL;

for(i=1;i<=OUTput;i++)
{
printf(“输出为:%3f \n“newl->output_units[i]);
}

}

int _tmain(int argc _TCHAR* argv[])
{

BPNN *net;
BPNN *news;
bpnn_initialize(0);
int ijn;
int hid_num;
double maxs[INput];
double mins[INput];

//hid_num=sqrtf(INput+OUTput)+1; //隐含层神经元个数可调节公式,其中常数可以取1到10之间
hid_num=sqrtf(0.43*INput*OUTput+0.12*OUTput*OUTput+2.54*INput+0.77*OUTput+0.35+0.51);

net=bpnn_create(INputhid_numOUTput);
news = bpnn_internal_create(INputhid_numOUTput);
    Data_Get();
Data_Deal(maxsmins);


for(j=0;j {
net->input_units[j+1]=traindata[0][j];  //将训练数据输入神经网络
}
//输入训练数据应该所属的类别
n=class_num[0];
for(j=1;j<=OUTput;j++)
{
if(j==n)
{
net->target[j]=1;
}
else
{
net->target[j]=0;
}
}
if(t==0)
{
simulated_annealing_Init(net);
}

    //根据traindata中的数据训练神经网络
    while(1) 
         

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      88576  2013-06-06 15:59  SA_BPnet_train\Debug\shengjingnet.exe

     文件    1242756  2013-06-06 15:59  SA_BPnet_train\Debug\shengjingnet.ilk

     文件    1010688  2013-06-06 15:59  SA_BPnet_train\Debug\shengjingnet.pdb

     文件    2359296  2013-06-07 09:37  SA_BPnet_train\ipch\shengjingnet-920f2d2f\shengjingnet-53889310.ipch

     文件      11877  2013-06-07 09:45  SA_BPnet_train\shengjingnet\backprop.h

     文件       1530  2013-06-06 15:59  SA_BPnet_train\shengjingnet\Debug\cl.command.1.tlog

     文件       8498  2013-06-06 15:59  SA_BPnet_train\shengjingnet\Debug\CL.read.1.tlog

     文件        882  2013-06-06 15:59  SA_BPnet_train\shengjingnet\Debug\CL.write.1.tlog

     文件          2  2013-06-06 15:59  SA_BPnet_train\shengjingnet\Debug\link-cvtres.read.1.tlog

     文件          2  2013-06-06 15:59  SA_BPnet_train\shengjingnet\Debug\link-cvtres.write.1.tlog

     文件          2  2013-06-06 15:59  SA_BPnet_train\shengjingnet\Debug\link.5236-cvtres.read.1.tlog

     文件          2  2013-06-06 15:59  SA_BPnet_train\shengjingnet\Debug\link.5236-cvtres.write.1.tlog

     文件          2  2013-06-06 15:59  SA_BPnet_train\shengjingnet\Debug\link.5236.read.1.tlog

     文件          2  2013-06-06 15:59  SA_BPnet_train\shengjingnet\Debug\link.5236.write.1.tlog

     文件       2500  2013-06-06 15:59  SA_BPnet_train\shengjingnet\Debug\link.command.1.tlog

     文件       4810  2013-06-06 15:59  SA_BPnet_train\shengjingnet\Debug\link.read.1.tlog

     文件        944  2013-06-06 15:59  SA_BPnet_train\shengjingnet\Debug\link.write.1.tlog

     文件        420  2013-06-06 15:59  SA_BPnet_train\shengjingnet\Debug\mt.command.1.tlog

     文件        350  2013-06-06 15:59  SA_BPnet_train\shengjingnet\Debug\mt.read.1.tlog

     文件        350  2013-06-06 15:59  SA_BPnet_train\shengjingnet\Debug\mt.write.1.tlog

     文件        590  2013-06-06 11:14  SA_BPnet_train\shengjingnet\Debug\rc.command.1.tlog

     文件        322  2013-06-06 11:14  SA_BPnet_train\shengjingnet\Debug\rc.read.1.tlog

     文件        330  2013-06-06 11:14  SA_BPnet_train\shengjingnet\Debug\rc.write.1.tlog

     文件        406  2013-06-06 11:14  SA_BPnet_train\shengjingnet\Debug\shengjingnet.exe.embed.manifest

     文件        472  2013-06-06 11:14  SA_BPnet_train\shengjingnet\Debug\shengjingnet.exe.embed.manifest.res

     文件        381  2013-06-06 15:59  SA_BPnet_train\shengjingnet\Debug\shengjingnet.exe.intermediate.manifest

     文件         58  2013-06-06 15:59  SA_BPnet_train\shengjingnet\Debug\shengjingnet.lastbuildstate

     文件       3308  2013-06-06 15:59  SA_BPnet_train\shengjingnet\Debug\shengjingnet.log

     文件     204742  2013-06-06 15:59  SA_BPnet_train\shengjingnet\Debug\shengjingnet.obj

     文件    1179648  2013-06-06 11:14  SA_BPnet_train\shengjingnet\Debug\shengjingnet.pch

............此处省略39个文件信息

评论

共有 条评论