1 Star 0 Fork 28

zhoujuan-ht17 / BPNNDemoQt

forked from Qt(开源集合) / BPNNDemoQt 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
trainthread.cpp 2.87 KB
一键复制 编辑 原始数据 按行查看 历史
ZzqiZQute 提交于 2018-12-18 22:20 . fiix thread bug
#include "trainthread.h"
#include "bpnetworkqt.h"
#include "mainwindow.h"
#include "surface.h"
#include "surfacenode.h"
#include <QMutex>
TrainThread::TrainThread(MainWindow* window, Surface* surface, BPNetworkQt *network, QMutex* mutex):
mNetwork(network),
mWindow(window),
mSurface(surface),
mMutex(mutex)
{
mChanged=false;
mPause=false;
mClassCnt=mWindow->getClassifierCnt();
}
TrainThread::~TrainThread()
{
}
int TrainThread::type() const
{
return mType;
}
void TrainThread::setType(int type)
{
mType = type;
}
double TrainThread::err() const
{
return mErr;
}
void TrainThread::setErr(double err)
{
mErr = err;
}
int TrainThread::time() const
{
return mTime;
}
void TrainThread::setTime(int time)
{
mTime = time;
}
void TrainThread::onDataChanged()
{
mChanged=true;
}
void TrainThread::onResetTrainCnt()
{
mNetwork->reset();
}
void TrainThread::onStop()
{
emit sigStop();
}
void TrainThread::onPause(int i)
{
if(i==0)
{
mPause=true;
}else{
mPause=false;
}
}
void TrainThread::onLearnRateChanged(double value)
{
mNetwork->setLearnRate(value);
}
void TrainThread::train()
{
if(mChanged)
{
mChanged=false;
QList<SurfaceNode> mNodeList=mSurface->nodeList();
int dim=mNodeList.count();
mNetwork->setSampleDim(dim);
double* d=new double[dim];
for(int i=0;i<dim;i++)
{
d[i]=mNodeList.at(i).pos().x();
}
mNetwork->setInput(0,d);
d=new double[dim];
for(int i=0;i<dim;i++)
{
d[i]=1.0-mNodeList.at(i).pos().y();
}
mNetwork->setInput(1,d);
int typecnt=mWindow->getClassifierCnt();
for(int j=0;j<typecnt;j++)
{
d=new double[dim];
for(int i=0;i<dim;i++)
{
d[i]=mNodeList.at(i).type()==j?1.0:0;
}
mNetwork->setOutput(j,d);
}
}
mMutex->lock();
mCurrentErr=mNetwork->train();
mMutex->unlock();
emit trainOnce(mNetwork->getTrainCnt(),mCurrentErr);
//QThread::usleep(0);
}
void TrainThread::run()
{
if(mType==0)
{
if(mNetwork->checkSample())
{
mNetwork->reset();
while(mNetwork->getTrainCnt()<mTime){
while(mPause);
train();
}
emit trainFinished();
}
}else if(mType==1){
if(mNetwork->checkSample())
{
mNetwork->reset();
mCurrentErr=mErr+1;
while(mCurrentErr>=mErr){
while(mPause);
train();
}
emit trainFinished();
}
}else{
if(mNetwork->checkSample())
{
mNetwork->reset();
while(1){
while(mPause);
train();
}
}
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/zhoujuan-ht17/BPNNDemoQt.git
git@gitee.com:zhoujuan-ht17/BPNNDemoQt.git
zhoujuan-ht17
BPNNDemoQt
BPNNDemoQt
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891