簡體   English   中英

在 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

其中每個節點指向邊中的一個部分,保存該特定節點的邊。

通過這樣做,您很有可能成為本地緩存,如果您正確設置了網絡的初始化您只需請求動態 memory 兩次。

這假設網絡不會改變(即在使用它時會創建新節點,並且不會創建新邊)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM