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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? testdoc.cpp

?? 人工神經網絡最經典的BP算法
?? CPP
字號:
// testDoc.cpp : implementation of the CTestDoc class
//

#include "stdafx.h"
#include "test.h"

#include "testDoc.h"
#include "DataInput.h"
#include "ValueInput.h"
#include "MyTestDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CTestDoc

IMPLEMENT_DYNCREATE(CTestDoc, CDocument)

BEGIN_MESSAGE_MAP(CTestDoc, CDocument)
	//{{AFX_MSG_MAP(CTestDoc)
	ON_COMMAND(ID_MENU_LOAD, OnMenuLoad)
	ON_COMMAND(ID_MENU_LEARN, OnMenuLearn)
	ON_COMMAND(ID_MENU_NEWFILE, OnMenuNewfile)
	ON_COMMAND(ID_MENU_TEST, OnMenuTest)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestDoc construction/destruction

CTestDoc::CTestDoc()
{
	// TODO: add one-time construction code here
	max_error_tollerance = 0.09;
	file_loaded = FALSE;
	data_learned = FALSE;
	can_learn = FALSE;
	dispmode = 0;
	ytemp = 0;
	ztemp = 0;
	total = 0;

	input = NULL;
	hidden = NULL;
	output = NULL;
	target = NULL;
	bias = NULL;
	weight_i_h = NULL;
	weight_h_o = NULL;
	errorsignal_hidden = NULL;
	errorsignal_output = NULL;
}

CTestDoc::~CTestDoc()
{
	if (file_loaded)
	{
		clear_memory();
	}
}

BOOL CTestDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)

	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CTestDoc serialization

void CTestDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: add storing code here
	}
	else
	{
		// TODO: add loading code here
	}
}

/////////////////////////////////////////////////////////////////////////////
// CTestDoc diagnostics

#ifdef _DEBUG
void CTestDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CTestDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CTestDoc commands

void CTestDoc::OnMenuLoad() 
{
	// TODO: Add your command handler code here
    CFileDialog dlg_file(TRUE,"txt","*.txt");
	if (dlg_file.DoModal()==IDOK)
	{
		if (file_loaded)
		{
			clear_memory();
		}
		else
		{
			file_loaded = TRUE;
		}
		ifstream in(dlg_file.GetPathName());
	
		TRACE("\nfilename=%s\n",dlg_file.GetPathName());
		data_learned = FALSE;
		can_learn = TRUE;
	
		in >> input_array_size;
		in >> hidden_array_size;
		in >> output_array_size;
		in >> learning_rate;
		in >> number_of_input_patterns;
		TRACE("\n\nparameter=%d,%d,%d,%f,%d\n\n",input_array_size,
										   hidden_array_size,
										   output_array_size,
										   learning_rate,
										   number_of_input_patterns);
		bias_array_size = hidden_array_size + output_array_size;
		initialize_net();
		int x,y;
		for(x=0; x<bias_array_size; x++) 
		{
			in >> bias[x];
			TRACE("BIAS[%d]=%f\n",x,bias[x]);
		}
		for(x=0; x<input_array_size; x++) 
		{ 
			for(y=0; y<hidden_array_size; y++)
			{
				in >> weight_i_h[x][y];
				TRACE("Weight_i_h[%d][%d]=%f\n",x,y,weight_i_h[x][y]);
			}
		}
		for(x=0; x<hidden_array_size; x++) 
		{ 
			for(y=0; y<output_array_size; y++)
			{
				in >> weight_h_o[x][y];
				TRACE("Weight_h_o[%d][%d]=%f\n",x,y,weight_h_o[x][y]);
			}
		}
		
		
		double sin_delta,
				sin_x ;
		double pai = 3.1415926535897932;
        sin_x = 0;
		sin_delta = pai/(number_of_input_patterns-1);
		
		for(x=0; x<number_of_input_patterns; x++) 
		{
			for(y=0; y<input_array_size; y++) 
			{
				//in >> input[x][y];
				input[x][y] = sin_x;
				sin_x += sin_delta;
				TRACE("input[%d][%d]=%.0f\n",x,y,input[x][y]);
			}
		}
		for(x=0; x<number_of_input_patterns; x++)
		{
			for(y=0; y<output_array_size; y++)
			{
				//in >> target[x][y];
				target[x][y] = sin(input[x][y]);
				TRACE("target[%d][%d]=%.0f\n",x,y,target[x][y]);
			}
		}
		in.close();
		::AfxMessageBox("Data loaded");
	}
}

void CTestDoc::initialize_net()
{
	int x;
	input = new double * [number_of_input_patterns];
	if(!input) { ::AfxMessageBox("memory problem!"); exit(1); }
	for(x=0; x<number_of_input_patterns; x++)
	{
		input[x] = new double [input_array_size];
		if(!input[x]) { ::AfxMessageBox("memory problem!"); exit(1); }
	}

	//hidden = new double [hidden_array_size];
	hidden = new double * [number_of_input_patterns];
	if(!hidden) { ::AfxMessageBox("memory problem!"); exit(1); }
	for (x=0; x<number_of_input_patterns; x++)
	{
		hidden[x] = new double [hidden_array_size];
		if(!hidden[x]) {::AfxMessageBox("memory problem!"); exit(1); }
	}

	output = new double * [number_of_input_patterns];
	if(!output) { ::AfxMessageBox("memory problem!"); exit(1); }
	for(x=0; x<number_of_input_patterns; x++)
	{
		output[x] = new double [output_array_size];
		if(!output[x]) { ::AfxMessageBox("memory problem!"); exit(1); }
	}

	target = new double * [number_of_input_patterns];
	if(!target) { ::AfxMessageBox("memory problem!"); exit(1); }
	for(x=0; x<number_of_input_patterns; x++)
	{
		target[x] = new double [output_array_size];
		if(!target[x]) { ::AfxMessageBox("memory problem!"); exit(1); }
	}

	bias = new double [bias_array_size];
	if(!bias) { ::AfxMessageBox("memory problem!"); exit(1); }

	weight_i_h = new double * [input_array_size];
	if(!weight_i_h) { ::AfxMessageBox("memory problem!"); exit(1); }
	for(x=0; x<input_array_size; x++)
	{
		weight_i_h[x] = new double [hidden_array_size];
		if(!weight_i_h[x]) { ::AfxMessageBox("memory problem!"); exit(1); }
	}
	weight_h_o = new double * [hidden_array_size];
	if(!weight_h_o) { ::AfxMessageBox("memory problem!"); exit(1); }
	for(x=0; x<hidden_array_size; x++)
	{
		weight_h_o[x] = new double [output_array_size];
		if(!weight_h_o[x]) { ::AfxMessageBox("memory problem!"); exit(1); }
	}

	errorsignal_hidden = new double [hidden_array_size];
	if(!errorsignal_hidden) { ::AfxMessageBox("memory problem!"); exit(1); }
	errorsignal_output = new double [output_array_size];
	if(!errorsignal_output) { ::AfxMessageBox("memory problem!"); exit(1); }
	return;
}

void CTestDoc::clear_memory()
{	
	int x;
	for(x=0; x<number_of_input_patterns; x++)
	{
		delete [] input[x];
	}
	delete [] input;

	for (x=0; x<number_of_input_patterns; x++)
	{
		delete [] hidden[x];
	}
	delete [] hidden;

	for(x=0; x<number_of_input_patterns; x++)
	{
		delete [] output[x];
	}
	delete [] output;

	for(x=0; x<number_of_input_patterns; x++)
	{
		delete [] target[x];
	}
	delete [] target;

	delete [] bias;

	for(x=0; x<input_array_size; x++)
	{
		delete [] weight_i_h[x];
	}
	delete [] weight_i_h;

	for(x=0; x<hidden_array_size; x++)
	{
		delete [] weight_h_o[x];
	}
	delete [] weight_h_o;

	delete [] errorsignal_hidden;
	
	delete [] errorsignal_output;
	file_loaded = FALSE;
	return;
}


void CTestDoc::OnMenuLearn() 
{
	// TODO: Add your command handler code here
	ofstream out(BIAS_FILE);
	BOOL success = FALSE;
	total = 0;

	dispmode = 2;
	UpdateAllViews(NULL);
	register int y;
	notkeyhit = TRUE;
	while(notkeyhit) 
	{
		for(y=0; y<number_of_input_patterns; y++) 
		{
			forward_pass(y);
		}
	
		if(compare_output_to_target())
		{
			success = TRUE;
			break;
		}
		else
		{
			backward_pass(out);
			total++;
		}

		MSG message;
		if (::PeekMessage(&message,NULL,0,0,PM_REMOVE))
		{
			::TranslateMessage(&message);
			::DispatchMessage(&message);
		}
	}
	dispmode = 0;
	UpdateAllViews(NULL);

	out.close();
	ofstream out_e(BIASNUM_FILE);
	out_e << total;
	out_e.close();
	if (success)
	{
		::AfxMessageBox("Learning successful");
		data_learned = TRUE;
	}
	else
	{
		::AfxMessageBox("Learning not successful yet");
	}
	return;
}

void CTestDoc::forward_pass(int pattern)
{
	_control87 (MCW_EM, MCW_EM);
	register double temp=0;
	register int x,y;

// INPUT -> HIDDEN
	for(y=0; y<hidden_array_size; y++) {
		for(x=0; x<input_array_size; x++) {
			temp += (input[pattern][x] * weight_i_h[x][y]); //∑Wi*Xi
		}
		hidden[pattern][y] = (1.0 / (1.0 + exp(-1.0 * (temp + bias[y]))));//1/(1+e^(-uj)); uj=∑Wi*Xi - θj
		temp = 0;                                                //各隱層結點的輸出
	}

// HIDDEN -> OUTPUT
	for(y=0; y<output_array_size; y++) {	//有output_array_size個輸出結點
		for(x=0; x<hidden_array_size; x++) {
			temp += (hidden[pattern][x] * weight_h_o[x][y]);
		}
		output[pattern][y] = (1.0 / (1.0 + exp(-1.0 * (temp + bias[y + hidden_array_size]))));
		temp = 0;
	}
	return;
}

void CTestDoc::backward_pass(ofstream& f_out)
{
	register int x, y, p;
	register double temp = 0;
	double e = 0;
	for (p=0; p<number_of_input_patterns; p++)
	{
	// COMPUTE ERRORSIGNAL FOR OUTPUT UNITS
		for(x=0; x<output_array_size; x++) {
			errorsignal_output[x] = (target[p][x]-output[p][x]);//(t-y)
			e += errorsignal_output[x] * errorsignal_output[x];	//e = (∑(t-y)^2)/2
			errorsignal_output[x] *= output[p][x] * (1-output[p][x]);//δ= y*(1-y)*(t-y)	
		}
	
	// COMPUTE ERRORSIGNAL FOR HIDDEN UNITS
		for(x=0; x<hidden_array_size; x++) {
			for(y=0; y<output_array_size; y++) { 
				temp += (errorsignal_output[y] * weight_h_o[x][y]);
			}
			errorsignal_hidden[x] = hidden[p][x] * (1-hidden[p][x]) * temp;//Xk*(1-Xk)∑δ*W
			temp = 0.0;
		}

	// ADJUST WEIGHTS OF CONNECTIONS FROM HIDDEN TO OUTPUT UNITS
		double length = 0.0;
		for (x=0; x<hidden_array_size; x++) {
			length += hidden[p][x]*hidden[p][x];
		}
		if (length<=0.1) length = 0.1;
		for(x=0; x<hidden_array_size; x++) {
			for(y=0; y<output_array_size; y++) {
				weight_h_o[x][y] += (learning_rate * errorsignal_output[y] * hidden[p][x]/length);
			}
		}

	// ADJUST BIASES OF HIDDEN UNITS
		for(x=hidden_array_size; x<bias_array_size; x++) {
			bias[x] += (learning_rate * errorsignal_output[x] / length);
		}

	// ADJUST WEIGHTS OF CONNECTIONS FROM INPUT TO HIDDEN UNITS
		length = 0.0;
		for (x=0; x<input_array_size; x++) 
		{
			length += input[p][x]*input[p][x];
		}
		if (length<=0.1) length = 0.1;
		for(x=0; x<input_array_size; x++)
		{                     
			for(y=0; y<hidden_array_size; y++) 
			{
				weight_i_h[x][y] += (learning_rate * errorsignal_hidden[y] * input[p][x]/length);
			}
		}

	// ADJUST BIASES FOR OUTPUT UNITS
		for(x=0; x<hidden_array_size; x++) {
			bias[x] += (learning_rate * errorsignal_hidden[x] / length);
		}
	}
	e /= 2.0;
	f_out << e << endl;
	return;
}

int CTestDoc::compare_output_to_target()
{
	register int y,z;
	register double temp, error = 0.0;
	temp = target[ytemp][ztemp] - output[ytemp][ztemp];//(t-y)<ε
	if (temp < 0) error -= temp;
	else error += temp;
	if(error > max_error_tollerance) return 0;
	error = 0.0;
	for(y=0; y < number_of_input_patterns; y++) {
		for(z=0; z < output_array_size; z++) {
			temp = target[y][z] - output[y][z];
			if (temp < 0) error -= temp;
			else error += temp;
			if(error > max_error_tollerance) {
				ytemp = y;
				ztemp = z;
				return 0;
			}
			error = 0.0;
		}
	}
	return 1;
}

void CTestDoc::OnMenuNewfile() 
{
	// TODO: Add your command handler code here
	CFileDialog dlg_save(FALSE,"txt","*.txt");
	if (dlg_save.DoModal()==IDOK)
	{
		CDataInput dlg_d_input;
		CValueInput dlg_v_input;
		if (dlg_d_input.DoModal() == IDOK)
		{
			int x, y, mode;
			int bias_array_size, input_array_size, hidden_array_size, output_array_size;
			double inpx, val;
			CString str_in,str_tar;
	
			can_learn = FALSE;
			data_learned = FALSE;
		
			ofstream out(dlg_save.GetPathName());
			if (!out)
			{
				::AfxMessageBox("Can not open the file");
				return;
			}

			input_array_size = dlg_d_input.m_nInput;
			hidden_array_size = dlg_d_input.m_nHidden;
			output_array_size = dlg_d_input.m_nOut;
			inpx = dlg_d_input.m_dLearn;
			mode = dlg_d_input.m_nMode;
			bias_array_size = hidden_array_size + output_array_size;
	
			out << input_array_size << endl;
			out << hidden_array_size << endl;
			out << output_array_size << endl;
			out << inpx << endl;
			out << mode << endl << endl;

			srand((unsigned)time(NULL));
			for(x=0; x<bias_array_size; x++) 
			{	
				out << (double)(rand()-10000)/RAND_MAX << ' ';
			}
			out << endl << endl;
			for(x=0; x<input_array_size; x++) {//Weight Input->Hidden
				for(y=0; y<hidden_array_size; y++) 
				{
					out << (double)(rand()-10000)/RAND_MAX << ' ';
				}
			}
			out << endl << endl;
			for(x=0; x<hidden_array_size; x++) {//Weight Hidden->Output
				for(y=0; y<output_array_size; y++) 
				{
					out << (double)(rand()-10000)/RAND_MAX << ' ';
				}
			}
			out << endl << endl;
		
			ofstream output("tmp_1011.txt");
			if (!output)
			{
				::AfxMessageBox("Can not open the tmeporary file");
				return;
			}
	
			for (count = 1; count <=mode; count+=dlg_v_input.delta)
			{
				 if(dlg_v_input.DoModal()==IDOK)
				{
					str_in = dlg_v_input.m_strInput;
					str_tar = dlg_v_input.m_strTarget;
					out << str_in << endl;
					output << str_tar << endl;

				}
			}
			output.close();
			out << endl;
			ifstream f_input("tmp_1011.txt");
			for (count=1; count<=mode; count++)
			{
				for (x=0; x<output_array_size; x++)
				{
					f_input >> val;
					out << val << ' ';;
				}
				out << endl;
			}
			f_input.close();
			out.close();
			CFile::Remove("tmp_1011.txt");
		}
	}
}


void CTestDoc::OnMenuTest() 
{
	// TODO: Add your command handler code here
	CMyTestDlg dlg_test;
	if (dlg_test.DoModal()==IDOK)
	{
		selpattern = dlg_test.m_nModeNum-1;
		TRACE("\nselPATTERN=%d\n",selpattern);
		forward_pass(selpattern);
		dispmode = 1;
	    UpdateAllViews(NULL);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日高清视频| 一区二区在线观看免费| 在线视频中文字幕一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅| 久久免费看少妇高潮| 国产精品18久久久久久久网站| 国产精品色噜噜| 亚洲丝袜制服诱惑| 中文字幕亚洲一区二区av在线| 亚洲国产成人私人影院tom| 国产精品伦理在线| 亚洲蜜臀av乱码久久精品蜜桃| 制服.丝袜.亚洲.中文.综合| 青娱乐精品视频| 国产一区二区网址| 国产成人午夜99999| 亚洲sss视频在线视频| 久久亚洲一区二区三区四区| 日韩精品一区二区三区在线播放| 欧美绝品在线观看成人午夜影视| 欧美午夜影院一区| 欧美久久久久中文字幕| 91精品国产一区二区三区| 日韩午夜在线影院| 国产日韩精品一区| 亚洲欧美另类久久久精品| 亚洲精品一二三| 视频在线观看一区| 韩国v欧美v亚洲v日本v| 成人国产精品免费网站| 色老汉一区二区三区| 777xxx欧美| 国产欧美日韩激情| 亚洲国产精品久久久久婷婷884 | 午夜欧美视频在线观看| 国产成人在线免费| 国产精品天美传媒| 亚洲美女偷拍久久| 欧美日韩国产一级片| 亚洲欧洲av在线| av电影天堂一区二区在线观看| 精品99一区二区| 久久99久久久久| 欧美高清视频一二三区| 亚洲大片在线观看| 欧美高清一级片在线| 午夜精品一区二区三区电影天堂| 欧美日本在线观看| 亚洲精品写真福利| 在线观看亚洲成人| 日本一不卡视频| 欧美videofree性高清杂交| 久久91精品国产91久久小草| 欧美一区二视频| 精品一区二区免费| 国产清纯白嫩初高生在线观看91 | 亚洲视频在线观看三级| 天天综合天天做天天综合| 99久久久无码国产精品| 狂野欧美性猛交blacked| 欧美日韩国产123区| 亚洲综合区在线| 一本大道久久a久久综合 | 亚洲成人在线网站| 99久久久久久| 亚洲老司机在线| 在线观看不卡一区| 亚洲成人av中文| 91.com视频| 精品一区二区免费看| 国产午夜精品一区二区| 国产成+人+日韩+欧美+亚洲| 国产情人综合久久777777| 成人动漫在线一区| 日本欧美一区二区在线观看| 欧美一区二区二区| 欧美性生活大片视频| 精品国产一区二区三区四区四| 奇米色777欧美一区二区| 国产欧美一区二区精品婷婷 | 日韩vs国产vs欧美| 中文字幕av在线一区二区三区| 97成人超碰视| 欧美在线免费播放| 国产成a人亚洲精品| 日本不卡不码高清免费观看| 欧美国产禁国产网站cc| 亚洲欧美一区二区视频| 中文天堂在线一区| 久久精品日韩一区二区三区| 国产老妇另类xxxxx| 久久夜色精品国产噜噜av | 色婷婷精品久久二区二区蜜臂av | 欧美日韩一本到| 欧美aaa在线| 国产清纯美女被跳蛋高潮一区二区久久w| 国产成人在线视频免费播放| 亚洲日本成人在线观看| 8v天堂国产在线一区二区| 欧美性猛交xxxx乱大交退制版| 亚洲一区日韩精品中文字幕| 激情五月婷婷综合| 1000部国产精品成人观看| 欧美一区二区福利在线| 菠萝蜜视频在线观看一区| 一区二区国产盗摄色噜噜| 久久先锋资源网| 欧美色视频在线观看| 成人网在线播放| 激情六月婷婷综合| 天天色综合成人网| 亚洲视频 欧洲视频| 精品少妇一区二区三区免费观看 | 日韩在线一区二区| 亚洲激情图片一区| 国产精品久久久久天堂| 精品国产精品一区二区夜夜嗨| 97se亚洲国产综合自在线不卡| 激情亚洲综合在线| 韩国精品一区二区| 亚洲日本在线a| 日韩理论片在线| 中文字幕一区二区三区四区 | 中文字幕一区二区三区四区| 国产人成亚洲第一网站在线播放| 欧美亚洲动漫另类| 国产精品77777| 国产精品91一区二区| 国产一区二区0| 国产毛片精品视频| 国产成人在线电影| 国产成人av福利| 国产一区在线观看视频| 国产麻豆一精品一av一免费 | 欧美激情一区三区| 亚洲视频 欧洲视频| 亚洲五码中文字幕| 午夜影院久久久| 日韩成人一级大片| 国产一本一道久久香蕉| 懂色中文一区二区在线播放| 麻豆91精品视频| 日韩电影一区二区三区四区| 日韩福利视频导航| 成人精品视频一区二区三区尤物| 风间由美性色一区二区三区| 色一情一乱一乱一91av| 欧美精品粉嫩高潮一区二区| 日韩欧美美女一区二区三区| 国产日韩一级二级三级| 亚洲黄色小视频| 高清视频一区二区| 自拍偷拍亚洲欧美日韩| 经典三级视频一区| 国产精品性做久久久久久| aaa亚洲精品一二三区| 欧美人动与zoxxxx乱| 国产精品久久一级| 日韩不卡在线观看日韩不卡视频| 黑人精品欧美一区二区蜜桃| 色噜噜夜夜夜综合网| 精品国产免费人成在线观看| 亚洲激情在线激情| 成人手机在线视频| 欧美哺乳videos| 一区二区三区久久久| 国产成人免费在线观看| 欧美一三区三区四区免费在线看| 欧美一级免费观看| 国产精品伦一区二区三级视频| 麻豆成人综合网| 欧美精选一区二区| 亚洲永久精品大片| 99视频有精品| 国产精品大尺度| 国产综合久久久久久鬼色| 日韩视频一区二区三区在线播放| 亚洲裸体在线观看| 99久久久无码国产精品| 中文字幕一区二区三区不卡| 成人午夜在线视频| 国产精品护士白丝一区av| 国产成人综合在线观看| 久久久久久99久久久精品网站| 日韩和欧美一区二区三区| 欧美日韩精品专区| 亚洲在线视频网站| 欧美一二三区在线| 狠狠色狠狠色综合| 国产精品女上位| 日本韩国精品在线| 视频一区视频二区在线观看| 日韩精品一区二区在线观看| 黄一区二区三区| 国产精品区一区二区三| 欧美影院一区二区三区| 免费成人在线影院| 欧美美女喷水视频| 国v精品久久久网| 亚洲午夜一区二区|