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

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

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

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

機械学習

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

解決済

データ拡張で予測正解率が上がらない原因が分からない

51sep
51sep

総合スコア0

Keras

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

機械学習

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

1回答

0評価

0クリップ

925閲覧

投稿2021/01/24 03:05

編集2022/01/12 10:58

初学者です。
MNISTデータを学習させた畳込みニューラルネットワークモデルを用いて、自作画像を予測してみました。でも、データ拡張をしても、予測の正解率は変わりませんでした。
どなたかアドバイスをお願いしてもよろしいでしょうか。

以下の質問の続きです。
画像認識の正解率が低い原因が分からない

MNISTデータ数を増やしながら「データ拡張なし・あり」を試しました。
予測に使った自作画像は、0-9の10ファイル(10クラス分類)です。
結果は、testデータの損失・正確度と、自作画像を予測させた時の正解率です。
正解率=(正解数/10ファイル)×100(%)。
恥ずかしながら、プログラムは適切かどうか分かりません。間違いがあれば、ご指摘頂けると幸いです。

■予測させる自作画像
0,1,2,3,4,5,6,7,8,9の自作画像 (28ピクセル×28ピクセルで手書きしたpngファイル)10files
自作画像10枚

■結果
データ数↑=損失↓正確度↑=正解率↑となりました。
おおよそ予想される結果が得られましたが、データを拡張しても、それほど正解率は上がりませんでした。
どのような理由が考えられるのでしょうか。
なお、データ拡張の条件を変えてみましたが、正解率が1割ぐらい上下する程度の違いでした。

各MNISTデータ数に対し、データ拡張なし・ありで実行した結果
結果1

上記のloss, accuracy(for test data)の際の自作画像10ファイルの予測結果と予測確率
結果2

# import library # for learning from tensorflow import keras from tensorflow.keras import datasets, layers, models from tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D from tensorflow.keras.models import Sequential from tensorflow.keras.preprocessing.image import ImageDataGenerator # for predict import glob import os import numpy as np from PIL import Image, ImageOps from numpy import as array # MNIST 読込み mnist=keras.datasets.mnist (x_train,y_train),(x_test,y_test)=mnist.load_data() #(x_train,y_train),(x_test,y_test)=(x_train[:80],y_train[:80]),(x_test[:20], y_test[:20]) #(x_train,y_train),(x_test,y_test)=(x_train[:160],y_train[:160]),(x_test[:40], y_test[:40]) #(x_train,y_train),(x_test,y_test)=(x_train[:800],y_train[:800]),(x_test[:200], y_test[:200]) #(x_train,y_train),(x_test,y_test)=(x_train[:8000],y_train[:8000]),(x_test[:2000], y_test[:2000]) x_train=x_train.reshape(x_train.shape[0],28,28,1) x_test=x_test.reshape(x_test.shape[0],28,28,1) x_train=x_train/255 x_test=x_test/255 print("x_train",x_train.shape) print("x_test",x_test.shape) # Convolutional Neural Networks model = Sequential() model.add(Conv2D(16,(3,3),padding='same',input_shape=(28,28,1),activation='relu')) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Conv2D(128,(3,3),activation='relu')) model.add(Conv2D(256,(3,3),activation='relu')) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Dropout(0.5)) model.add(Flatten()) model.add(Dense(128,activation='relu')) model.add(Dropout(0.25)) model.add(Dense(10,activation='softmax')) model.summary() # model compile and learn model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(x_train,y_train,epochs=5) # evoluate for test data loss,acc=model.evaluate(x_test,y_test,verbose=2) print('accuracy:',acc) # data augmentation datagen=ImageDataGenerator(rescale=1/255, width_shift_range=0.01, height_shift_range=0.025, zoom_range=0.05) # learn history=model.fit_generator( datagen.flow(x_train,y_train,batch_size=64), steps_per_epoch=60, epochs=40, validation_data=(x_test,y_test), validation_steps=5, verbose=1) # evoluate for test data loss,acc=model.evaluate(x_test,y_test,verbose=2) print('accuracy:',acc) # classname truename = ['true0','true1','true2','true3','true4','true5','true6','true7','true8','true9'] predname = ['pred0','pred1','pred2','pred3','pred4','pred5','pred6','pred7','pred8','pred9'] # predict DIR = "phototest1" files = os.listdir(DIR) images = [] # for list labels = [] preds = [] scores = [] predicts = [] for file in files: file_path = os.path.join(DIR, file) img = Image.open(file_path) img = img.convert('L') img = ImageOps.invert(img) # invertion img = img.resize((28,28)) x = np.asarray(img, dtype='float32') x2 = x/255 images.append(x2) x2 = x2.reshape(-1,28,28,1) predict = model.predict(x2) predicts.append(predict) # for print label = int(file[0]) pred = int(np.argmax(predict)) score = round(np.max(predict) * 100,2) labels.append(label) preds.append(pred) scores.append(score) if label == pred: answer = '〇' else: answer = '×' print("ans",answer,truename[label],predname[pred],"probability",'{:.1f}%'.format(score))

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

toast-uz
toast-uz

2021/01/30 02:20

テストデータのloss/accと比較して、質問者様の手書きデータの分類正解率が低いようです。手書きデータに特性差があるのか、分類正解率の計算の方法が間違っているか、どちらかに思います。 現状提示されたコードでは、MNISTのテストデータでのloss/accまでしか無いようですので、上記の判断ができません。 ・テストデータでの分類正解率は出していますか?結果を教えて下さい。 ・質問者様の手書きデータでのloss/accは出していますか?結果を教えて下さい。 ・上記のコードを提示してください。
51sep
51sep

2021/02/01 07:48

toast-uzさん、コメントをどうもありがとうございました。 質問内容を更新しました。手持ちのプログラムと知識ではこのぐらいです。。 データ拡張すれば、MNISTのデータ数が少なくても、 全部正解するぐらいの効果があるのかと思いましたが、そうではない?のでしょうか。 データ拡張の条件が適切でないのでしょうか。。 これなら、データ拡張せずに、ただデータ数を増やせばいいのでは?、、 というのが今の「素人感覚」です。
toast-uz
toast-uz

2021/02/01 09:01

コード提示ありがとうございます。テストデータに対する正解率は出せますでしょうか?

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Keras

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

機械学習

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