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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。