PythonでTensorFlowのtf.dataを使い、より細かくデータパイプラインを制御する方法
「tf.data」を活用すると、モデル構築のパイプラインを柔軟にカスタマイズできます。特に、データセットをシャッフルすることで、あらゆる種類のデータが(可能な限り)均等に分散され、偏りのない学習が可能になります。
関連記事:TensorFlowとは何か?KerasとTensorFlowを組み合わせてニューラルネットワークを構築する方法
本記事では、数千枚の花の画像を含む「flowers(花)」データセットを使用します。このデータセットは5つのサブディレクトリで構成されており、各サブディレクトリが1つのクラス(花の種類)に対応しています。
以下のコードはGoogle Colaboratory上で実行しています。Google Colab(Colaboratory)はブラウザ上でPythonコードを実行できるサービスで、事前の設定は一切不要で、GPU(グラフィックス処理装置)にも無料でアクセスできます。ColaboratoryはJupyter Notebookをベースに構築されています。
カスタム入力パイプラインの定義
print("Defining customized input pipeline")
list_ds = tf.data.Dataset.list_files(str(data_dir/'*/*'), shuffle=False)
list_ds = list_ds.shuffle(image_count, reshuffle_each_iteration=False)
for f in list_ds.take(5):
print(f.numpy())
class_names = np.array(sorted([item.name for item in data_dir.glob('*') if item.name != "LICENSE.txt"]))
print(class_names)
print("The dataset is split into training and validation set")
val_size = int(image_count * 0.2)
train_ds = list_ds.skip(val_size)
val_ds = list_ds.take(val_size)
print("Length of each subset is displayed below")
print(tf.data.experimental.cardinality(train_ds).numpy())
print(tf.data.experimental.cardinality(val_ds).numpy())コード引用元:https://www.tensorflow.org/tutorials/load_data/images
出力結果
Defining customized input pipeline b'/root/.keras/datasets/flower_photos/dandelion/14306875733_61d71c64c0_n.jpg' b'/root/.keras/datasets/flower_photos/dandelion/8935477500_89f22cca03_n.jpg' b'/root/.keras/datasets/flower_photos/sunflowers/3001531316_efae24d37d_n.jpg' b'/root/.keras/datasets/flower_photos/daisy/7133935763_82b17c8e1b_n.jpg' b'/root/.keras/datasets/flower_photos/tulips/17844723633_da85357fe3.jpg' ['daisy' 'dandelion' 'roses' 'sunflowers' 'tulips'] The dataset is split into training and validation set Length of each subset is displayed below 2936 734
コードの解説
- keras.preprocessingのユーティリティを使うと、画像が格納されたディレクトリから「tf.data.Dataset」を簡単に作成できます。
- しかし、より細かい制御が必要な場合は、「tf.data」を使ってカスタムの入力パイプラインを自前で記述するのが効果的です。
- ファイルのディレクトリ構造(ツリー構造)を利用することで、クラス名の一覧「class_names」リストを作成できます。
このようにtf.dataを直接活用することで、データのシャッフル方法や訓練用・検証用データへの分割比率などを自由にコントロールでき、モデルの学習パイプラインを目的に応じて最適化できます。
-
TensorFlowとPythonを使ってデータセットを視覚化する方法
ここでは、花のデータセットを使用します。このデータセットは、Googleが提供するAPI経由でダウンロードでき、「get_file」メソッドにAPIのURLを引数として渡すことで、データを開発環境に取得できます。 ダウンロードしたデータは「matplotlib」ライブラリを使って視覚化できます。「imshow」メソッドを使用すると、コンソール上に画像を表示することが可能です。 TensorFlowとKerasの連携 関連記事: TensorFlowとは何か?KerasはどのようにTensorFlowと連携してニューラルネットワークを構築するのか? 本記事ではKeras Sequential
-
PythonとTensorFlowで2つの行列を乗算する方法を解説
TensorFlowは、Googleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせてアルゴリズムやディープラーニングアプリケーションなどを実装するために利用されています。研究用途から本番運用まで幅広く使われており、複雑な数学的演算を高速に処理できる最適化技術を備えているのが特長です。 その理由の一つは、NumPyと多次元配列を基盤としている点にあります。この多次元配列は「テンソル」と呼ばれます。TensorFlowは深層ニューラルネットワークの構築をサポートし、高いスケーラビリティを持ち、人気のデータセットが多数付属しています。また、GPUに