未来を創る、テックコミュニティー

代表通信~AIに必須?HDF5について

草場代表
2020/07/22

こんばんは。代表の草場です。

本日は週一恒例の地図の会でした。Google Mapを分解してみよう、がテーマで面白かったです。まだまだ基礎知識への理解が必須。引き続き、令和の伊能忠敬、黒さんに教えを仰ぎます。

さて、PyTorchに関して、再度勉強しています。HDF5を扱う必要が出てきました。公式によると、
「h5pyパッケージは、HDF5バイナリデータフォーマットへのPythonicインターフェースです。HDF5を使うと、膨大な量の数値データを保存することができ、NumPyからそのデータを簡単に操作することができます。例えば、ディスクに保存されている数テラバイトのデータセットを、あたかも実際のNumPy配列であるかのようにスライスすることができます。何千ものデータセットを一つのファイルに保存し、好きなように分類したりタグ付けしたりすることができます。」

大量のデータを扱うDeep Learningには必須ですね。

HDF5ファイルは以下の種類のオブジェクトを格納するコンテナです。
1.配列のようなデータの集合体であるデータセット
2.データセットや他のグループを保持するフォルダのようなコンテナであるグループ

h5pyを使うときに覚えておくべき最も基本的なことは、以下の一つ。
グループは辞書のように動作し、データセットはNumPyの配列のように動作する

簡単に見えますね。以下公式のスタートガイドです。

誰かがあなたに mytestfile.hdf5 という HDF5 ファイルを送ってきたとします。最初に必要なことは、ファイルを開いて読むことです。

>>>import h5py
>>>f = h5py.File(‘mytestfile.hdf5’, ‘r’)

ファイルオブジェクトはあなたの出発点です。h5py.FileはPythonの辞書のように動作することを覚えておいてください。そのため、
>>> list(f.keys())
を見ると、fのキー、
[‘mydataset’] が返されます。ファイルの中に、mydatasetというデータセットが1つあるということですね。データセットをDatasetオブジェクトとして調べてみましょう。

>>> dset = f[‘mydataset’]

得られたオブジェクトは配列ではなく、HDF5のデータセットです。NumPy配列のように、データセットには形状とデータ型の両方があります。

>>>dset.shape
(100,)
>>> dset.dtype
dtype(‘int32’)

なるほどな。
また、配列スタイルのスライスもサポートしています。ファイル内のデータセットからデータを読み書きする方法です。

>> dset[…] = np.arange(100)
>>> dset[0] 0
>>> dset[10] 10
>>> dset[0:100:10] array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])

使いやすいですね。

明日もPyTorch。

この記事を書いた人
草場代表
エディター