- TFRecordファイルの作成方法
今回は、機械学習で扱いやすいように、データをシリアライズしてTFRecordファイルを作成する方法を解説していきます。
TFRecordを作る
TFRecordを作るには、「データの整形」→「tf.train.Exampleに変換」→「TFRecordファイルに書き込み」の順に行っていきます。
featureなど、TFRecordの構造についてはこちらの記事で解説しています。
ここでは、画像データを例にTFRecordファイルを作成していきます。
データの整形
tf.train.Exampleには1次元配列しか保存できないので、画像データをバイナリ化していきます。
画像はネコと犬の写真1枚ずつの計2枚です。
open関数で画像を開けば、バイト列が取得できます。
import tensorflow as tf
cat_image_string = open("cat.jpg", 'rb').read()
cat_image_string
ラベルは(ネコ:0、犬:1)として設定します。
cat_label = 0
画像のサイズとチャネル数も変数に格納しておきます。
cat_image_shape = tf.io.decode_jpeg(cat_image_string).shape
cat_image_shape
犬の画像でも同様の処理をして、データの整形は完了です。
dog_image_string = open("dog.jpg", 'rb').read()
dog_label = 1
dog_image_shape = tf.io.decode_jpeg(dog_image_string).shape
tf.train.Exampleに変換
次は、整形したデータをtf.train.Exampleオブジェクトの形式にします。
画像サイズやラベルは「tf.train.Int64List」に格納し、バイナリ化した画像は「tf.train.BytesList」として保存します。
cat_feature = {
'height': tf.train.Feature(int64_list=tf.train.Int64List(value=[cat_image_shape[0]])),
'width': tf.train.Feature(int64_list=tf.train.Int64List(value=[cat_image_shape[1]])),
'depth': tf.train.Feature(int64_list=tf.train.Int64List(value=[cat_image_shape[2]])),
'label': tf.train.Feature(int64_list=tf.train.Int64List(value=[cat_label])),
'image_raw': tf.train.Feature(bytes_list=tf.train.BytesList(value=[cat_image_string])),
}
cat_example = tf.train.Example(features=tf.train.Features(feature=cat_feature))
cat_example
同様に犬のデータもtf.train.Exampleオブジェクトの形式にします。
dog_feature = {
'height': tf.train.Feature(int64_list=tf.train.Int64List(value=[dog_image_shape[0]])),
'width': tf.train.Feature(int64_list=tf.train.Int64List(value=[dog_image_shape[1]])),
'depth': tf.train.Feature(int64_list=tf.train.Int64List(value=[dog_image_shape[2]])),
'label': tf.train.Feature(int64_list=tf.train.Int64List(value=[dog_label])),
'image_raw': tf.train.Feature(bytes_list=tf.train.BytesList(value=[dog_image_string])),
}
dog_example = tf.train.Example(features=tf.train.Features(feature=dog_feature))
TFRecordファイルに書き込み
tf.train.ExampleオブジェクトをTFRecordファイルに書き込んでいきます。
record_file = 'cat_dog.tfrecords'
with tf.io.TFRecordWriter(record_file) as writer:
writer.write(cat_example.SerializeToString())
writer.write(dog_example.SerializeToString())
cat_dog.tfrecordsファイルが作成され、画像データをTFRecordにすることができました。
作成したTFRecordファイルの読み込み方法はこちらで解説しています。

TFRecordの応用
今回は画像ファイルをバイナリ化してTFRecordファイルに書き込む例を紹介しましたが、numpy配列もバイナリ化して保存することも可能です。
繰り返しAIの学習を行う場合には、前処理後のデータをTFRecord化して呼び出すだけにしておくと学習時間の短縮にも繋がります。
numpy配列をTFRecordに書き込む方法はこちらの記事で解説しています。

まとめ
データをシリアライズしてTFRecordファイルを作成する方法を解説しました。
TFRecordを作るには、「データの整形」→「tf.train.Exampleに変換」→「TFRecordファイルに書き込み」の順に行っていきます。
画像をTFRecordに書き込むにはバイナリ化して、tf.train.Exampleオブジェクトに格納する必要があります。
コメント