首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

tiny_cnn 卷積神經網絡源碼深度解析(9):partial_connected_layer 反向傳播與屬性計算

     編輯:關於C++

類結構回顧

partial_connected_layer 是卷積層與下采樣層的公共基類,繼承自 layer。核心成員為五個雙層 vector 映射表,記錄權重、輸出、輸入、偏置的索引關係。

構造函數

partial_connected_layer(layer_size_t in_dim, layer_size_t out_dim,
    size_t weight_dim, size_t bias_dim, float_t scale_factor = 1.0)
    : layer(in_dim, out_dim, weight_dim, bias_dim),
      weight2io_(weight_dim), out2wi_(out_dim),
      in2wo_(in_dim), bias2out_(bias_dim),
      out2bias_(out_dim), scale_factor_(scale_factor) {}

層屬性計算函數

  • fan_in_size():返回連接數(權重總數)
  • fan_out_size():返回輸出特征維度
  • weight_size():返回可學習參數數(權重+偏置)

前向傳播實現

採用 Lambda 表達式封裝三階段:

  1. 卷積運算 + 係數擴展 + 加偏置
  2. 激活函數處理
  3. 遞歸傳遞給下一層

關鍵代碼片段:

for_i(parallelize_, out_size_, [&](int i) {
    // 卷積核心運算
    a[i] = 0;
    for (int c = 0; c < in_size_; ++c)
        a[i] += W_[c*out_size_ + i] * in[c];
    a[i] += b_[i];
});
for_i(parallelize_, out_size_, [&](int i) {
    out[i] = h_.f(a, i);  // 激活函數
});
auto& next_out = filter_.filter_fprop(out, index);
return next_ ? next_->forward_propagation(next_out, index) : next_out;

反向傳播預告

back_propagation 涉及誤差求導、靈敏度傳遞、權重梯度累積,結構較複雜,將在後續專文詳細解析(挖坑待填)。

流式構造注意事項

tiny_cnn 採用流式 API 構建網絡(如 net << conv << pool << fc),調試時難以觀察中間層初始化參數,需特別注意。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved