Files
DbNeuralNet/neuralnetlib/neuron.h
2018-09-16 06:19:09 +02:00

57 lines
1.5 KiB
C++

#pragma once
#include <QObject>
#include <QMap>
#include <qglobal.h>
#include "interfaces/ineuron.h"
class NeuralLayer;
class INeuronSignal;
class NeuralFactor;
class Neuron : public QObject, public INeuron
{
Q_OBJECT
Q_PROPERTY(QMap<INeuronSignal*,NeuralFactor*> input READ input)
Q_PROPERTY(qreal output READ output WRITE setOutput NOTIFY outputChanged)
Q_PROPERTY(qreal error READ error WRITE setError NOTIFY errorChanged)
Q_PROPERTY(NeuralFactor* bias READ bias)
public:
explicit Neuron(qreal bias, NeuralLayer *neuralLayer);
// INeuronRepetor interface
QMap<INeuronSignal *, NeuralFactor *> &input() Q_DECL_OVERRIDE;
const QMap<INeuronSignal *, NeuralFactor *> &input() const Q_DECL_OVERRIDE;
// INeuronSignal interface
qreal output() const Q_DECL_OVERRIDE;
void setOutput(qreal output) Q_DECL_OVERRIDE;
// INeuron interface
void pulse() Q_DECL_OVERRIDE;
void applyLearning(qreal learningRate) Q_DECL_OVERRIDE;
void initializeLearning() Q_DECL_OVERRIDE;
qreal error() const Q_DECL_OVERRIDE;
void setError(qreal error) Q_DECL_OVERRIDE;
NeuralFactor *bias() Q_DECL_OVERRIDE;
const NeuralFactor *bias() const Q_DECL_OVERRIDE;
Q_SIGNALS:
void outputChanged(qreal output);
void errorChanged(qreal error);
void lastErrorChanged(qreal lastError);
private:
static inline qreal sigmoid(qreal value);
NeuralLayer *m_neuralLayer;
QMap<INeuronSignal *, NeuralFactor *> m_input;
qreal m_output;
qreal m_error;
NeuralFactor *m_bias;
};