从头开始​​的神经网络 - 第 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 ] ;

浮点输出;

浮点 输出 ; 浮点 ;