TensorFlowとPythonを使ってStack Overflowの質問データセットでモデルをトレーニングする方法
TensorFlowはGoogleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせてアルゴリズムやディープラーニングアプリケーションの実装など、幅広い用途に活用できます。研究用途から本番環境まで、多くの場面で採用されている実績あるフレームワークです。
TensorFlowには複雑な数値計算を高速に処理するための最適化技術が組み込まれています。これは内部でNumPyと多次元配列を使用しているためです。この多次元配列は「テンソル(tensor)」とも呼ばれます。
TensorFlowの主な特徴
- 深層ニューラルネットワークの構築・学習をサポート
- 高いスケーラビリティと豊富な人気データセットを同梱
- GPU計算による高速化とリソース管理の自動化
- 多数の機械学習ライブラリを搭載し、ドキュメントも充実
TensorFlowは深層ニューラルネットワークモデルの構築やトレーニングを行い、データセットの特徴を予測するアプリケーションを作成することができます。
TensorFlowのインストール方法
Windows環境に「tensorflow」パッケージをインストールするには、以下のコマンドを実行します。
pip install tensorflow
テンソルとは何か
テンソルはTensorFlowで使われる基本的なデータ構造であり、フロー図(「データフローグラフ」と呼ばれます)におけるエッジ(辺)をつなぐ役割を果たします。テンソルは本質的には多次元配列またはリストであり、以下の3つの主要な属性によって識別されます。
- ランク(Rank):テンソルの次元数を表します。テンソルの階数、つまり定義されたテンソルが持つ次元の数と考えることができます。
- 型(Type):テンソルの各要素に関連付けられたデータ型を示します。1次元、2次元、n次元のいずれのテンソルにも対応します。
- 形状(Shape):行数と列数の組み合わせを表します。
実行環境について
本記事のコードはGoogle Colaboratory上で実行しています。Google Colab(Colaboratory)を利用すると、ブラウザ上でPythonコードを実行でき、事前設定は一切不要で、GPU(グラフィックス処理装置)にも無料でアクセスできます。ColaboratoryはJupyter Notebookをベースに構築されています。
コード例:Bag-of-Words線形モデルの構築
以下は、Stack Overflowの質問データセットをトレーニングするためのbag-of-words(単語の出現頻度に基づく)線形モデルを構築するコード例です。
print("A bag-of-words linear model is built to train the stackoverflow dataset")
binary_model = tf.keras.Sequential([layers.Dense(4)])
binary_model.compile(
loss=losses.SparseCategoricalCrossentropy(from_logits=True),
optimizer='adam',
metrics=['accuracy'])
history = binary_model.fit(
binary_train_ds, validation_data=binary_val_ds, epochs=10)コード出典:https://www.tensorflow.org/tutorials/load_data/text
実行結果
A bag-of-words linear model is built to train the stackoverflow dataset Epoch 1/10 188/188 [==============================] - 4s 19ms/step - loss: 1.2450 - accuracy: 0.5243 - val_loss: 0.9285 - val_accuracy: 0.7645 Epoch 2/10 188/188 [==============================] - 1s 3ms/step - loss: 0.8304 - accuracy: 0.8172 - val_loss: 0.7675 - val_accuracy: 0.7895 Epoch 3/10 188/188 [==============================] - 1s 3ms/step - loss: 0.6615 - accuracy: 0.8625 - val_loss: 0.6824 - val_accuracy: 0.8050 Epoch 4/10 188/188 [==============================] - 1s 3ms/step - loss: 0.5604 - accuracy: 0.8833 - val_loss: 0.6291 - val_accuracy: 0.8125 Epoch 5/10 188/188 [==============================] - 1s 3ms/step - loss: 0.4901 - accuracy: 0.9034 - val_loss: 0.5923 - val_accuracy: 0.8210 Epoch 6/10 188/188 [==============================] - 1s 3ms/step - loss: 0.4370 - accuracy: 0.9178 - val_loss: 0.5656 - val_accuracy: 0.8255 Epoch 7/10 188/188 [==============================] - 1s 3ms/step - loss: 0.3948 - accuracy: 0.9270 - val_loss: 0.5455 - val_accuracy: 0.8290 Epoch 8/10 188/188 [==============================] - 1s 3ms/step - loss: 0.3601 - accuracy: 0.9325 - val_loss: 0.5299 - val_accuracy: 0.8295 Epoch 9/10 188/188 [==============================] - 1s 3ms/step - loss: 0.3307 - accuracy: 0.9408 - val_loss: 0.5177 - val_accuracy: 0.8335 Epoch 10/10 188/188 [==============================] - 1s 3ms/step - loss: 0.3054 - accuracy: 0.9472 - val_loss: 0.5080 - val_accuracy: 0.8340
コードの解説
- ニューラルネットワークはKerasの「Sequential」APIを使用して作成されています。Sequential APIは層を順番に積み重ねるシンプルなモデル構築手法です。
- 「binary」形式でベクトル化されたデータに対して、bag-of-wordsモデル(線形モデルの一種)をトレーニングしています。
- 損失関数にはSparseCategoricalCrossentropy、最適化アルゴリズムにはAdamを採用し、評価指標としてaccuracy(正解率)を指定しています。
- 10エポックの学習により、検証データでの正解率は約83.4%まで向上しており、モデルが着実に学習できていることが確認できます。
-
TensorFlowとPythonで線形モデルをトレーニングする方法を解説
TensorFlowとは TensorFlowは、Googleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせて各種アルゴリズムやディープラーニングアプリケーションなどを実装できます。研究用途だけでなく、本番環境(プロダクション)でも幅広く利用されています。 TensorFlowのインストール方法 Windows環境では、以下のコマンドを実行するだけで「tensorflow」パッケージをインストールできます。 pip install tensorflow テンソル(Tensor)とは何か テンソルはTensorFlowにおける基本的なデータ
-
Kerasを使ってPythonでモデルをプロットする方法をわかりやすく解説
TensorFlowとはTensorFlowは、Googleが提供している機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせて使用することで、アルゴリズムの実装やディープラーニングアプリケーションの開発など、幅広い用途に活用できます。研究目的から本番環境での運用まで対応しており、複雑な数値計算を高速に実行するための最適化技術が数多く組み込まれています。TensorFlowにおける「テンソル(Tensor)」は、データを扱うための基本的なデータ構造です。テンソルは多次元配列(またはリスト)であり、データフローグラフと呼ばれる計算グラフのノード同士をエッジでつ