static NeuralNetwork createNeuralNetwork(size_t xPixels, size_t yPixels, size_t colors, std::default_random_engine& engine) { NeuralNetwork network; // 5x5 convolutional layer network.addLayer(FeedForwardLayer(xPixels, yPixels * colors, yPixels * colors)); // 2x2 pooling layer //network.addLayer(Layer(1, xPixels, xPixels)); // final prediction layer network.addLayer(FeedForwardLayer(1, network.getOutputCount(), 1)); network.initializeRandomly(engine); return network; }
static void createModel(ClassificationModel& model, const Parameters& parameters, std::default_random_engine& engine) { NeuralNetwork featureSelector; size_t totalPixels = parameters.xPixels * parameters.yPixels * parameters.colors; // derive parameters from image dimensions const size_t blockSize = std::min(parameters.xPixels, parameters.blockX) * std::min(parameters.yPixels, parameters.blockY) * parameters.colors; const size_t blocks = totalPixels / blockSize; const size_t blockStep = blockSize / parameters.blockStep; size_t reductionFactor = 4; // convolutional layer featureSelector.addLayer(Layer(blocks, blockSize, blockSize / reductionFactor, blockStep)); // pooling layer featureSelector.addLayer( Layer(1, blocks * featureSelector.back().getOutputBlockingFactor(), blocks * featureSelector.back().getOutputBlockingFactor())); // contrast normalization //featureSelector.addLayer(Layer(featureSelector.back().blocks(), // featureSelector.back().getOutputBlockingFactor(), // featureSelector.back().getOutputBlockingFactor())); featureSelector.initializeRandomly(engine); minerva::util::log("TestFirstLayerFeatures") << "Building feature selector network with " << featureSelector.getOutputCount() << " output neurons\n"; featureSelector.setUseSparseCostFunction(true); model.setNeuralNetwork("FeatureSelector", featureSelector); }
NNDecider( vector< Digit > trainingSet ) : nn(64) { nn.addLayer(10); for(int i = 0; i < 10; i++) { for(int j = -1; j < 64; j++) { nn.addConnection(0, i, j, 0); } } int N = 10; while(N--) { for(int i = 0; i < trainingSet.size(); i++) { learnProbColorGivenN(trainingSet[i]); } } }