Skip to content

Conversation

Copy link

Copilot AI commented Oct 15, 2025

概要

OpenBLASを使用した高速な行列演算により、C++でニューラルネットワークを簡単に扱えるライブラリを実装しました。

実装内容

主要コンポーネント

1. Matrix クラス (OpenBLAS統合)

  • OpenBLAS (CBLAS) を使用した高性能な行列乗算
  • 基本的な行列演算(加算、減算、乗算、転置)
  • 要素ごとの演算(積、除算)
  • 統計関数とユーティリティ関数
  • ファクトリーメソッド(zeros、ones、random、identity)

2. 活性化関数

  • Sigmoid、ReLU、Tanh、Softmax、Linear、Leaky ReLUをサポート
  • 各関数の導関数も実装(逆伝播に使用)

3. Layer クラス

  • 順伝播と逆伝播の実装
  • 複数の重み初期化戦略(Random、Xavier、He)
  • 勾配降下法による学習

4. NeuralNetwork クラス

  • 柔軟なネットワーク構造(レイヤーを動的に追加可能)
  • 単一サンプルとバッチ訓練のサポート
  • 損失関数(MSE、Cross-Entropy)

ビルドシステム

  • CMakeベースのビルド設定
  • OpenBLASの自動検出とリンク
  • 静的ライブラリの生成

使用例

#include "NeuralNetwork.hpp"

int main() {
    // ニューラルネットワークの作成
    NeuralNetwork::NeuralNetworkModel nn(0.5);
    
    // レイヤーの追加: 2入力 -> 4隠れ層 -> 1出力
    nn.addLayer(2, 4, NeuralNetwork::ActivationType::SIGMOID);
    nn.addLayer(4, 1, NeuralNetwork::ActivationType::SIGMOID);
    
    // XOR問題の訓練データ
    std::vector<NeuralNetwork::Matrix> inputs;
    std::vector<NeuralNetwork::Matrix> targets;
    
    inputs.push_back(NeuralNetwork::Matrix(2, 1, {0.0, 1.0}));
    targets.push_back(NeuralNetwork::Matrix(1, 1, {1.0}));
    
    // 訓練
    nn.trainBatch(inputs, targets, 10000);
    
    // 予測
    auto prediction = nn.predict(inputs[0]);
    return 0;
}

テスト・検証

  • 基本テスト: 行列演算、活性化関数、ニューラルネットワークの単体テストを実装
  • XOR例題: XOR問題を解くデモプログラムを実装
    • 10,000エポック後の損失: < 0.0002
    • 予測精度: 入力 (0,1) → 0.9876、入力 (0,0) → 0.0108

ドキュメント

  • 日本語の詳細なREADME
    • インストール手順
    • ビルド方法
    • 使用例
    • APIリファレンス
  • 便利なヘッダー (NeuralNetwork.hpp) で全機能を簡単にインクルード可能

技術的な特徴

  • C++17標準: モダンなC++機能を活用
  • 高性能: OpenBLASによる最適化された行列演算
  • 使いやすさ: シンプルで直感的なAPI設計
  • 拡張性: レイヤーや活性化関数を簡単に追加可能
  • 移植性: CMakeによるクロスプラットフォーム対応

ファイル構成

.
├── CMakeLists.txt              # ビルド設定
├── include/
│   ├── NeuralNetwork.hpp       # 便利な統合ヘッダー
│   └── NeuralNetwork/
│       ├── Matrix.h            # 行列クラス
│       ├── ActivationFunctions.h
│       ├── Layer.h
│       └── NeuralNetwork.h
├── src/                        # 実装ファイル
├── examples/
│   ├── example_xor.cpp        # XORデモ
│   └── test_basic.cpp         # 単体テスト
└── README.md                   # ドキュメント

動作確認

✅ CMakeビルド成功
✅ 全ての単体テスト通過
✅ XOR問題の学習成功(損失 < 0.0002)
✅ OpenBLASによる行列演算の動作確認

このライブラリにより、C++でニューラルネットワークを効率的かつ簡単に実装できるようになりました。

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • esm.ubuntu.com
    • Triggering command: /usr/lib/apt/methods/https (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

OpenBlasライブラリを使用して行列型を作成しニューラルネットワークをC++で簡単に扱えるようにするライブラリを作成します。


💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.

Copilot AI and others added 2 commits October 15, 2025 02:59
Co-authored-by: SanaeProject <129047150+SanaeProject@users.noreply.github.com>
Co-authored-by: SanaeProject <129047150+SanaeProject@users.noreply.github.com>
Copilot AI changed the title [WIP] Add matrix library for neural network in C++ using OpenBlas OpenBLASライブラリを使用した行列型とニューラルネットワークC++ライブラリの実装 Oct 15, 2025
Copilot AI requested a review from SanaeProject October 15, 2025 03:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants