在C++中用反向传播实现隐层神经网络的最佳数据结构是什么
What are the optimal data structures for implementing a hidden layer neural network with backpropagation in C++?
如果这看起来像是重复的帖子,我很抱歉,但我想知道在C++中实现和存储一个具有权重和偏差以及反向传播的简单隐层神经网络的最佳数据结构是什么。
在我的脑海里,我在想以下几点:
- 链表
- 指针数组
这两个似乎在很大程度上等同于我。我也经常看到人们使用3D阵列/向量来存储权重和偏差,但这对我来说似乎是浪费,因为你要么被限制在每层节点数量相同的神经网络中,要么在你的3D阵列中为不存在的节点连接存储了很多零项。
我看到的一个选项是这样做的:节点有一个线性数组,所有边有一个。草图:
struct Node {
std::size_t edgeBegin;
std::size_t edgeEnd;
};
struct Edge {
std::size_t to;
float weight;
};
struct Layer {
std::size_t layerBegin;
std::size_t layerEnd;
};
struct Network {
std::vector<Node> nodes;
std::vector<Edge> edges;
std::array<Layer,3> layers;
};
在填充这个结构之后,它可能看起来像这样:
nodes: [n0, n1, n2, n3, n4, n5, n6, n7]
layers: [(0, 2), (2, 5), (5, 8)]
-> input layer has two nodes, hidden has three, output layer has three
其中每个节点指向边中的一个部分,保持该特定节点的边。
通过这样做,您很有可能缓存到本地,如果正确设置了网络初始化,您只需要请求两次动态内存。
这假设网络不会改变(即,在使用网络时创建新节点,并且没有创建新边(。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 神经网络不学习.卡在50%
- OpenCV 3 中的神经网络权重
- 用 Python 训练神经网络并在 C++ 中部署
- 部署在张量流中训练的神经网络来火炬C++的最佳方法是什么?
- 我不确定如何引用此神经网络训练方法中的权重
- 如何在不同的平台/技术中使用经过训练的神经网络?
- 为什么我的神经网络停滞在一定的成本附近?
- 具有静态 std::array 的神经网络比使用动态 C 数组的神经网络慢
- 为什么小型和大型加载的神经网络占用相同数量的 RAM?
- 一维阵列的运动检测(神经网络或其他选项?
- 神经网络和图像分类
- 使用在R中训练的神经网络来预测C 中的新数据
- 神经网络高估了手写数字的输出
- 如何将可重读的神经网络导出到C 中的文件
- 如何在C++程序中连接 MATLAB 中构建的经过训练的神经网络
- 为什么 dlib 的神经网络 xml 导出包含的层参数与训练器指定的参数不同?
- 如何在Caffe中对复发性卷积神经网络进行建模
- Caffe Imagedata神经网络基本示例无法解析模型文件
- 对于tanh激活函数神经网络,对负/非数值数据进行归一化的最佳方法是什么