예제 #1
0
void FramesWeightFrame::mousePressEvent(QMouseEvent* mouseEvent)
{
  mouseDown = true;
  weightedFrame = mouseEvent->x()/FrameBarWidth;
  adjustWeight(mouseEvent->y());
  repaint();
}
예제 #2
0
void FramesWeightFrame::mouseMoveEvent(QMouseEvent* mouseEvent)
{
  if(mouseDown)
  {
    weightedFrame = mouseEvent->x()/FrameBarWidth;
    if(weightedFrame<0 || weightedFrame>=frameCount())
      return;
    adjustWeight(mouseEvent->y());
    repaint();
  }
}
예제 #3
0
void BpAlgSt::start(){
	Q_ASSERT(net != NULL);
	Q_ASSERT(data != NULL);

    emit started();

    //value initialization
	running = true;
    actIter = 1;
	actTime = 0;
	timer.restart();

    double sumErr = 0;
    for(int i = 0; i < data->minPatternCount(); i++){
        output = net->layerOutput(data->inputVector(i));
        sumErr += calcError(i);
    }
    actError = sumErr;
    emit update(0, actTime, actError);

    //learning main cycle
	while(running){
		for(int i = 0; i < data->minPatternCount(); i++){
			//feedforward
			output = net->layerOutput(data->inputVector(i));
			//output layer delta calculation
			calcOutputDelta(i);
			//inner layer delta calculation
			calcInnerDelta();
			//weight adjustment
			adjustWeight();
		}

		//current time
		actTime = timer.elapsed();

        //output error calculation
        double sumErr = 0;
        for(int i = 0; i < data->minPatternCount(); i++){
            output = net->layerOutput(data->inputVector(i));
            sumErr += calcError(i);
        }
        actError = sumErr;

        //emits update signal once per each update interval
        if(actIter % updateInterv == 0){
            emit update(actIter, actTime, actError);
        }

        //stop conditions
		if(actTime >= stopTimeVal) break;
		if(actIter >= stopIter) break;
		if(actError <= stopErrorVal) break;

		actIter++;
	}

	//running flag to false
	running = false;

    //signal that tells that learning is finished
    emit stoped();
}