事前学習済みモデルの読み込み(ResNet, AlexNetなど)

Microsoft Cognitive Toolkit(CNTK)における転移学習とファインチューニングの一環として、「事前学習済みモデルの読み込み(ResNet, AlexNetなど)」は、モデル学習の初期段階を大幅に短縮し、限られたデータでも高精度を達成するために非常に重要です。以下にその詳細を説明します。


1. 事前学習済みモデルとは

事前学習済みモデル(pre-trained model)とは、ImageNetなどの大規模なデータセットであらかじめ学習され、一般的な特徴抽出能力を持つモデルのことです。CNTKでは以下のようなモデルが利用可能です:

  • ResNet-18/34/50/101/152

  • AlexNet

  • VGG

  • GoogLeNet など

これらは通常、CNTKのモデルギャラリーまたはオンプレミスで提供されている.modelファイル(拡張子 .model.dnn)として提供されます。


2. モデルの読み込み手順

2.1 モデルのダウンロード

CNTKの公式 GitHub もしくは Microsoft Research の提供するモデルをダウンロードします。

例(ResNet-18):

arduino
https://www.cntk.ai/Models/ResNet/ResNet_18.model

2.2 モデルの読み込み(load_model

python
from cntk.ops.functions import load_model # 事前学習済みモデルを読み込む pretrained_model = load_model("ResNet_18.model")

これで、モデル全体(入力層~出力層)をFunctionとして利用可能です。


3. 特徴抽出部分の抽出

通常は出力層(分類器)を除いた特徴抽出層のみを利用し、新しいタスクに応じて出力層を置き換えます。

3.1 特定の中間層まで読み込む

CNTKでは名前指定で中間層までを取得可能です。

python
# "z.x" は通常、出力直前の特徴ベクトル feature_node_name = "z.x" feature_extractor = pretrained_model.find_by_name(feature_node_name)

4. 新しい出力層の接続

転移学習では、出力層を新しいクラス数に合わせて構築します。

python
from cntk.layers import Dense from cntk.ops import relu, input_variable # 入力サイズと出力クラス数 input_dim = 224 num_classes = 10 # 新しい入力変数とネットワークの定義 input_var = input_variable((3, input_dim, input_dim)) # RGB画像入力 normalized_input = input_var / 255.0 # 正規化 # 特徴抽出 + 新しい全結合層 features = feature_extractor(normalized_input) new_output = Dense(num_classes, activation=None)(features)

5. ファインチューニング

必要に応じて、**特徴抽出層の重みも再学習(fine-tuning)**させる場合は、以下の点に注意します:

  • learnerの対象にfeature_extractorのパラメータを含める。

  • 学習率を低めに設定し、過学習を防ぐ。

python
from cntk.train import Trainer from cntk.learners import sgd, learning_rate_schedule, UnitType lr_schedule = learning_rate_schedule(0.001, UnitType.minibatch) learner = sgd(new_output.parameters, lr_schedule) trainer = Trainer(new_output, (loss_function, eval_function), [learner])

6. モデルの保存

学習後、再保存する場合は以下のようにします。

python
new_output.save("finetuned_model.dnn")

まとめ

ステップ 内容
1 CNTK用の事前学習済みモデルをダウンロード
2 load_model()で読み込み
3 特徴抽出部(中間層)を抽出
4 新しい出力層を接続
5 全体または出力層のみを学習
6 モデルを保存して推論に活用

CNTKは、明示的な関数構成と柔軟なグラフ構築が可能なため、転移学習とファインチューニングに非常に適しています。必要に応じてレイヤーの凍結や解凍も細かく制御可能です。

生成日:2025/05/23