Commit eb1ea6ef862693c6e90c2db6feffde018d07dfd1

Authored by Scott Klum
1 parent f3b973b6

Added MLP initialization params

Showing 1 changed file with 22 additions and 3 deletions
openbr/plugins/nn.cpp
... ... @@ -50,27 +50,46 @@ static void loadMLP(CvANN_MLP &mlp, QDataStream &stream)
50 50 * \ingroup transforms
51 51 * \brief Wraps OpenCV's multi-layer perceptron framework
52 52 * \author Scott Klum \cite sklum
  53 + * \brief http://docs.opencv.org/modules/ml/doc/neural_networks.html
53 54 */
54 55 class MLPTransform : public MetaTransform
55 56 {
56 57 Q_OBJECT
57 58  
  59 + Q_ENUMS(Kernel)
  60 + Q_PROPERTY(Kernel kernel READ get_kernel WRITE set_kernel RESET reset_kernel STORED false)
  61 + Q_PROPERTY(float alpha READ get_alpha WRITE set_alpha RESET reset_alpha STORED false)
  62 + Q_PROPERTY(float beta READ get_beta WRITE set_beta RESET reset_beta STORED false)
58 63 Q_PROPERTY(QStringList inputVariables READ get_inputVariables WRITE set_inputVariables RESET reset_inputVariables STORED false)
59   - BR_PROPERTY(QStringList, inputVariables, QStringList())
60 64 Q_PROPERTY(QStringList outputVariables READ get_outputVariables WRITE set_outputVariables RESET reset_outputVariables STORED false)
61   - BR_PROPERTY(QStringList, outputVariables, QStringList())
62 65 Q_PROPERTY(QList<int> neuronsPerLayer READ get_neuronsPerLayer WRITE set_neuronsPerLayer RESET reset_neuronsPerLayer STORED false)
  66 +
  67 +public:
  68 +
  69 + enum Kernel { Identity = CvANN_MLP::IDENTITY,
  70 + Sigmoid = CvANN_MLP::SIGMOID_SYM,
  71 + Gaussian = CvANN_MLP::GAUSSIAN};
  72 +
  73 +private:
  74 + BR_PROPERTY(Kernel, kernel, Sigmoid)
  75 + BR_PROPERTY(float, alpha, 1)
  76 + BR_PROPERTY(float, beta, 1)
  77 + BR_PROPERTY(QStringList, inputVariables, QStringList())
  78 + BR_PROPERTY(QStringList, outputVariables, QStringList())
63 79 BR_PROPERTY(QList<int>, neuronsPerLayer, QList<int>() << 1 << 1)
64 80  
65 81 CvANN_MLP mlp;
66 82  
67 83 void init()
68 84 {
  85 + if (kernel == Gaussian)
  86 + qWarning("The OpenCV documentation warns that the Gaussian kernel, \"is not completely supported at the moment\"");
  87 +
69 88 Mat layers = Mat(neuronsPerLayer.size(), 1, CV_32SC1);
70 89 for (int i=0; i<neuronsPerLayer.size(); i++)
71 90 layers.row(i) = Scalar(neuronsPerLayer.at(i));
72 91  
73   - mlp.create(layers,CvANN_MLP::SIGMOID_SYM, 1, 1);
  92 + mlp.create(layers,kernel, alpha, beta);
74 93 }
75 94  
76 95 void train(const TemplateList &data)
... ...