前提・実現したいこと
現在MNISTデータを使った画像認識において画像の数値を変更してわざと正解率を下げるということを行っています。
色々数値を変えてみて学習させたところ正解率が変わらず悩んでいます。
プログラムに誤っている部分があるのでしょうか。
アドバイスお願いいたします。
該当のソースコード
Python
1import matplotlib.pyplot as plt 2import keras 3from keras.layers import Dense 4from keras.models import Sequential 5from keras.optimizers import RMSprop 6from keras.datasets import mnist 7import numpy as np 8import gzip 9import pickle 10from PIL import Image 11dataset_dir = './MNIST_data/' 12save_file = dataset_dir + '/mnist.pkl' 13 14dataset = np.load(save_file) #pickle化したMNISTデータを開く 15 16 17X_train = dataset['train_img'] 18X_test = dataset['test_img'] 19y_train = dataset['train_label'] 20y_test = dataset['test_label'] 21 22 23 24 25X_train = X_train.reshape(60000, 784) 26X_train = X_train.astype('float32') / 255 27X_test = X_test.reshape(10000, 784) 28X_test = X_test.astype('float32') / 255 29 30for i in range(0, len(X_train), 8000): 31 for j in range(400, 784, 18): 32 X_train[i][j] = 1 #画像データの数値を変更 33 34y_train = keras.utils.np_utils.to_categorical(y_train.astype('int32'), 10) 35y_test = keras.utils.np_utils.to_categorical(y_test.astype('int32'), 10) 36 37model = Sequential() 38model.add(Dense(64, activation='relu', input_dim=784)) 39model.add(Dense(10, activation='softmax')) 40 41model.compile( 42 loss='categorical_crossentropy', 43 optimizer=RMSprop(), 44 metrics=['accuracy']) 45 46hist = model.fit(X_train, y_train, 47 batch_size=128, 48 epochs=10, 49 verbose=1 50 ) 51 52score = model.evaluate(X_test, y_test, verbose=1) 53print('正解率 =',score[1], 'loss =', score[0])
正解率が「変わらず」というのは、「**完全に**変わらなくて、コードの変更が意味があったのか疑っている」のか「**ほとんど**変わらなくて何か思い違いをしているのか疑っている」のかどちらでしょう。後者と読みましたが。
後者の方です。
MNIST は DNN で解くには非常に簡単な問題なので、あまり変わらないかと思いますよ。
cifer10 とかより難しいデータセットを試されたほうがいいと思います。
> 色々数値を変えてみて
具体的になにを試されたのか追記できますか?
そうなんですね。
まずは正解率がこのプログラムでちゃんと下げられるのかを見たかったので、何枚かの画像の値を全て0にして真っ暗にしてみたり、斜線を入れてみたりと単純な方法を試しました。が、正解率にほとんど変化がなく、プログラムの方に誤りがあるのかなと思い質問させていただきました。
MNISTは学習データが6万枚あるので、数枚のデータを変更したところで影響はほぼないでしょう。
正答率を下げる一番簡単な方法は学習データの枚数をへらすことですね。各クラス100枚ずつとか学習データの枚数を減らせば正答率は落ちるのではないかと思います。
枚数を減らさずに正答率を下げたかったのですが、それは厳しいのですね。
アドバイスありがとうございます。
あなたの回答
tips
プレビュー