17 #ifndef NEURALNETWORK_H_
18 #define NEURALNETWORK_H_
20 #include <Eigen/Dense>
27 template<
typename TYPE>
30 Eigen::Matrix<TYPE, Eigen::Dynamic, Eigen::Dynamic>
weights;
31 Eigen::Matrix<TYPE, Eigen::Dynamic, 1>
bias;
34 Eigen::Matrix<TYPE, Eigen::Dynamic, 1>
output;
41 weights.resize(inputSize, outputSize);
42 bias.resize(1,outputSize);
43 output.resize(1,outputSize);
51 template <
typename Derived>
52 NeuralLayer(
const Eigen::MatrixBase<Derived> &weightsIn,
const Eigen::MatrixBase<Derived> &biasIn) {
55 output.resize(bias.rows(),1);
66 virtual Eigen::Matrix<TYPE, Eigen::Dynamic, 1> &
activate(
const Eigen::Matrix<TYPE, Eigen::Dynamic, 1> &input) {
72 output.noalias()+=weights*input;
80 template<
typename TYPE>
95 template <
typename Derived>
107 virtual Eigen::Matrix<TYPE, Eigen::Dynamic, 1> &
activate(
const Eigen::Matrix<TYPE, Eigen::Dynamic, 1> &input) {
118 template<
typename TYPE>
133 template <
typename Derived>
134 TanhLayer(
const Eigen::MatrixBase<Derived> &weightsIn,
const Eigen::MatrixBase<Derived> &biasIn) :
NeuralLayer<
TYPE>(weightsIn, biasIn) {
145 virtual Eigen::Matrix<TYPE, Eigen::Dynamic, 1> &
activate(
const Eigen::Matrix<TYPE, Eigen::Dynamic, 1> &input) {
209 template<
typename TYPE>
224 int layerCount=layers.size();
227 layers[0]->activate(input);
228 for (
int i=1; i<layerCount; i++) {
235 #endif // NEURALNETWORK_H_