はじめに
こんにちは、SHOUです!
前回の記事では、Google Driveに保存した自作の手書き数字画像を使って、KerasとGoogle Colabで転移学習を実践してみました。今回はその続編として、「学習回数(エポック数)」を増やすと精度がどこまで向上するのかをじっくり検証してみました💪。
これまでの実験では、エポック数を「5」に設定していましたが、今回は思い切って「40エポック」に増加!果たして、どのような違いが現れるのでしょうか?
実験の概要
今回の実験条件は以下の通りです👇。
- データセット:自作の手書き数字(前回と同じもの)
- モデル構成:Kerasで作成したシンプルな多層パーセプトロン(前回と同じ)
- エポック数:5 → 40 に変更
- 環境:Google Colab + GPU
パラメータやデータは前回と同じなので、「純粋にエポック数だけを変えた場合の違い」が分かりやすい形になっています。
コード例
エポック数の変更はとてもシンプル!次のようにコードのepochs
引数を変えるだけでOKです。
history = model.fit(train_generator, epochs=40)
これだけで、学習が自動的に40エポック繰り返されるようになります😊。
学習結果
実際に学習させたログの一部を抜粋してみます:
Epoch 1/40
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 792ms/step - accuracy: 0.0000e+00 - loss: 47.0222
・・・
Epoch 10/40
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 131ms/step - accuracy: 0.0000e+00 - loss: 7.0652
・・・
Epoch 20/40
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 81ms/step - accuracy: 0.5000 - loss: 1.0945
・・・
Epoch 40/40
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 98ms/step - accuracy: 0.9000 - loss: 0.2822
序盤はあまり精度が高くなかったものの、エポックが進むにつれてぐんぐん精度が向上していき、最終的には90%まで到達しました!
学習過程のグラフ
さらに、学習の過程を視覚化してみます。以下のコードで、精度と損失の推移をグラフに描画できます👇。
import matplotlib.pyplot as plt
# 精度をプロット
plt.plot(history.history['accuracy'])
plt.title('Model Accuracy')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.show()
# 損失をプロット
plt.plot(history.history['loss'])
plt.title('Model Loss')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.show()
学習が進むにつれて精度が右肩上がり、損失が右肩下がりになる様子がしっかりと確認できました👀。
実際に判定してみる
Drive内にある以前、誤認識した数字画像を読み込んで、どの数字か予測してみます。
from tensorflow.keras.preprocessing import image
import numpy as np
img_path = '/content/drive/MyDrive/Colab/handwritten_digit.png'
img = image.load_img(img_path, target_size=(28, 28), color_mode='grayscale')
img_array = image.img_to_array(img)
img_array = np.expand_dims(img_array, axis=0) / 255.0
img_array = 1.0 - img_array # ←★ 追加:白黒反転
prediction = model.predict(img_array)
print('予測ラベル:', np.argmax(prediction))
実行結果
今回のように '4' を '5' と判定するような誤認識は、入力画像の書き方やバリエーションが学習されていない可能性を示唆します。 つまり、学習回数を増やしても、学習データの質や多様性が不十分だと、誤認識は解消されないことがわかります。
- 1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 51ms/step
- 予測ラベル: 5
結果考察
今回の結果から、エポック数を増やすことでモデルがより深く学習し、目に見える形で精度が向上することが確認できました。 また、エポック数を無限に増やせば良いというわけではありません。エポック数が増えすぎると、「過学習(オーバーフィッティング)」といって、訓練データには強く適合するものの、新しいデータに対しては逆に精度が落ちるという現象が発生するリスクがあります。
そのため、単純にエポック数を上げるだけでなく、以下のような対策も今後の検討ポイントとして挙げられます👇。
- EarlyStopping(早期終了)を導入して、過学習を防ぐ
- 学習曲線を見ながら、最適なエポック数を探る
- より多くの訓練データを用意して過学習リスクを抑える
まとめ
- データが少ないとエポック数を増やすだけでは精度を向上できない
- ただし、過学習には要注意!適切なエポック数を見極めることが大切
- 次はデータ拡張やEarlyStoppingなど、さらなるテクニックを試してみる予定
今回は「学習回数」にフォーカスして検証しましたが、やはりAIの学習はトライ&エラーが大事だと再認識しました。次回は、データ拡張(Augmentation)などを取り入れて、より実用的な精度向上テクを紹介する予定です!お楽しみに😊。
0 件のコメント:
コメントを投稿