質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

697閲覧

kerasの学習正解率がソースコードと違う理由が知りたい

seyu0930

総合スコア20

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/08/01 10:09

編集2021/08/02 03:48

画像認識プログラミングレシピという本で学習中です。

以下のコードを参考にkerasで学習済みモデルを作りました。

https://github.com/Kokensha/book-ml/blob/master/Colaboratory/05_01(TensorFlow_Keras_MNIST).ipynb

※saveするまでにエラーが出る部分があったので
def plot_loss_accuracy_graphの[acc]の部分を[accuracy]にしたり
教師ラベルデータの変換のkeras.utils.to_categoricalをnp_utils.to_categoricalに変更したりしました。

そこで1つほど質問があります。

上記のリンクでも確認できますが、公開されているサイトでは10EPOCHほどで正解率が99%にもなりますが、実際に行うと10EPOCHで81%程度で400EPOCHくらいまで上げるとようやく97%まで上がります。同じコードなのになぜこれほど異なるのかが気になります。

一つ引っかかることは学習中の以下の469と60000という部分が違うということです。

python

1Epoch 374/400 2469/469 [==============================] - 4s 10ms/step - loss: 0.1637 - accuracy: 0.9512 - val_loss: 0.0916 - val_accuracy: 0.9721

python

1Epoch 10/10 260000/60000 [==============================] - 5s 76us/step - loss: 0.0303 - acc: 0.9910 - val_loss: 0.0286 - val_acc: 0.9903 3

わかる方いましたらよろしくお願いします。

上記のリンクのコードと変更した箇所

python

1#accの箇所をaccuracyに変更 2def plot_loss_accuracy_graph(fit_record): 3 # 青い線で誤差の履歴をプロットします、検証時誤差は黒い線で 4 plt.plot(fit_record.history['loss'], "-D", color="blue", label="train_loss", linewidth=2) 5 plt.plot(fit_record.history['val_loss'], "-D", color="black", label="val_loss", linewidth=2) 6 plt.title('LOSS') 7 plt.xlabel('Epochs') 8 plt.ylabel('Loss') 9 plt.legend(loc='upper right') 10 plt.show() 11 12 # 緑の線で精度の履歴をプロットします、検証時制度は黒い線で 13 plt.plot(fit_record.history['accuracy'],"-o", color="green", label="train_accuracy", linewidth=2) 14 plt.plot(fit_record.history['val_accuracy'],"-o",color="black", label="val_accuracy", linewidth=2) 15 plt.title('ACCURACY') 16 plt.xlabel('Epochs') 17 plt.ylabel('Accuracy') 18 plt.legend(loc="lower right") 19 plt.show()

python

1#keras.utils.to_categoricalの箇所をnp_utils.to_categoricalに変更 2from keras.utils import np_utils 3 4# 学習用教師ラベルデータをOne-hotベクトルに変換します 5print('Keras変換前学習用教師ラベルデータ train_teacher_labels shape:', train_teacher_labels.shape) 6train_teacher_labels= np_utils.to_categorical(train_teacher_labels, NUM_CLASSES) 7print('Keras変換後学習用教師ラベルデータ train_teacher_labels shape:',train_teacher_labels.shape) 8 9# 検証用教師ラベルデータをOne-hotベクトルに変換します 10print('Keras変換前検証用教師ラベルデータ test_teacher_labels shape:', test_teacher_labels.shape) 11print(test_teacher_labels) 12test_teacher_labels = np_utils.to_categorical(test_teacher_labels, NUM_CLASSES) 13print('Keras変換後検証用教師ラベルデータ test_teacher_labels shape:',test_teacher_labels.shape) 14print(test_teacher_labels)

googlecolabの環境
keras2.5.0
tensorflow2.5.0
numpy1.19.5

macOSXを利用

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toast-uz

2021/08/02 00:53 編集

もともとのコードは、Python3.6、tensorflow1.13.1、keras2.2.4を前提に動作しています。特にtensorflow1系と2系では大きな非互換があります。質問者様が現在の環境で動作するようにいろいろ修正をしたのであれば、質問者様が動作させたコードの提示をお願いします。何か重要なところが正常に動作していない可能性が高いです。 質問者様が気にされた表示の違いは、非互換のひとつの現れです。以前はデータ数が表示されたのが、ミニバッチ単位のイテレーション数を表示するように変わっています。表示の違いだけですので、今回の問題とは関係ありません。 ちなみに「強化学習」というタグは間違っているように思います。
seyu0930

2021/08/02 03:49

ありがとうございます。変更した箇所を追加して編集いたしました。ご確認お願いいたします。
toast-uz

2021/08/02 09:34

質問者様の状況(収束が遅い)は再現できました。バージョン間の非互換かもしれませんが、正確なところはわかりません。なお、optimizerをAdamに変えると、速く収束しますので、試してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問