はじめに
Kaggleで実験を重ねていると、学習用のノートブックがどんどん複雑になり、「学習済みモデルを使って、新しいデータで推論だけしたい」という場面が出てきます。そんな時、学習と推論のノートブックを分けて管理できると非常に便利です。
本記事では、Kaggleの
ノートブックの出力を別のノートブックの入力にするという、
Kaggleならではの強力なデータ連携機能について、具体的な手順を解説します。
なぜノートブックを分割するのか?
- 実験管理の効率化: 学習用ノートブックは特徴量エンジニアリングやモデルのチューニングに専念させ、推論用ノートブックは予測処理に特化させることで、コードの見通しが良くなります。
- 推論時間の短縮: Kaggleのコンペでは、提出時に推論ノートブックの実行時間に制限(例: 9時間)があります。学習のプロセスを分離しておくことで、推論を時間内に完了させやすくなります。
- 再利用性の向上: 一度学習させたモデルを、異なる推論ロジックで再利用するのが簡単になります。
データ連携の全体像:リレー競走に例える
このプロセスは、リレー競走に似ています。
- 第1走者(学習ノートブック): 大量の訓練データを使って走り込み(=モデルの学習)、学習済みモデルや設定ファイルといった**「バトン」**を生成します。
- バトンパス(Kaggleの連携機能): 第1走者が生成した「バトン」を、Kaggleが次の走者に渡せるように準備します。
- 第2走者(推論ノートブック): 「バトン」を受け取り、それを使ってテストデータに対する予測(=ゴール)を目指して走ります。
Step 1: 学習ノートブックで成果物(バトン)を保存する
まず、学習用ノートブックで、推論時に必要となるすべてのファイルを保存する処理を記述します。これらが「バトン」の中身になります。
今回の例では、以下のファイルを保存しています。
# ==============================================================================
# セル 16: 学習完了メッセージと保存ファイルの確認
# ==============================================================================
print("\n" + "="*60)
print("学習フェーズ完了")
print("="*60)
# 保存されたファイルの一覧表示
saved_files = [
'gesture_cnn_model_final.h5', # 学習済みモデル本体
'gesture_classes.npy', # クラスラベルの対応表
'sequence_maxlen.npy', # シーケンスの最大長
'feature_cols.pkl', # 学習に使用した特徴量のリスト
'preprocess_function.pkl', # 前処理関数
'cv_results.pkl' # 交差検証の結果
]
print("推論用に保存されたファイル:")
for file in saved_files:
if os.path.exists(file):
file_size = os.path.getsize(file) / (1024*1024) # MB単位
print(f" ✓ {file} ({file_size:.2f} MB)")
else:
print(f" ✗ {file} (見つかりません)")
このコードを含むノートブックを、画面右上の「Save Version」ボタンからコミットします。タイプは「Save & Run All (Commit)」を選択してください。
コミットが完了すると、このノートブックの出力ページ(Viewer)の「Data」セクションに、上記で保存したファイル群が生成されていることを確認できます。
Step 2: 推論ノートブックで成果物(バトン)を受け取る
次に、推論用の新しいノートブックを作成します。そして、先ほどの「バトン」をこのノートブックに渡します。
- 推論ノートブックの編集画面右側にある「+ Add data」ボタンをクリックします。
- ポップアップ画面が表示されたら、「Notebook Output Files」タブを選択します。
- 自分のノートブック一覧が表示されるので、先ほどコミットした学習ノートブックを探し、「Add」ボタンを押します。
これで「バトンパス」は完了です。学習ノートブックの出力ファイル一式が、この推論ノートブックの環境から読み取れるようになりました。
Step 3: 推論ノートブックでファイルを読み込んで使用する
推論ノートブックに追加されたファイルは、/kaggle/input/{学習ノートブック名}/
というパスからアクセスできます。
推論スクリプトでは、これらのファイルを読み込んで、学習時と全く同じ条件で予測処理を実行します。
# ==============================================================================
# セル 2: 学習済みモデルと設定ファイルの読み込み
# ==============================================================================
print("学習済みモデルと設定ファイルを読み込み中...")
# ★★★ ここで学習ノートブックからのファイルを読み込む ★★★
# 実際には /kaggle/input/{notebook-name}/gesture_cnn_model_final.h5 のように
# パスを指定するか、スクリプトが自動で探索します。
# 学習済みモデルの読み込み
model = load_model("gesture_cnn_model_final.h5")
# 設定データの読み込み
maxlen = int(np.load("sequence_maxlen.npy"))
gesture_classes = np.load("gesture_classes.npy", allow_pickle=True)
with open('feature_cols.pkl', 'rb') as f:
feature_cols = pickle.load(f)
print("すべての設定ファイルの読み込み完了")
このように、学習済みモデル(model
)、シーケンス長(maxlen
)、クラス名(gesture_classes
)、特徴量カラム(feature_cols
)など、学習時と全く同じオブジェクトをファイルから復元することで、一貫性のある推論が可能になります。
まとめ
Kaggleのノートブック間データ連携は、一見複雑に見えるかもしれませんが、一度慣れてしまえば非常に強力なツールです。
- 学習ノートブック: モデルや設定ファイルを出力する。
- 推論ノートブック: 学習ノートブックの出力を入力として追加し、ファイルを読み込む。
このシンプルなルールをマスターすることで、Kaggleでの実験がより整理され、効率的になること間違いありません。ぜひ試してみてください。