金天,写于北京中关村,想自己建造一套人工智能框架,遂从这里开始一个系列,C++实现

Eigen3 导入和安装

首先必须说明,eigen3好像我目前还没有找到比较好的安装方式,也许从apt可以直接安装,但是没有测试。下面这段代码是将eigen3安装到/usr/local/include 下面,因为eigen里面都是头文件实现的,因此直接cp到include下面即可,也是非常的方便。

1
2
3
4
5
cd ~/Downloads
wget http://bitbucket.org/eigen/eigen/get/3.3.4.tar.bz2
sudo tar -xvjf ~/Downloads/3.3.4.tar.bz2 -C /usr/local/include
sudo mkdir /usr/local/include/eigen3
sudo mv /usr/local/include/eigen-eigen-*/Eigen /usr/local/include/eigen3

然后在cmake里面或者说直接在c++源文件里面都可以直接include,如果使用cmake编译的话应该这样:

1
2
3
find_package( PkgConfig )
pkg_check_modules( EIGEN3 REQUIRED eigen3 )
include_directories( ${EIGEN3_INCLUDE_DIRS} )

这样就可以自动自动find eigen这个package了。

Eigen3 - 让我们实现一个一层的神经网络吧

既然是自己动手实现神经网络框架,那实现一个一层的神经网络应该是必须要完成的事情。实现神经网络其实也不难。经典公式:

1
y = W*x + b

我们需要其实就是这个W的矩阵,我们给一对数据x和y,计算W*x + b和真实y的差值,然后再根据一个公式,使用误差来更新W,也就是我们的损失函数?(窝草,看来还挺麻烦,这里的怎么进行反向传播的?)。不管怎么说,让我们先用eigen来写一个层吧。

从开始到放弃

由于写到一半发现这个牛逼的Eigen库根本不支持多维的矩阵,于是乎只能作罢,看来在c++里面构建一个类似于numpy一样的多维矩阵库还是一件非常麻烦的事情啊,如果同志们有好的建议可以向我提一下。