コード例 #1
0
float MultilayerNN::trainOne(vector<float> tuple) {

    float error;
    // Set up topography & randomize weights if first run
    if (!topoSet) {
        setTopo(tuple);
    }

    // Set previous weights if size = 0
    //if (previousWeights.size() == 0) previousWeights = weights;

    // Set input nodes to training tuple values
    for (int i = 0; i < inputNodes.size(); i++) {
        inputNodes.at(i) = tuple.at(i);
    }

    // FIRST PASS: Feed forward through network
    feedForward();

    // SECOND PASS: Calculate error, propagate deltas back through network given desired output
    error = addErrorForIteration(tuple.back());
    backProp(tuple.back());

    // THIRD PASS: Update weights
    updateWeights();

    return error;
}
コード例 #2
0
void NeuralNetworkSimpleInternal::train(NeuralPatternArray const& patterns, const int count) throw()
{
	const NeuralPattern *patternPtr = patterns.getArray();
	
	if(patternPtr != 0)
	{
		for(int iteration = 0; iteration < count; iteration++)
		{
			const int numPatterns = patterns.size();
			for(int patternIndex = 0; patternIndex < numPatterns; patternIndex++)
			{
				const NeuralPattern& pattern = patternPtr[patternIndex];
				
				if(pattern.getInternal() != 0)
					backProp(pattern.getInputVector(), pattern.getOutputVector());
			}
		}
	}
}