.h5ファイルって何?AIのセーブデータ?新人エンジニアのためのHDF5超入門
こんにちは。ゆうせいです。
機械学習のコードを読んだり書いたりしていると、model.save('my_model.h5')
のような記述や、フォルダ内に存在する .h5
という見慣れない拡張子のファイル。あなたも一度は目にしたことがあるのではないでしょうか?
「これは一体、何者なんだろう?」「ダブルクリックしても開けないし、謎だな…」
そう感じたかもしれませんね。
この .h5 ファイル、ただのデータ保存ファイルだと侮ってはいけません!実はこれ、科学技術計算の世界で非常にパワフルな「魔法の箱」なんです。
今日は、この .h5 ファイルの正体を、一緒に解き明かしていきましょう!
.h5ファイルの正体は「デジタル整理棚」
まず、このファイルの正式名称からお話ししますね。
.h5 というのは、HDF5 (Hierarchical Data Format 5) というデータフォーマットの拡張子です。
…といっても、名前だけではピンとこないですよね。
例えるなら、HDF5は「高性能なデジタルの整理棚」のようなものです。
普通のファイル、例えばCSVファイルが「表が印刷された一枚の紙」だとします。
それに対して、HDF5ファイルは、引き出しや仕切りがたくさんついた、大きな「整理棚」そのものなんです。
- グループ (Group):整理棚の「引き出し」に相当します。カテゴリーごとにデータを分けることができます。さらに、引き出しの中に小さな「仕切り箱(サブグループ)」を作って、もっと細かく整理することも可能です。
- データセット (Dataset):引き出しや仕切り箱の中にしまう「書類」です。これが実際のデータ本体で、巨大な数値の配列(NumPy配列など)やテーブルを格納できます。
- 属性 (Attribute):整理棚の引き出しや、中の書類にペタッと貼っておける「付箋」のようなものです。「このデータはバージョン1.0です」「作成日は2025年10月7日です」といったメモ(メタデータ)を、好きな場所に書き残せます。
つまり、HDF5は、関連する様々な種類のデータを、フォルダのような階層構造で整理しながら、一つのファイルにまとめて格納できる、非常に優れたフォーマットなのです!
なぜ機械学習でよく使われるの?
では、なぜこの「デジタル整理棚」が、特に機械学習の世界で重宝されるのでしょうか?
考えてみてください。あなたが訓練したAIモデルを「セーブ」したいとき、何を残す必要があるでしょう?
- モデルの構造(設計図):どんな層を、どんな順番で組み合わせたかという情報。
- 学習済みの重み(知識):膨大な計算の末に得られた、賢さの源となるパラメータの塊。
- オプティマイザの状態:もし追加で学習を再開したい場合に備えて、その時点での設定を記憶しておく必要があります。
これらは全部、種類が違うデータですよね。
普通のファイル形式だと、「設計図はJSONファイル」「重みはバイナリファイル」…というように、複数のファイルをバラバラに管理する必要があって大変です。
そこでHDF5の出番です!
「設計図」用の引き出し、「重み」用の引き出し、「オプティマイザ」用の引き出しを用意して、関連データ一式をまるごと一つの .h5 ファイルにポン!と収納できるのです。
このオールインワンの手軽さから、Kerasなどの多くの機械学習フレームワークで、モデルの保存形式として採用されてきたというわけですね。
メリットとデメリットを知っておこう
この便利なHDF5ですが、もちろん万能ではありません。良い点と、少し注意が必要な点をしっかり理解しておきましょう。
メリット
- 自己完結で管理が楽先ほど説明したように、様々な種類のデータを一つのファイルにまとめられるため、管理が非常に楽です。このファイル一つを渡せば、モデルの復元に必要なものがすべて揃います。
- 巨大データに強いHDF5は、テラバイト級の巨大なデータセットを扱うために設計されています。ファイル全体をメモリに読み込むことなく、必要な部分だけをスライスして高速に読み書きできるので、メモリが少ないマシンでも効率的に作業できます。
- 互換性が高いPython、C++、Java、MATLABなど、様々なプログラミング言語でサポートされています。ある言語で作成した .h5 ファイルを、別の言語で問題なく読み込めるのは大きな強みです。
デメリット
- 専用の道具が必要CSVファイルのように、普通のテキストエディタで気軽に中身を見ることはできません。Pythonであれば h5py のような専用のライブラリを使って、プログラム経由でアクセスする必要があります。
- シンプルなデータには大げさかもただの小さな表を保存したいだけなのに、わざわざ「高性能な整理棚」を持ち出すのは少し大げさですよね。そのような場合は、誰でもExcelなどで開けるCSVファイルの方が、シンプルで分かりやすいでしょう。
- 新しい標準の登場TensorFlowの世界では、近年 .h5 形式よりも、ディレクトリ(フォルダ)ベースの SavedModel 形式が推奨される傾向にあります。.h5 が時代遅れというわけでは決してありませんが、最新の動向として知っておくと良いでしょう。
Pythonで中身を覗いてみよう
百聞は一見に如かず。h5py
というライブラリを使って、実際にPythonで .h5
ファイルを作って、中身を覗いてみましょう。
import h5py
import numpy as np
# --- .h5ファイルを作成してデータを書き込んでみます ---
# 'w'は書き込み (write) モードを意味します
with h5py.File('my_digital_shelf.h5', 'w') as f:
# 'model_weights' という名前の「引き出し」を作成
grp = f.create_group('model_weights')
# 引き出しの中に「書類」として2つのデータセットを保存
grp.create_dataset('layer1', data=np.random.rand(10, 5))
grp.create_dataset('layer2', data=np.random.rand(5, 2))
# 整理棚全体に「付箋」でメモを残します
f.attrs['author'] = 'Yusei'
f.attrs['version'] = 1.2
print('.h5ファイルが作成されました!')
# --- 今度は作成したファイルからデータを読み込んでみます ---
# 'r'は読み込み (read) モードです
with h5py.File('my_digital_shelf.h5', 'r') as f:
# 'model_weights'の引き出しの中身一覧を表示
print('引き出しの中身:', list(f['model_weights'].keys()))
# 'layer1'の書類データを読み込み
layer1_weights = f['model_weights/layer1'][:]
print('layer1の書類の形:', layer1_weights.shape)
# 付箋の内容を確認
author = f.attrs['author']
version = f.attrs['version']
print(f'作成者: {author}, バージョン: {version}')
このコードを実行すると、.h5
ファイルが作られ、その構造と中身をプログラムから確認できるはずです。簡単でしょう?
今後の学習の指針
.h5 ファイルの正体が「デジタル整理棚」であることが、少しイメージできたでしょうか?
この知識をさらに深めるために、次に何を学ぶべきか指針を示しますね。
- h5pyライブラリを深掘りするまずは、今回使った h5py の公式ドキュメントを読んでみてください。データの圧縮方法や、巨大なデータを少しずつ読み込む方法(スライシング)など、より高度な使い方がたくさん載っています。
- 他のデータフォーマットも知る.h5 は強力ですが、万能薬ではありません。それぞれの得意分野を理解するために、他の有名なデータフォーマットも学んでみましょう。
- CSV: シンプルな表形式データなら今でも最強です。
- JSON: Web APIなどで使われる、人間にも読みやすい階層構造データです。
- Parquet: 大規模データ分析の世界でよく使われる、列指向の高性能フォーマットです。
- フレームワークの標準保存形式を調べるあなたが今使っている機械学習フレームワーク(TensorFlow, PyTorchなど)が、モデル保存のためにどの形式を「推奨」しているか調べてみましょう。フレームワークの思想を理解する良いきっかけになりますよ。
.h5 ファイルは、一見とっつきにくいかもしれませんが、その正体と使い方を知れば、あなたのデータ管理能力を格段に上げてくれる、頼もしい味方になります。
恐れずに、どんどん使って、仲良くなってくださいね!