📄 inference.cpp
字号:
// Inference.cpp : implementation file
//
#include "stdafx.h"
#include "probp.h"
#include "Inference.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CInference property page
IMPLEMENT_DYNCREATE(CInference, CPropertyPage)
CInference::CInference() : CPropertyPage(CInference::IDD)
{
//{{AFX_DATA_INIT(CInference)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
netExist=false;
netConstruct=false;
m_inferStr=_T("");
}
CInference::~CInference()
{
}
void CInference::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CInference)
DDX_Control(pDX, IDC_resLIST, m_resList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CInference, CPropertyPage)
//{{AFX_MSG_MAP(CInference)
ON_BN_CLICKED(IDC_openNet, OnopenNet)
ON_BN_CLICKED(IDC_OpenSample, OnOpenSample)
ON_BN_CLICKED(IDC_begin, OnbeginInference)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CInference message handlers
void CInference::OnopenNet()
{ m_Neural=new NeuralB;
netExist=true;
m_resList.SetColumnWidth(3000);
ofstream defaultnet("default.bp");
for(int i=0;i<100;i++)
defaultnet<<"1"<<" ";
defaultnet.close();
CFileDialog dlg(TRUE,"bp","*.bp");
if(dlg.DoModal()==IDOK)
{CString temp;
temp=dlg.GetPathName();
lstrcpy(m_Neural->Net_Design.bpfilename,temp);
}
m_Neural->Net_Design.upload_network();
m_Neural->establish_backprop_network();
netConstruct=true;
m_Neural->hidenode[0]=m_Neural->Net_Design.hidenode[0];
m_Neural->hidenode[1]=m_Neural->Net_Design.hidenode[1];
}
void CInference::OnOpenSample()
{
if (!netExist) AfxMessageBox(_T("请先打开已学习的网络"));
else{
CFileDialog dlg(TRUE,"dat","*.dat");
if(dlg.DoModal()==IDOK)
{CString temp;
temp=dlg.GetPathName();
lstrcpy(m_Neural->Test_Data.filename,temp);
m_Neural->Test_Data.acquire_net_info(m_Neural->Net_Design.signal_dimensions,0);
m_Neural->Test_Data.request_testing_data();
m_Neural->Test_Data.netoutput=new float[m_Neural->Net_Design.nodes_in_output_layer];
m_Neural->Test_Data.targetoutput=new float[m_Neural->Net_Design.nodes_in_output_layer];
for(int sig = 0; sig < m_Neural->Test_Data.sample_number; sig++)
{//一个信号的signal_dimensions维
for(int sigdim = 0; sigdim < m_Neural->Test_Data.signal_dimensions; sigdim++)
{
//信号的一维的hidenode[0]个隐层节点
for(int hid1 = 0; hid1<m_Neural->hidenode[0]; hid1++)
{ //一个隐层节点的sigdim
float a=m_Neural->Test_Data.number_of_samples[sig].data_in_sample[sigdim];
m_Neural->Net_Design.hidden_layer_number[0].node_in_hidden_layer[hid1].processing_unit_input[sigdim] =a;
}
}
}
}
}
// TODO: Add your control notification handler code here
}
void CInference::OnbeginInference()
{
if (netConstruct)
{
m_Neural->Test_Data.testsampleNum=0;
while ((m_Neural->Test_Data.testsampleNum)<(m_Neural->Test_Data.sample_number))
{m_Neural->test_neural_network();
displayinference();
m_Neural->Test_Data.testsampleNum++;
}
}
else AfxMessageBox(_T("请先打开网络数据"));
}
void CInference::displayinference()
{
CString tp;
for(int dim=0;dim<m_Neural->Net_Design.signal_dimensions;dim++)
{
tp.Format("dim %d: %f",dim+1,m_Neural->Test_Data.number_of_samples[m_Neural->Test_Data.testsampleNum].data_in_sample[dim]);
m_inferStr=m_inferStr+tp;
}
m_inferStr=m_inferStr+_T(" netout");
for(dim=0;dim<m_Neural->Net_Design.nodes_in_output_layer;dim++)
{
tp.Format(" dim%d: %f ",dim+1,m_Neural->Test_Data.netoutput[dim]);
m_inferStr=m_inferStr+tp;
}
m_resList.AddString(m_inferStr);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -