Netクラスの使い方(Python / C++)

CaffeのNetクラスは、ニューラルネットワークモデルを定義・読み込み・実行するための中心的なクラスです。PythonおよびC++の両方のインターフェースで利用可能であり、訓練や推論、重みのロード・保存、レイヤーへのアクセスなど多くの機能を提供します。以下に、PythonとC++におけるNetクラスの使い方をそれぞれ詳しく説明します。


PythonにおけるNetクラスの使い方(PyCaffe)

1. インポートとネットワークのロード

python
import caffe # モード設定(CPUまたはGPU) caffe.set_mode_cpu() # または caffe.set_mode_gpu() # ネットワークの読み込み net = caffe.Net('deploy.prototxt', 'weights.caffemodel', caffe.TEST)
  • 'deploy.prototxt':ネットワーク定義ファイル(学習/推論の構造を定義)

  • 'weights.caffemodel':学習済みの重みファイル

  • caffe.TEST:推論モード(訓練にはcaffe.TRAIN

2. 入力データのセット

python
# 画像などのデータをネットワークに入力 net.blobs['data'].data[...] = input_data
  • blobs:各レイヤーの入力/出力を保持する辞書

  • 'data':ネットワーク定義における入力名(通常は “data”)

3. 順伝播(フォワード)

python
output = net.forward()
  • 出力は辞書型で、各出力レイヤーの名称がキーになる

4. 逆伝播(訓練時)

python
net.backward()
  • net.blobs['label'].data[...] にラベルをセットしてから呼ぶ

5. 重みの保存

python
net.save('new_weights.caffemodel')

C++におけるNetクラスの使い方

C++では、CaffeのNetクラスはテンプレートクラス(Net<float>など)として使います。主にcaffe::Net名前空間内にあります。

1. ヘッダと名前空間

cpp
#include <caffe/caffe.hpp> using namespace caffe;

2. モード設定とネットの初期化

cpp
Caffe::set_mode(Caffe::CPU); // または Caffe::set_mode(Caffe::GPU); Net<float> net("deploy.prototxt", TEST); // TEST or TRAIN net.CopyTrainedLayersFrom("weights.caffemodel");

3. 入力データの設定

cpp
std::vector<Blob<float>*> input_blobs = net.input_blobs(); float* input_data = input_blobs[0]->mutable_cpu_data(); // input_data に画像データなどをセット

4. 順伝播の実行

cpp
net.Forward();

5. 出力の取得

cpp
const boost::shared_ptr<Blob<float>> output_blob = net.blob_by_name("prob"); const float* result = output_blob->cpu_data();

補足事項

  • Pythonでは直感的で簡潔なAPIが提供されているため、デバッグやプロトタイピングに便利です。

  • C++ではパフォーマンス重視で、より細かい制御が可能です。

  • Netオブジェクトの内部にはlayers(各レイヤー)やparams(学習可能パラメータ)といった構造もあります。

生成日:2025/05/23