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

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

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

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

1回答

1299閲覧

CIFAR-10データセット Accuracyが上昇しない

ot24

総合スコア4

Keras

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2021/07/29 03:48

編集2021/07/29 04:26

前提・実現したいこと

CIFAR-10データセットを用いたデータ画像認識の機械学習をサンプルコードを写経しながら勉強しています。
実行後、Accuracyが上昇していかないことについてご質問させていただければと考えます。

発生している問題・エラーメッセージ

Accuracyが上昇していきません。

Epoch 1/100
625/625 [==============================] - 90s 143ms/step - loss: 2.3269 - accuracy: 0.0780 - val_loss: 2.3245 - val_accuracy: 0.0039
Epoch 2/100
625/625 [==============================] - 91s 146ms/step - loss: 2.3253 - accuracy: 0.1071 - val_loss: 2.3235 - val_accuracy: 0.0104
Epoch 3/100
625/625 [==============================] - 92s 147ms/step - loss: 2.3248 - accuracy: 0.1402 - val_loss: 2.3227 - val_accuracy: 0.0301
Epoch 4/100
625/625 [==============================] - 92s 148ms/step - loss: 2.3239 - accuracy: 0.1699 - val_loss: 2.3215 - val_accuracy: 0.0809
Epoch 5/100
625/625 [==============================] - 92s 146ms/step - loss: 2.3227 - accuracy: 0.1993 - val_loss: 2.3205 - val_accuracy: 0.1839
Epoch 6/100
625/625 [==============================] - 91s 146ms/step - loss: 2.3223 - accuracy: 0.2318 - val_loss: 2.3200 - val_accuracy: 0.3458
Epoch 7/100
625/625 [==============================] - 92s 147ms/step - loss: 2.3213 - accuracy: 0.2586 - val_loss: 2.3191 - val_accuracy: 0.5116
Epoch 8/100
625/625 [==============================] - 92s 148ms/step - loss: 2.3208 - accuracy: 0.2861 - val_loss: 2.3182 - val_accuracy: 0.6243
Epoch 9/100
625/625 [==============================] - 92s 148ms/step - loss: 2.3199 - accuracy: 0.2993 - val_loss: 2.3174 - val_accuracy: 0.6983
Epoch 10/100
625/625 [==============================] - 89s 143ms/step - loss: 2.3195 - accuracy: 0.3175 - val_loss: 2.3168 - val_accuracy: 0.7258
Epoch 11/100
625/625 [==============================] - 89s 143ms/step - loss: 2.3189 - accuracy: 0.3325 - val_loss: 2.3160 - val_accuracy: 0.7440
Epoch 12/100
625/625 [==============================] - 89s 143ms/step - loss: 2.3182 - accuracy: 0.3447 - val_loss: 2.3153 - val_accuracy: 0.7398
Epoch 13/100
625/625 [==============================] - 89s 143ms/step - loss: 2.3177 - accuracy: 0.3487 - val_loss: 2.3148 - val_accuracy: 0.7234
Epoch 14/100
625/625 [==============================] - 89s 143ms/step - loss: 2.3165 - accuracy: 0.3504 - val_loss: 2.3138 - val_accuracy: 0.7100
Epoch 15/100
625/625 [==============================] - 89s 143ms/step - loss: 2.3159 - accuracy: 0.3492 - val_loss: 2.3130 - val_accuracy: 0.6894
Epoch 16/100
625/625 [==============================] - ETA: 0s - loss: 2.3155 - accuracy: 0.3514
Epoch 00016: ReduceLROnPlateau reducing learning rate to 4.999999873689376e-05.
625/625 [==============================] - 90s 144ms/step - loss: 2.3155 - accuracy: 0.3514 - val_loss: 2.3124 - val_accuracy: 0.6714
Epoch 17/100
625/625 [==============================] - 89s 142ms/step - loss: 2.3149 - accuracy: 0.3518 - val_loss: 2.3119 - val_accuracy: 0.6556
Epoch 18/100
625/625 [==============================] - 89s 142ms/step - loss: 2.3146 - accuracy: 0.3457 - val_loss: 2.3118 - val_accuracy: 0.6439
Epoch 19/100
625/625 [==============================] - 89s 143ms/step - loss: 2.3142 - accuracy: 0.3498 - val_loss: 2.3114 - val_accuracy: 0.6339
Epoch 20/100
625/625 [==============================] - 89s 143ms/step - loss: 2.3136 - accuracy: 0.3460 - val_loss: 2.3107 - val_accuracy: 0.6208

該当のソースコード

''' 1.CIFAR-10データセットの読み込み ''' from tensorflow.keras import datasets (x_train, t_train), (x_test, t_test) = datasets.cifar10.load_data() ''' 2.畳み込みネットワークの構築 ''' from tensorflow.keras import models, layers, optimizers, regularizers ​ # L2正則化の係数 weight_decay = 1e-4 ​ # CNNを構築 model = models.Sequential() ​ # (第1層)畳み込み層1 正則化を行う model.add( layers.Conv2D( filters=32, # フィルターの数は32 kernel_size=(3,3), # 3×3のフィルターを使用 input_shape=x_train.shape[1:], # 入力データの形状 padding='same', # ゼロパディングを行う kernel_regularizer=regularizers.l2(weight_decay), activation='relu' # 活性化関数はReLU )) ​ # (第2層)プーリング層1:ウィンドウサイズは2×2 model.add( layers.MaxPooling2D(pool_size=(2,2))) ​ # (第3層)畳み込み層2 正則化を行う model.add( layers.Conv2D( filters=128, # フィルターの数は64 kernel_size=(3,3), # 3×3のフィルターを使用 padding='same', # ゼロパディングを行う kernel_regularizer=regularizers.l2(weight_decay), activation='relu' # 活性化関数はReLU )) ​ # (第4層)プーリング層2:ウィンドウサイズは2×2 model.add( layers.MaxPooling2D(pool_size=(2,2))) ​ # (第5層)畳み込み層3 正則化を行う model.add( layers.Conv2D( filters=256, # フィルターの数は256 kernel_size=(3,3), # 3×3のフィルターを使用 padding='same', # ゼロパディングを行う kernel_regularizer=regularizers.l2(weight_decay), activation='relu' # 活性化関数はReLU )) ​ # (第6層)プーリング層2:ウィンドウサイズは2×2 model.add( layers.MaxPooling2D(pool_size=(2,2))) ​ # Flatten model.add(layers.Flatten()) ​ # ドロップアウト:ドロップアウトは40% model.add(layers.Dropout(0.4)) # (第7層)全結合層 model.add( layers.Dense( 512, # ニューロン数は512 activation='relu')) # 活性化関数はReLU ​ ​ # (第8層)出力層 model.add( layers.Dense( 10, # 出力層のニューロン数は10 activation='softmax')) # 活性化関数はソフトマックス ​ # 学習率 learning_rate = 0.0001 ​ # Sequentialオブジェクトのコンパイル model.compile( # 損失関数はスパースラベル対応クロスエントロピー誤差 loss='sparse_categorical_crossentropy', # オプティマイザーはSGD optimizer=optimizers.SGD(lr=learning_rate), # 学習評価として正解率を指定 metrics=['accuracy']) ​ ​ ''' 3.学習の実行 ''' from tensorflow.keras.preprocessing.image import ImageDataGenerator from tensorflow.keras.callbacks import ReduceLROnPlateau ​ # ミニバッチのサイズ batch_size = 64 ​ # データ拡張 datagen = ImageDataGenerator( rescale=1.0/255.0, # ピクセル値を255で割って正規化する validation_split=0.2, # 20パーセントのデータを検証用にする rotation_range=15, # 15度の範囲でランダムに回転させる width_shift_range=0.1, # 横サイズの0.1の割合でランダムに水平移動 height_shift_range=0.1, # 縦サイズの0.1の割合でランダムに垂直移動 horizontal_flip=True, # 水平方向にランダムに反転、左右の入れ替え zoom_range=0.2, # ランダムに拡大 ) ​ # 訓練データ用のジェネレーターを生成 training_generator = datagen.flow(x_train, t_train, batch_size=batch_size, subset='training') # 訓練用のデータを生成 # 検証データ用のジェネレーターを生成 validation_generator = datagen.flow(x_train, t_train, batch_size=batch_size, subset='validation') # 検証用のデータを生成 ​ # 5エポックの間にval_accuracyが改善されなかったら学習率を0.5倍する。 reduce_lr = ReduceLROnPlateau( monitor='val_accuracy', # 監視対象は検証データの精度 factor=0.5, # 学習率を減衰させる割合 patience=5, # 監視対象のエポック数 verbose=1, # 学習率を下げたときに通知する mode='max', # 最高値を監視する min_lr=0.00001 # 学習率の下限 ) ​ # エポック数 epochs = 100 ​ # 学習を行う history = model.fit( # 拡張データをミニバッチの数だけ生成 training_generator, epochs=epochs, # エポック数 verbose=1, # 学習の進捗状況を出力する validation_data=validation_generator, # エポック終了後にreduce_lrをコールバック # コールバックはリストで指定する callbacks=[reduce_lr] )

試したこと

learning_rateを一桁、上げたり下げたりすることでaccuracyが上昇するとの記事を確認したため実施しましたが、
Accuracyが上昇することはありませんでした。アドバイス等いただければ幸いです。

補足情報(FW/ツールのバージョンなど)

tenserflow 2.3.0

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

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

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

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

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

meg_

2021/07/29 04:09

コードは「コードの挿入」で記入してください。 > サンプルコードを写経しながら勉強しています。 引用元を明示された方が良いのではないでしょうか?
ot24

2021/07/29 04:35

失礼いたしました。修正いたしました。 秀和システムさんの書籍TensorFlow2 TensorFlow&Keras対応 プログラミング実装ハンドブックの https://www.shuwasystem.co.jp/support/7980html/6300.html からダウンロードできる「05_09」フォルダの「CIFAR10_ReduceLROnPlateau.ipynb」です。
meg_

2021/07/29 06:51

初期状態(learning_rate0.1)で実行すると悪いaccuracyが出ませんでしたか?
ot24

2021/07/29 07:22

仰る通りで、learning_rate0.1のときはtrain_acc ,val_acc 共に学習終了時に0.1程度でした。ですが、書籍では同じlearning_rate0.1のEpoch=20(全体の1/5)までにtrain_acc ,val_acc共に0.7程度まで上昇しており、今回の質問に至りました。
jbpb0

2021/07/30 09:38

質問に書かれてる質問者さんの結果で、「loss」と「val_loss」が、どちらもずっと2.3くらいのまま変わらないのも、バージョンの違いなんですかね? 「accuracy」と「val_accuracy」は、それなりに変わっているのに、「loss」と「val_loss」がほとんど変わらないのは、変な気がします
guest

回答1

0

ベストアンサー

書籍(TensorFlow&Keras対応 プログラミング実装ハンドブック)のコードはtensorflow2.0とのことなのでそのバージョンで質問のコードを実行してみました。

結果は、learning_rate:0.1(初期値)で40エポック(時間の都合上)で下記でした。

loss: 0.6149 - accuracy: 0.8151 - val_loss: 0.7160 - val_accuracy: 0.7778

100エポックまで回せば書籍と同じ程度になるのではないでしょうか。

accuracyが書籍と違うのはバージョン違いの影響かと思われます。
学習の際は実行環境を合わせた方が良いでしょう。(特に機械学習の場合)

投稿2021/07/29 08:19

meg_

総合スコア10607

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

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

ot24

2021/07/29 08:25

ありがとうございます。バージョンの違いにより大きく結果に影響を与えること理解いたしました。今後は気を付けるようにいたします。
ot24

2021/07/29 13:16

お気遣いありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問