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

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

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

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

Q&A

解決済

1回答

247閲覧

python MNISTを利用した文字認証

matrix99999

総合スコア15

Python

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

0グッド

0クリップ

投稿2019/06/01 02:22

編集2019/06/02 02:16

pythonを学習し初めて機械学習を利用した文字認証を行おうとしています。
文字は4文字の英字で、幅80 高さ28のjpgファイルです。
何とかコードはできましたが、
学習してからのテストデータの精度を調べる方法がわからず、
エラーが発生します。
初心者ゆえの疑問です。

ご教示いただければと思います。

from keras.datasets import mnist from keras.layers import Dense, Dropout, Flatten, Activation from keras.layers import Conv2D, MaxPooling2D from keras.models import Sequential, load_model from keras.utils.np_utils import to_categorical from keras.utils.vis_utils import plot_model import numpy as np import matplotlib.pyplot as plt #import cv2 import os %matplotlib inline path = "./data/" files = os.listdir(path) data_set = [] labels=[] for item in files: img = cv2.imread(os.path.join(path, item)) #追加 img= cv2.resize(img, (80, 28)) # グレースケール変換 my_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # リスト型へ変換してappendで追加 #print(my_img) my_img = my_img.flatten().tolist() data_set.append(my_img) labels.append(item.split('.')[0]) # Numpyへ戻して data_set = np.array(data_set)/255 import pandas as pd labels_set=pd.get_dummies(labels).values # 正規化 data_set = data_set.reshape([-1, 28, 80, 1]) # モデルの定義 model = Sequential() model.add(Conv2D(filters=32, kernel_size=(3, 3),input_shape=(28,80,1))) model.add(Activation('relu')) model.add(Conv2D(filters=64, kernel_size=(3, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(128)) model.add(Activation('relu')) model.add(Dropout(0.5)) #かっこの中は重複なしのファイル数とする。 model.add(Dense(10)) model.add(Dense(2219)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy']) #変更する余地あり epochs=100 model.fit(data_set,labels_set, batch_size=128, epochs=100, verbose=1, validation_split=0.2) # 精度の評価 scores = model.evaluate(data_set, verbose=1) print('Test loss:', scores[0]) print('Test accuracy:', scores[1]) # データの可視化(テストデータの先頭の10枚) for i in range(10): plt.subplot(2, 5, i+1) plt.imshow(data_set[i].reshape((28,28)), 'gray') plt.suptitle("テストデータの先頭の10枚",fontsize=20) plt.show() # 予測(テストデータの先頭の10枚) pred = np.argmax(model.predict(data_set[0:10]), axis=1) print(pred) model.summary()

実行結果:



IndexError Traceback (most recent call last)
<ipython-input-2-d7df5a824556> in <module>()
110
111 # 精度の評価
--> 112 scores = model.evaluate(data_set, verbose=1)
113 print('Test loss:', scores[0])
114 print('Test accuracy:', scores[1])

~\Anaconda3\lib\site-packages\keras\engine\training.py in evaluate(self, x, y, batch_size, verbose, sample_weight, steps)
1111 batch_size=batch_size,
1112 verbose=verbose,
-> 1113 steps=steps)
1114
1115 def predict(self, x,

~\Anaconda3\lib\site-packages\keras\engine\training_arrays.py in test_loop(model, f, ins, batch_size, verbose, steps)
353 indices_for_conversion_to_dense = []
354 for i in range(len(feed)):
--> 355 if issparse(ins[i]) and not K.is_sparse(feed[i]):
356 indices_for_conversion_to_dense.append(i)
357

IndexError: list index out of range

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

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

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

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

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

guest

回答1

0

自己解決

エラーはコードを記載しなおしました。

from keras.datasets import mnist from keras.layers import Dense, Dropout, Flatten, Activation from keras.layers import Conv2D, MaxPooling2D from keras.models import Sequential, load_model from keras.utils.np_utils import to_categorical from keras.utils.vis_utils import plot_model import numpy as np import matplotlib.pyplot as plt from PIL import ImageFilter import os import glob from PIL import Image from os import listdir import pandas as pd %matplotlib inline path = "./data/" files = os.listdir(path) files = [filename for filename in listdir(path) if not filename.startswith('.')] data_set = [] labels=[] if not os.path.exists("data_set"): os.mkdir("data_set/") path02="./data_set/" files02 = os.listdir(path02) for item in files: img = Image.open('./data/' + item) #print(item) my_resize = img.resize((80, 28), Image.LANCZOS) for count,x in enumerate(np.arange(0.1, 2.1, 0.1)): my_img = my_resize.filter(ImageFilter.GaussianBlur(x)) my_img.save(str(path02 + item.split('.')[0] + "_GB" + str(count+1) + ".jpg")) #収縮 my_img = my_resize for count,y in enumerate(range(1, 4)): my_img = my_img.filter(ImageFilter.MinFilter()) my_img.save(str(path02 + item.split('.')[0] + "_MN" + str(count+1) + ".jpg")) #膨張 my_img2 = my_resize for count,z in enumerate(range(1, 2)): my_img2 = my_img2.filter(ImageFilter.MaxFilter()) my_img2.save(str(path02 + item.split('.')[0] + "_MX" + str(count+1) + ".jpg")) for item in files: img2 = Image.open('./data/' + item) img2 = img2.resize((80, 28)) img2 = np.array(img2) img2 = img2.flatten().tolist() data_set.append(img2) labels.append(item.split('.')[0]) for item in files02: img2 = Image.open('./data_set/' + item) img2 = img2.resize((80, 28)) img2 = np.array(img2) img2 = img2.flatten().tolist() data_set.append(img2) labels.append(item.split('.')[0]) # Numpyへ data_set = np.array(data_set)/255 labels_set=pd.get_dummies(labels).values # 正規化 data_set = data_set.reshape([-1, 28, 80, 3]) # モデルの定義 model = Sequential() model.add(Conv2D(filters=32, kernel_size=(3, 3),input_shape=(28,80,3))) model.add(Activation('relu')) model.add(Conv2D(filters=64, kernel_size=(3, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(128)) model.add(Activation('relu')) model.add(Dropout(0.5)) #かっこの中は重複なしのファイル数とする。 model.add(Dense(50)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy']) # epochs=100 model.fit(data_set,labels_set, batch_size=128, epochs=100, verbose=1, validation_split=0.2) model.summary()

投稿2019/06/07 22:00

matrix99999

総合スコア15

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問