使用Eigen实现简单的全连接网络

基于 Eigen 实现简单的全连接网络

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <Eigen/Core>

struct Layer
{
typedef Eigen::MatrixXf WEIGHT;
typedef Eigen::VectorXf BIAS;
WEIGHT weight;
BIAS bias;
};

float relu(float x)
{
return x > 0 ? x : 0;
}

class Network
{
public:
Network() {}
~Network() {}
Eigen::VectorXf forward(const Eigen::VectorXf& x);
std::vector<Layer> layers_;
}

Eigen::VectorXf Network::forward(const Eigen::VectorXf& x)
{
std::function<float(float)> activate = relu;
Eigen::VectorXf x = stat;
for (size_t i = 0; i < layers_.size(); ++i) {
Eigen::VectorXf y = layers_[i].weight * x + layers_[i].bias;
if (i + 1 != layers_.size()) y = y.unaryExpr(activate);
x = y;
}
return x;
}

参考