亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? neuronet_bp.cpp

?? 該程序是BP神經(jīng)網(wǎng)絡(luò)算法C++類定義及其說明;經(jīng)過調(diào)試??捎糜行Чぞ摺τ跈C(jī)器人開發(fā)非常好。
?? CPP
字號:
#include "StdAfx.h"
#include "neuronet_bp.h"
#include "math.h"

CNeuroNet_BP::CNeuroNet_BP()
{
}

CNeuroNet_BP::CNeuroNet_BP(INT NumLayer, INT* pNumNodeInEachLayer, CString  MyFileName)
{
	Alpha = 0.9;
	Eta = 0.45;
	Gain = 5;
	Error = 0;
	nLayer = NumLayer;
	pLayer = new NeuroLayer[nLayer];
	this->TrainTimes =0;
	fileName = MyFileName;

	//構(gòu)建網(wǎng)絡(luò)
	for(INT i=0; i<nLayer; i++)
	{
		pLayer[i].nNode = pNumNodeInEachLayer[i];
	}

	this->nInput = pLayer[0].nNode;

	//分配網(wǎng)絡(luò)變量空間
	this->GenerateNet();
	//隨機(jī)設(shè)定權(quán)值
	this->RandomWeight();
}

CNeuroNet_BP::~CNeuroNet_BP(void)
{
}


// 隨機(jī)賦權(quán)值
void CNeuroNet_BP::RandomWeight(void)
{
	srand(4567);
	for(INT i=0; i<nLayer; i++)
	{
		for(INT  j=0; j<pLayer[i].nNode; j++)
		{
			for(INT	 k=0; k<pLayer[i].nInput; k++)
			{
				pLayer[i].ppWeight[j][k] = (rand()%100-50)/100.0;		//隨機(jī)賦權(quán)值(-0.5, 0.5);
				pLayer[i].ppDWeight[j][k] = 0.0;
			}
		}
	}

}

// 從文件中讀取神經(jīng)網(wǎng)絡(luò)的權(quán)值
BOOL CNeuroNet_BP::ReadNetFromFile(void)
{

	CFile	file;
	if(file.Open(fileName, CFile::modeRead)==FALSE)
	{
		return FALSE;
	}

	char	*pChar = new char[10];
	file.Read((void*)pChar, 10);
	//if(pChar != "NeuroBP")
	//{
	//	return FALSE;
	//}
	file.Read((void*)&this->TrainTimes, sizeof(DWORD));
	file.Read((void*)&this->Error, sizeof(DOUBLE));
	file.Read((void*)&this->Alpha, sizeof(DOUBLE));
	file.Read((void*)&this->Eta, sizeof(DOUBLE));
	file.Read((void*)&this->Gain, sizeof(DOUBLE));
	file.Read((void*)&this->nInput, sizeof(INT));
	file.Read((void*)&this->nLayer, sizeof(INT));

	//讀出每層節(jié)點(diǎn)數(shù)
	INT*	pNumNode = new INT[nLayer];
	for(INT i=0; i<nLayer; i++)
	{
		file.Read((void*)&pNumNode[i], sizeof(INT));
	}

	///
	pLayer = new NeuroLayer[nLayer];
	for(INT i=0; i<nLayer; i++)
	{
		pLayer[i].nNode = pNumNode[i];
	}	
	this->GenerateNet();

	//給每個神經(jīng)元賦權(quán)值
	for(INT i=0; i<nLayer; i++)
	{
		for(INT j=0; j<pLayer[i].nNode; j++)
		{
			file.Read(pLayer[i].ppWeight[j], pLayer[i].nInput*sizeof(DOUBLE));	//讀出每層的所有權(quán)值
			file.Read(pLayer[i].ppDWeight[j], pLayer[i].nInput*sizeof(DOUBLE));	//讀出每層的所有權(quán)值
			//TRACE("pw[%d][%d][0]= %f", i, j, pLayer[i].ppWeight[j]);
		}
	}
    
	return TRUE;
}

// 把權(quán)值保存到文件
BOOL CNeuroNet_BP::SaveNetToFile(void)
{
	INT	nTemp = 0;

	char	ID[10] = "NeuroBP";
	//char	Memo[100] = "未說明"; 
    
	HANDLE hFile = CreateFile(_T(fileName),
         GENERIC_WRITE, FILE_SHARE_READ,
         NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

   if (hFile == INVALID_HANDLE_VALUE)
   {
      AfxMessageBox(_T("Couldn't create the file!"));
	  return FALSE;
   }

    // Attach a CFile object to the handle we have.
    CFile file(hFile);

	file.Write((void*)ID, 10);				//寫入文件類型標(biāo)記
	//file.Write((void*)Memo, 100);			//寫入描述參數(shù)
	file.Write((void*)&TrainTimes, sizeof(DWORD));		//寫入已訓(xùn)練次數(shù)
	file.Write((void*)&this->Error, sizeof(DOUBLE));	//寫入最近的系統(tǒng)誤差
	file.Write((void*)&this->Alpha, sizeof(DOUBLE));
	file.Write((void*)&this->Eta, sizeof(DOUBLE));
	file.Write((void*)&this->Gain, sizeof(DOUBLE));
	file.Write(&(this->nInput), sizeof(INT));		//寫入輸入數(shù)據(jù)寬度
	file.Write(&(this->nLayer), sizeof(INT));	

	//寫入每層節(jié)點(diǎn)數(shù)
	for(INT i=0; i<nLayer; i++)				
	{
		file.Write(&(pLayer[i].nNode), sizeof(INT));		
	}	

	//寫入每層所有節(jié)點(diǎn)的權(quán)值
	for(INT i=0; i<nLayer; i++)				
	{
		for(INT j=0; j<pLayer[i].nNode; j++)
		{
			file.Write(pLayer[i].ppWeight[j],  pLayer[i].nInput*sizeof(DOUBLE));
			file.Write(pLayer[i].ppDWeight[j],  pLayer[i].nInput*sizeof(DOUBLE));

			//TRACE("pw[%d][%d][0]= %f", i, j, pLayer[i].ppWeight[j]);
		}
	}

	file.Close();

	return TRUE;
}

// 處理輸入數(shù)據(jù),產(chǎn)生輸出
BOOL CNeuroNet_BP::Propagate( DOUBLE*  pInput)
{
	this->pInput = pInput;

	//計算輸出結(jié)果
	for(INT i=0; i<this->nLayer; i++)
	{
		if(i==0)
		{
			pLayer[i].pInput = this->pInput;
		}
		else
		{
			pLayer[i].pInput = pLayer[i-1].pOutput;
		}

		for(INT j=0; j<pLayer[i].nNode; j++)
		{
			pLayer[i].pOutput[j] = func(i, j);
			TRACE("pOut[%d][%d]=\t%f\t", i, j, pLayer[i].pOutput[j]);
	}
	}

	return TRUE;
}

// 節(jié)點(diǎn)轉(zhuǎn)移函數(shù)
DOUBLE  CNeuroNet_BP::func(INT i, INT j)
{
	DOUBLE	sigma = 0.0;
	for(INT k=0; k<pLayer[i].nInput; k++)
	{
		sigma = sigma + pLayer[i].pInput[k] * pLayer[i].ppWeight[j][k];
	}
	
	sigma = 1.0/(1.0 + exp(-sigma*this->Gain));
	return sigma;
}

//用樣本數(shù)據(jù)進(jìn)行訓(xùn)練
void  CNeuroNet_BP::Train(DOUBLE* pInput, DOUBLE* pTeach)
{
	Propagate(pInput);				//處理數(shù)據(jù)
	ComputeOutputError(pTeach);		//計算誤差
	BackPropagate();				//反向傳播,調(diào)整權(quán)值
	this->TrainTimes++;
}

//******************************************************************************
//                  反 向 傳 播   調(diào) 整 權(quán) 值
// *****************************************************************************
// 計算輸出誤差
void  CNeuroNet_BP::ComputeOutputError(DOUBLE*	pTarget)
{
  DOUBLE	Out, Err;
  this->Error=0;

  for(INT i=0; i<pLayer[nLayer-1].nNode; i++)
  {
	Out = pLayer[nLayer-1].pOutput[i];
	Err = pTarget[i] - Out;
	//this->pLayer[nLayer-1].pError[i] = Gain*Out*(1-Out)*Err;
	this->pLayer[nLayer-1].pError[i] = Out*(1-Out)*Err;
	this->Error += 0.5*pow(Err, 2);
  }
}


//反向傳播誤差
void CNeuroNet_BP::BackPropagate(void)
{
	DOUBLE Out, Err;

	//反向計算誤差
	for(INT i=nLayer-2; i>=0; i--)
	{
		for(INT j=0; j<pLayer[i].nNode; j++)
		{
			Out = pLayer[i].pOutput[j];
			Err = 0;

			for(INT k=0; k<pLayer[i+1].nNode; k++)
			{
				Err += pLayer[i+1].pError[k] * pLayer[i+1].ppWeight[k][j];
			}
			
			pLayer[i].pError[j] = Out * (1-Out) * Err;
		}
	}

	//調(diào)整權(quán)值
 	for(INT i=nLayer-1; i>=0; i--)		//層
	{
		for(INT j=0; j<pLayer[i].nNode; j++)
		{
			for(INT k=0; k<pLayer[i].nInput; k++)
			{
				//if(i==0)
				//{
				//	Out = pLayer[0].pInput[k];
				//}
				//else
				//{
					Out = pLayer[i].pInput[k];

				//}

				Err = pLayer[i].pError[j];
				pLayer[i].ppWeight[j][k] += this->Eta *Out*Err + this->Alpha*pLayer[i].ppDWeight[j][k];
				pLayer[i].ppDWeight[j][k] = this->Eta *Err * Out + this->Alpha*pLayer[i].ppDWeight[j][k];
			}
		}
	}
}



// 構(gòu)建網(wǎng)絡(luò),分配變量空間
void CNeuroNet_BP::GenerateNet(void)
{
	for(INT i=0; i<nLayer; i++)
	{
		if(i==0)
		{
			pLayer[i].nInput = this->nInput;
		}
		else
		{
			pLayer[i].nInput = pLayer[i-1].nNode;
		}

		pLayer[i].pOutput = new DOUBLE[pLayer[i].nNode];		//為輸出數(shù)據(jù)分配空間
		pLayer[i].pError = new DOUBLE[pLayer[i].nNode];			//為節(jié)點(diǎn)誤差分配空間
		pLayer[i].ppWeight = new DOUBLE*[pLayer[i].nNode ];		//給權(quán)值的指針分配空間
		pLayer[i].ppDWeight = new DOUBLE*[pLayer[i].nNode ];	//給權(quán)值增量分配空間

		for(INT j=0; j<pLayer[i].nNode; j++)
		{
			pLayer[i].ppWeight[j] = new DOUBLE[pLayer[i].nInput];		//給每個節(jié)點(diǎn)的權(quán)值分配空間
			pLayer[i].ppDWeight[j] = new DOUBLE[pLayer[i].nInput];		//給每個權(quán)值增量分配空間
		}
	}

	this->pOutput = pLayer[nLayer-1].pOutput;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区国产| 亚洲高清视频在线| 国产精品沙发午睡系列990531| 久久综合999| 7777精品伊人久久久大香线蕉| 成人激情动漫在线观看| 蜜桃视频一区二区| 99久久99精品久久久久久| 日本道色综合久久| 久久尤物电影视频在线观看| 亚洲一区精品在线| 精品一区二区在线免费观看| thepron国产精品| 欧美精品一区男女天堂| 午夜久久电影网| 色中色一区二区| 欧美激情自拍偷拍| 麻豆freexxxx性91精品| 色天天综合色天天久久| 国产亚洲午夜高清国产拍精品| 国产精品久久久久桃色tv| 免费观看30秒视频久久| 99视频精品免费视频| 国产精品久久久久久户外露出 | 欧美日韩高清一区二区不卡| 欧美成人高清电影在线| 日韩高清一区二区| 欧美剧在线免费观看网站| 亚洲啪啪综合av一区二区三区| 岛国av在线一区| 亚洲视频一区在线| 欧美视频自拍偷拍| 久久99蜜桃精品| 国产精品视频yy9299一区| 99久久精品国产网站| 亚洲资源在线观看| 日韩欧美国产精品一区| 久久精品国产网站| 精品福利一区二区三区| 日本乱码高清不卡字幕| 亚洲午夜精品在线| 精品视频一区二区三区免费| 首页国产丝袜综合| 国产亚洲欧洲一区高清在线观看| 国产电影精品久久禁18| 一区二区三区在线不卡| 色婷婷久久久亚洲一区二区三区| 亚洲综合另类小说| 日韩欧美国产一区在线观看| 成人app网站| 日本vs亚洲vs韩国一区三区二区 | 成人永久看片免费视频天堂| 亚洲色图制服诱惑| 26uuu精品一区二区在线观看| 成人午夜私人影院| 麻豆极品一区二区三区| 最近日韩中文字幕| 中文字幕国产一区| 日本一区二区视频在线| 精品国产一区二区精华| 欧美人动与zoxxxx乱| 欧美日韩国产片| 91美女精品福利| 日本韩国欧美一区| 欧美性受xxxx| 666欧美在线视频| 91精品久久久久久蜜臀| 欧美精品777| 精品久久久影院| 国产午夜精品在线观看| 2022国产精品视频| 国产欧美日韩综合精品一区二区| 久久亚洲一区二区三区四区| 久久影院视频免费| 最新高清无码专区| 天天色 色综合| 久久精品久久精品| 国产传媒日韩欧美成人| aaa国产一区| 欧美日韩国产一二三| 国产视频一区二区在线观看| 中文字幕五月欧美| 激情综合网天天干| www.一区二区| 色中色一区二区| 欧美一区二区三区人| 日韩亚洲欧美一区二区三区| 日韩久久免费av| 自拍偷拍国产精品| 韩国成人福利片在线播放| av在线不卡电影| av激情综合网| 欧美精品一区二区高清在线观看| 国产精品福利电影一区二区三区四区| 亚洲在线中文字幕| 91丝袜高跟美女视频| 久久婷婷国产综合精品青草 | 91麻豆蜜桃一区二区三区| 欧美白人最猛性xxxxx69交| 国产精品福利一区二区三区| av资源网一区| 久久久久久久久99精品| 秋霞午夜鲁丝一区二区老狼| 欧美三级午夜理伦三级中视频| 欧美一区二区久久久| 亚洲啪啪综合av一区二区三区| 成人在线一区二区三区| 欧美男女性生活在线直播观看| 一区二区三区四区不卡视频 | 日韩精品色哟哟| 555夜色666亚洲国产免| 天堂精品中文字幕在线| 日韩一区二区在线看片| 国产伦精品一区二区三区视频青涩 | 亚洲私人黄色宅男| 欧美日本韩国一区二区三区视频| 亚洲电影视频在线| 久久综合国产精品| 国产成人一区在线| 国产无遮挡一区二区三区毛片日本| 日韩高清不卡一区二区| 在线观看区一区二| 亚洲高清一区二区三区| 久久蜜桃av一区二区天堂| 99re亚洲国产精品| 免费视频最近日韩| 国产精品素人一区二区| 精品视频在线看| 久久国产精品99精品国产| 国产精品全国免费观看高清 | 成人性生交大片| 一区二区欧美视频| 亚洲国产精华液网站w| 亚洲精品一区二区精华| 日韩色视频在线观看| 欧美日韩黄色一区二区| 在线免费观看日本欧美| www.色综合.com| 国产91对白在线观看九色| 玖玖九九国产精品| 美女精品一区二区| 久久99这里只有精品| 麻豆精品视频在线观看免费| 日本欧美加勒比视频| 日本美女一区二区三区视频| 日日夜夜精品视频天天综合网| 亚洲精品国久久99热| 亚洲男人的天堂在线aⅴ视频| 一区二区中文视频| 亚洲二区在线观看| 日韩国产高清在线| 久久精品久久综合| 成人av电影观看| 在线这里只有精品| 欧美色窝79yyyycom| 欧美精品久久久久久久多人混战 | 欧美午夜一区二区三区| 欧美日韩一二区| 久久综合色一综合色88| 亚洲欧美另类小说| 美女国产一区二区| 色哟哟精品一区| 久久亚洲捆绑美女| 日本不卡一区二区| 成人国产亚洲欧美成人综合网| 成人av电影免费观看| 欧美浪妇xxxx高跟鞋交| 国产精品国产三级国产三级人妇 | 一区二区三区成人| 高清不卡在线观看| 欧美精品丝袜久久久中文字幕| 国产精品免费久久久久| 国产91精品露脸国语对白| 在线综合亚洲欧美在线视频| 亚洲免费伊人电影| 91丝袜呻吟高潮美腿白嫩在线观看| 精品999在线播放| 六月丁香婷婷色狠狠久久| 欧美日韩免费高清一区色橹橹| 国产精品国产三级国产| 成人激情午夜影院| 成人免费一区二区三区在线观看| 青娱乐精品在线视频| 日韩一区二区三区电影| 精品一区二区三区在线观看国产| 精品国产一二三| 成人性生交大合| 国产精品沙发午睡系列990531| 国产福利视频一区二区三区| 国产精品久久久久久久岛一牛影视| 成人小视频免费在线观看| 亚洲欧美自拍偷拍色图| 91免费精品国自产拍在线不卡| 亚洲一级在线观看| 欧美电视剧免费观看| 成人v精品蜜桃久久一区| 中文字幕亚洲在| 91精品国产欧美一区二区| 狠狠色狠狠色综合系列| 一区二区三区国产豹纹内裤在线|