TensorFlowとPythonを使って前処理済みデータをシャッフルする方法
TensorFlowは、Googleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせてアルゴリズムやディープラーニングアプリケーションなどを実装するために広く利用されています。研究用途から本番環境まで幅広く対応しており、複雑な数学的演算を高速に実行するための最適化技術を備えています。これは内部でNumPyと多次元配列を活用しているためです。この多次元配列は「テンソル」と呼ばれます。TensorFlowは深層ニューラルネットワークの構築もサポートしています。
Windows環境に「tensorflow」パッケージをインストールするには、以下のコマンドを実行します。
pip install tensorflow
テンソルはTensorFlowで用いられる基本的なデータ構造であり、フロー図の中でエッジ(辺)同士をつなぐ役割を果たします。このフロー図は「データフローグラフ」と呼ばれます。テンソルとは、端的に言えば多次元配列またはリストのことです。
本記事では、イリアス(Illiad)のデータセットを使用します。このデータセットには、William Cowper、Edward(Earl of Derby)、Samuel Butlerによる3つの翻訳作品のテキストデータが含まれています。モデルは、1行のテキストが与えられた際に、それがどの翻訳者によるものかを識別できるように訓練されます。使用するテキストファイルはすでに前処理されており、文書のヘッダー・フッター、行番号、章タイトルなどが削除されています。
以下のコードはGoogle Colaboratory上で実行しています。Google Colab(Colaboratory)を利用すれば、ブラウザ上でPythonコードを実行でき、事前の設定は一切不要で、GPU(グラフィックス処理装置)にも無料でアクセスできます。ColaboratoryはJupyter Notebookをベースに構築されています。
コード例
以下がコードスニペットです。
print("Combine the labelled dataset and reshuffle it")
BUFFER_SIZE = 50000
BATCH_SIZE = 64
VALIDATION_SIZE = 5000
all_labeled_data = labeled_data_sets[0]
for labeled_dataset in labeled_data_sets[1:]:
all_labeled_data = all_labeled_data.concatenate(labeled_dataset)
all_labeled_data = all_labeled_data.shuffle(
BUFFER_SIZE, reshuffle_each_iteration=False)
print("Displaying a few samples of input data")
for text, label in all_labeled_data.take(8):
print("The sentence is : ", text.numpy())
print("The label is :", label.numpy())コード出典:https://www.tensorflow.org/tutorials/load_data/text
出力結果
Combine the labelled dataset and reshuffle it Displaying a few samples of input data The sentence is : b'But I have now both tasted food, and given' The label is : 0 The sentence is : b'All these shall now be thine: but if the Gods' The label is : 1 The sentence is : b'Their spiry summits waved. There, unperceived' The label is : 0 The sentence is : b'"I pray you, would you show your love, dear friends,' The label is : 1 The sentence is : b'Entering beneath the clavicle the point' The label is : 0 The sentence is : b'But grief, his father lost, awaits him now,' The label is : 1 The sentence is : b'in the fore-arm where the sinews of the elbow are united, whereon he' The label is : 2 The sentence is : b'For, as I think, I have already chased' The label is : 0
解説
まず、個別のラベル付きデータセットを
concatenate()メソッドで順次連結し、1つの統合データセット「all_labeled_data」を作成しています。shuffle()メソッドに指定したBUFFER_SIZE = 50000は、シャッフル時に保持されるバッファサイズを意味します。バッファサイズがデータセット全体より大きい場合、より均一なシャッフルが実現します。reshuffle_each_iteration=Falseを指定することで、エポックごとにシャッフルの順序が変わらないよう固定しています。データの前処理が完了すると、
take(8)によってデータセットから8件のサンプルが抽出され、コンソールに表示されます。表示されたデータはグループ化されておらず、「all_labeled_data」内の各エントリが1つのデータポイント(テキストとラベルのペア)に対応しています。
-
TensorFlowとPythonを使ってモデルをトレーニングする方法
TensorFlowでは、fitメソッドを使ってモデルをトレーニングできます。このメソッドには、エポック数(データセット全体を何回繰り返して学習させるかを示す数値)とトレーニング用データを指定します。実行環境について本記事のコードはGoogle Colaboratory(Google Colab)で実行しています。Google Colabはブラウザ上でPythonコードを実行できるサービスで、面倒な環境構築が不要なうえ、GPU(グラフィックス処理ユニット)を無料で利用できるのが大きな特徴です。ColaboratoryはJupyter Notebookをベースに構築されています。モデルのトレーニ
-
TensorFlowとPythonを使ってデータセットを視覚化する方法
ここでは、花のデータセットを使用します。このデータセットは、Googleが提供するAPI経由でダウンロードでき、「get_file」メソッドにAPIのURLを引数として渡すことで、データを開発環境に取得できます。 ダウンロードしたデータは「matplotlib」ライブラリを使って視覚化できます。「imshow」メソッドを使用すると、コンソール上に画像を表示することが可能です。 TensorFlowとKerasの連携 関連記事: TensorFlowとは何か?KerasはどのようにTensorFlowと連携してニューラルネットワークを構築するのか? 本記事ではKeras Sequential