从头开始的神经网络 - 第 1 部分
如何使用 C++ 和 OpenCL 构建神经网络库
来源:AI夏令营全连接神经网络
让我们从头开始构建一个神经网络库。我的意思是为什么不呢?你可能会说:噗……有什么大不了的……使用 Python 和 Numpy 只需几个小时。如果我告诉你我将使用 C++,你会怎么想?不,我在开玩笑。我要用 C。
原因是我想在 GPU 上训练我的网络,而 GPU 不懂 Python,甚至不懂 C++。我的计划是使用 OpenCL 和 C++ 构建一个功能齐全的库来创建你自己的神经网络并对其进行训练。为了让它更有趣一点,为什么不实现一个卷积神经网络,而不是一个简单、无聊的全连接神经网络呢?但首先要做的事情是。
OpenCL我们不要立即深入研究 GPU 的内核代码。首先我们应该构建我们的库骨架。
OpenCL::initialize_OpenCL();std::vector > 输入,目标;std::vector > 测试输入;std::vector 测试目标;ConvNN m_nn;std::vector netVec;netVec = { 1024,10 };m_nn.createFullyConnectedNN(netVec, 1, 32); m_nn.trainFCNN(输入,目标,测试输入,测试目标,50000);m_nn.trainingAccuracy(测试输入,测试目标,2000, 1);
OpenCL::initialize_OpenCL();
OpenCL :: 初始化_OpenCL ( ) ;std::vector > 输入,目标;
std :: 向量 < std :: 向量 < 浮点 > > 输入 , 目标 ;std::vector > testinputs;
std :: 向量 < std :: 向量 < 浮点 > > testinputs ;std::vector testtargets;
std :: 矢量 < float > testtargets ;ConvNN m_nn;
ConvNN m_nn ;std::vector netVec;
std :: 向量 < int > netVec ;netVec = { 1024,10 };
netVec = { 1024 , 10 } ;m_nn.createFullyConnectedNN(netVec, 1, 32);
m_nn 。 createFullyConnectedNN ( netVec , 1 , 32 ) ;m_nn.trainFCNN(输入、目标、测试输入、测试目标、50000);
m_nn 。 trainFCNN ( 输入 , 目标 , 测试输入 , 测试目标 , 50000 ) ;m_nn.trainingAccuracy(testinputs, testtargets, 2000, 1);
m_nn 。 训练精度 ( 测试输入 , 测试目标 , 2000 , 1 ) ;节点和层
typedef struct Node {
typedef struct 节点 {int numberOfWeights;
int numberOfWeights ;float weights[1200];
float weights [ 1200 ] ;浮点输出;
浮点 输出 ; 浮点 ;