TensorFlowで損失関数とオプティマイザーを定義し、IMDBデータセットでモデルをトレーニング・評価する方法
TensorFlowは、Googleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせて使用することで、アルゴリズムの実装やディープラーニングアプリケーションの開発など、幅広い用途に活用できます。研究から本番運用まで、さまざまな場面で採用されている実績あるフレームワークです。
「tensorflow」パッケージは、Windows環境では以下のコマンドでインストールできます。
pip install tensorflow
「IMDB」データセットには、5万件を超える映画レビューが収録されています。このデータセットは、主に自然言語処理(NLP)に関連するタスクで利用されます。
本記事のコードは、Google Colaboratory上で実行しています。Google Colab(Colaboratory)を利用すると、ブラウザ上でPythonコードを実行でき、面倒な環境設定が一切不要です。さらに、GPU(Graphics Processing Unit)への無料アクセスも可能で、機械学習の学習・実験に最適な環境です。ColaboratoryはJupyter Notebookをベースに構築されています。
以下は、損失関数とオプティマイザーを定義し、モデルをトレーニングしたうえで、IMDBデータセットを使って評価するためのコードスニペットです。
model.compile(loss=losses.BinaryCrossentropy(from_logits=True),
optimizer='adam',
metrics=tf.metrics.BinaryAccuracy(threshold=0.0))
epochs = 10
history = model.fit(
train_ds,
validation_data=val_ds,
epochs=epochs)
loss, accuracy = model.evaluate(test_ds)
print("Loss is : ", loss)
print("Accuracy is : ", accuracy)
コード出典 − https://www.tensorflow.org/tutorials/keras/text_classification
実行結果
Epoch 1/10 625/625 [==============================] - 12s 19ms/step - loss: 0.6818 - binary_accuracy: 0.6130 - val_loss: 0.6135 - val_binary_accuracy: 0.7750 Epoch 2/10 625/625 [==============================] - 4s 7ms/step - loss: 0.5785 - binary_accuracy: 0.7853 - val_loss: 0.4971 - val_binary_accuracy: 0.8230 Epoch 3/10 625/625 [==============================] - 4s 7ms/step - loss: 0.4651 - binary_accuracy: 0.8372 - val_loss: 0.4193 - val_binary_accuracy: 0.8470 Epoch 4/10 625/625 [==============================] - 4s 7ms/step - loss: 0.3901 - binary_accuracy: 0.8635 - val_loss: 0.3732 - val_binary_accuracy: 0.8612 Epoch 5/10 625/625 [==============================] - 4s 7ms/step - loss: 0.3435 - binary_accuracy: 0.8771 - val_loss: 0.3444 - val_binary_accuracy: 0.8688 Epoch 6/10 625/625 [==============================] - 4s 7ms/step - loss: 0.3106 - binary_accuracy: 0.8877 - val_loss: 0.3255 - val_binary_accuracy: 0.8730 Epoch 7/10 625/625 [==============================] - 5s 7ms/step - loss: 0.2855 - binary_accuracy: 0.8970 - val_loss: 0.3119 - val_binary_accuracy: 0.8732 Epoch 8/10 625/625 [==============================] - 5s 7ms/step - loss: 0.2652 - binary_accuracy: 0.9048 - val_loss: 0.3027 - val_binary_accuracy: 0.8772 Epoch 9/10 625/625 [==============================] - 5s 7ms/step - loss: 0.2481 - binary_accuracy: 0.9125 - val_loss: 0.2959 - val_binary_accuracy: 0.8782 Epoch 10/10 625/625 [==============================] - 5s 7ms/step - loss: 0.2328 - binary_accuracy: 0.9161 - val_loss: 0.2913 - val_binary_accuracy: 0.8792 782/782 [==============================] - 10s 12ms/step - loss: 0.3099 - binary_accuracy: 0.8741 Loss is : 0.3099007308483124 Accuracy is : 0.8741199970245361
結果のポイント
10エポックのトレーニング完了時点で、検証データにおけるbinary_accuracyは約0.879に達しています。テストデータセットでの最終的な評価結果は、損失が約0.310、精度が約0.874(87.4%)でした。エポックを重ねるごとに訓練データの損失が着実に減少し、検証データの精度も安定して向上していることから、モデルが過学習に陥ることなくバランスよく学習できていることがわかります。
コードの解説
モデルを構築した後、「compile」関数を使ってモデルをコンパイルします。ここでは、損失関数に「BinaryCrossentropy」(from_logits=True)、オプティマイザーに「adam」、評価指標にしきい値0.0の「BinaryAccuracy」をそれぞれ指定しています。
トレーニングの反復回数(エポック数)は10に設定されています。
「fit」関数を使って、構築済みのモデルにトレーニングデータを適合させます。validation_data引数に検証データセットを渡すことで、各エポック終了時の検証損失と検証精度も同時に確認できます。
「evaluate」関数を使って、テストデータセットに対するモデルの損失と精度を計算します。
算出された損失値と精度値がコンソールに出力されます。
-
PythonとKerasを使って復元済みモデルを評価する方法
TensorFlowは、Googleが提供している機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせてアルゴリズムやディープラーニングアプリケーションなどを実装できます。研究用途から本番環境まで幅広く利用されており、複雑な数値計算を高速に実行するための最適化技術を備えています。Windowsに「tensorflow」パッケージをインストールするには、以下のコマンドを実行します。pip install tensorflowKerasとはKerasは、ONEIROS(Open ended Neuro-Electronic Intelligent Robot O
-
TensorFlowを使ってMNISTデータセット用のモデルを定義する方法
TensorFlowは、Googleが提供している機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせて使用することで、各種アルゴリズムやディープラーニングアプリケーションの実装が可能になります。複雑な数値計算を高速に処理できる最適化技術を備えているのが特徴で、これは内部でNumPyと多次元配列を利用しているためです。この多次元配列は「テンソル(Tensor)」とも呼ばれます。また、深層ニューラルネットワークの構築もサポートしています。TensorFlowのインストールWindows環境に「tensorflow」パッケージをインストールするには、以下のコマン