質問編集履歴

4

誤字

2019/06/02 02:16

投稿

matrix99999
matrix99999

スコア15

test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,9 @@
4
4
 
5
5
  何とかコードはできましたが、
6
6
 
7
- 学習してからのテストデータの精度を調べる方法がわかりません。
7
+ 学習してからのテストデータの精度を調べる方法がわからず、
8
+
9
+ エラーが発生します。
8
10
 
9
11
  初心者ゆえの疑問です。
10
12
 

3

コード修正

2019/06/02 02:15

投稿

matrix99999
matrix99999

スコア15

test CHANGED
File without changes
test CHANGED
@@ -162,6 +162,36 @@
162
162
 
163
163
  validation_split=0.2)
164
164
 
165
+ # 精度の評価
166
+
167
+ scores = model.evaluate(data_set, verbose=1)
168
+
169
+ print('Test loss:', scores[0])
170
+
171
+ print('Test accuracy:', scores[1])
172
+
173
+
174
+
175
+ # データの可視化(テストデータの先頭の10枚)
176
+
177
+ for i in range(10):
178
+
179
+ plt.subplot(2, 5, i+1)
180
+
181
+ plt.imshow(data_set[i].reshape((28,28)), 'gray')
182
+
183
+ plt.suptitle("テストデータの先頭の10枚",fontsize=20)
184
+
185
+ plt.show()
186
+
187
+
188
+
189
+ # 予測(テストデータの先頭の10枚)
190
+
191
+ pred = np.argmax(model.predict(data_set[0:10]), axis=1)
192
+
193
+ print(pred)
194
+
165
195
 
166
196
 
167
197
  model.summary()
@@ -174,60 +204,50 @@
174
204
 
175
205
  _________________________________________________________________
176
206
 
177
- Layer (type) Output Shape Param #
178
-
179
- =================================================================
180
-
181
- conv2d_1 (Conv2D) (None, 26, 78, 32) 320
182
-
183
- _________________________________________________________________
184
-
185
- activation_1 (Activation) (None, 26, 78, 32) 0
186
-
187
- _________________________________________________________________
188
-
189
- conv2d_2 (Conv2D) (None, 24, 76, 64) 18496
190
-
191
- _________________________________________________________________
192
-
193
- activation_2 (Activation) (None, 24, 76, 64) 0
194
-
195
- _________________________________________________________________
196
-
197
- max_pooling2d_1 (MaxPooling2 (None, 12, 38, 64) 0
198
-
199
- _________________________________________________________________
200
-
201
- dropout_1 (Dropout) (None, 12, 38, 64) 0
202
-
203
- _________________________________________________________________
204
-
205
- flatten_1 (Flatten) (None, 29184) 0
206
-
207
- _________________________________________________________________
208
-
209
- dense_1 (Dense) (None, 128) 3735680
210
-
211
- _________________________________________________________________
212
-
213
- activation_3 (Activation) (None, 128) 0
214
-
215
- _________________________________________________________________
216
-
217
- dropout_2 (Dropout) (None, 128) 0
218
-
219
- _________________________________________________________________
220
-
221
- dense_2 (Dense) (None, 2219) 286251
222
-
223
- _________________________________________________________________
224
-
225
- activation_4 (Activation) (None, 2219) 0
226
-
227
- =================================================================
228
-
229
- Total params: 4,040,747
230
-
231
- Trainable params: 4,040,747
232
-
233
- Non-trainable params: 0
207
+ ---------------------------------------------------------------------------
208
+
209
+ IndexError Traceback (most recent call last)
210
+
211
+ <ipython-input-2-d7df5a824556> in <module>()
212
+
213
+ 110
214
+
215
+ 111 # 精度の評価
216
+
217
+ --> 112 scores = model.evaluate(data_set, verbose=1)
218
+
219
+ 113 print('Test loss:', scores[0])
220
+
221
+ 114 print('Test accuracy:', scores[1])
222
+
223
+
224
+
225
+ ~\Anaconda3\lib\site-packages\keras\engine\training.py in evaluate(self, x, y, batch_size, verbose, sample_weight, steps)
226
+
227
+ 1111 batch_size=batch_size,
228
+
229
+ 1112 verbose=verbose,
230
+
231
+ -> 1113 steps=steps)
232
+
233
+ 1114
234
+
235
+ 1115 def predict(self, x,
236
+
237
+
238
+
239
+ ~\Anaconda3\lib\site-packages\keras\engine\training_arrays.py in test_loop(model, f, ins, batch_size, verbose, steps)
240
+
241
+ 353 indices_for_conversion_to_dense = []
242
+
243
+ 354 for i in range(len(feed)):
244
+
245
+ --> 355 if issparse(ins[i]) and not K.is_sparse(feed[i]):
246
+
247
+ 356 indices_for_conversion_to_dense.append(i)
248
+
249
+ 357
250
+
251
+
252
+
253
+ IndexError: list index out of range

2

コード修正

2019/06/02 02:14

投稿

matrix99999
matrix99999

スコア15

test CHANGED
File without changes
test CHANGED
@@ -64,19 +64,7 @@
64
64
 
65
65
  my_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
66
66
 
67
- # my_img = cv2.cvtColor(my_img, cv2.COLOR_GRAY2BGR)
67
+
68
-
69
- #幅、高さ 80*28
70
-
71
- """
72
-
73
- #幅、高さ 80*28
74
-
75
- my_img= cv2.resize(gray, (80, 28))
76
-
77
- """
78
-
79
- # my_img= cv2.resize(gray, (80, 28))
80
68
 
81
69
 
82
70
 
@@ -86,66 +74,22 @@
86
74
 
87
75
  my_img = my_img.flatten().tolist()
88
76
 
89
- # my_img = my_img.tolist()
90
-
91
77
  data_set.append(my_img)
92
78
 
93
79
  labels.append(item.split('.')[0])
94
80
 
95
- #ぼかし
81
+
96
-
97
- # my_img = cv2.GaussianBlur(img, (3, 3), 0)
82
+
98
-
99
- # data_set.append(my_img.flatten().tolist())
83
+
100
-
101
- # labels.append(item.split('.')[0])
102
84
 
103
85
 
104
86
 
105
- # フィルタを定義
106
-
107
- # filt = np.array([[0, 1, 0],
108
-
109
- # [1, 0, 1],
110
-
111
- # [0, 1, 0]], np.uint8)
112
-
113
-
114
-
115
-
116
-
117
- # 膨張
118
-
119
- # my_img =cv2.dilate(img, filt)
120
-
121
- # data_set.append(my_img.flatten().tolist())
122
-
123
- # labels.append(item.split('.')[0])
124
-
125
- # 収縮
126
-
127
- # my_img =cv2.erode(img, filt)
128
-
129
- # data_set.append(my_img.flatten().tolist())
130
-
131
- # labels.append(item.split('.')[0])
132
-
133
-
134
-
135
- # cv2.imwrite(str(file) + "_" + str(count) + ".jpg", img)
136
-
137
-
138
-
139
-
140
-
141
87
  # Numpyへ戻して
142
88
 
143
89
 
144
90
 
145
91
  data_set = np.array(data_set)/255
146
92
 
147
- # print(data_set)
148
-
149
93
  import pandas as pd
150
94
 
151
95
 
@@ -156,24 +100,10 @@
156
100
 
157
101
  # 正規化
158
102
 
159
- #data_set = data_set/255
160
-
161
103
  data_set = data_set.reshape([-1, 28, 80, 1])
162
104
 
163
105
 
164
106
 
165
- #if not os.path.exists("data_set"):
166
-
167
- # os.mkdir("data_set")
168
-
169
-
170
-
171
- #for num, im in enumerate(data_set):
172
-
173
- # まず保存先のディレクトリ"data_set/"を指定、番号を付けて保存
174
-
175
- # cv2.imwrite("data_set/" + str(num) + ".jpg" ,im)
176
-
177
107
 
178
108
 
179
109
  # モデルの定義

1

書式改善

2019/06/02 00:42

投稿

matrix99999
matrix99999

スコア15

test CHANGED
@@ -1 +1 @@
1
- python openCV、MNISTを利用した文字認証
1
+ python MNISTを利用した文字認証
test CHANGED
@@ -1,14 +1,226 @@
1
- pythonを学習し初めてopenCVを利用した文字認証を行おうとしています。
1
+ pythonを学習し初めて機械学習を利用した文字認証を行おうとしています。
2
2
 
3
3
  文字は4文字の英字で、幅80 高さ28のjpgファイルです。
4
4
 
5
+ 何とかコードはできましたが、
6
+
5
- のデータを読み込み数値を変えコードを作成してい
7
+ 学習してからテストデータの精度調べ方法がわかりせん
8
+
6
-
9
+ 初心者ゆえの疑問です。
10
+
11
+
12
+
7
- 色々なものを参考にしながら作成しています。
13
+ ご教示ただければと思います。
14
+
15
+
16
+
8
-
17
+ ```ここに言語を入力
18
+
9
-
19
+ from keras.datasets import mnist
20
+
10
-
21
+ from keras.layers import Dense, Dropout, Flatten, Activation
22
+
23
+ from keras.layers import Conv2D, MaxPooling2D
24
+
25
+ from keras.models import Sequential, load_model
26
+
27
+ from keras.utils.np_utils import to_categorical
28
+
29
+ from keras.utils.vis_utils import plot_model
30
+
31
+ import numpy as np
32
+
33
+ import matplotlib.pyplot as plt
34
+
35
+ #import cv2
36
+
37
+ import os
38
+
39
+ %matplotlib inline
40
+
41
+
42
+
43
+ path = "./data/"
44
+
45
+ files = os.listdir(path)
46
+
47
+
48
+
49
+ data_set = []
50
+
51
+ labels=[]
52
+
53
+
54
+
55
+ for item in files:
56
+
57
+ img = cv2.imread(os.path.join(path, item))
58
+
59
+ #追加
60
+
61
+ img= cv2.resize(img, (80, 28))
62
+
63
+ # グレースケール変換
64
+
65
+ my_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
66
+
67
+ # my_img = cv2.cvtColor(my_img, cv2.COLOR_GRAY2BGR)
68
+
11
- 現在分からないのは、
69
+ #幅高さ 80*28
70
+
71
+ """
72
+
73
+ #幅、高さ 80*28
74
+
75
+ my_img= cv2.resize(gray, (80, 28))
76
+
77
+ """
78
+
79
+ # my_img= cv2.resize(gray, (80, 28))
80
+
81
+
82
+
83
+ # リスト型へ変換してappendで追加
84
+
85
+ #print(my_img)
86
+
87
+ my_img = my_img.flatten().tolist()
88
+
89
+ # my_img = my_img.tolist()
90
+
91
+ data_set.append(my_img)
92
+
93
+ labels.append(item.split('.')[0])
94
+
95
+ #ぼかし
96
+
97
+ # my_img = cv2.GaussianBlur(img, (3, 3), 0)
98
+
99
+ # data_set.append(my_img.flatten().tolist())
100
+
101
+ # labels.append(item.split('.')[0])
102
+
103
+
104
+
105
+ # フィルタを定義
106
+
107
+ # filt = np.array([[0, 1, 0],
108
+
109
+ # [1, 0, 1],
110
+
111
+ # [0, 1, 0]], np.uint8)
112
+
113
+
114
+
115
+
116
+
117
+ # 膨張
118
+
119
+ # my_img =cv2.dilate(img, filt)
120
+
121
+ # data_set.append(my_img.flatten().tolist())
122
+
123
+ # labels.append(item.split('.')[0])
124
+
125
+ # 収縮
126
+
127
+ # my_img =cv2.erode(img, filt)
128
+
129
+ # data_set.append(my_img.flatten().tolist())
130
+
131
+ # labels.append(item.split('.')[0])
132
+
133
+
134
+
135
+ # cv2.imwrite(str(file) + "_" + str(count) + ".jpg", img)
136
+
137
+
138
+
139
+
140
+
141
+ # Numpyへ戻して
142
+
143
+
144
+
145
+ data_set = np.array(data_set)/255
146
+
147
+ # print(data_set)
148
+
149
+ import pandas as pd
150
+
151
+
152
+
153
+ labels_set=pd.get_dummies(labels).values
154
+
155
+
156
+
157
+ # 正規化
158
+
159
+ #data_set = data_set/255
160
+
161
+ data_set = data_set.reshape([-1, 28, 80, 1])
162
+
163
+
164
+
165
+ #if not os.path.exists("data_set"):
166
+
167
+ # os.mkdir("data_set")
168
+
169
+
170
+
171
+ #for num, im in enumerate(data_set):
172
+
173
+ # まず保存先のディレクトリ"data_set/"を指定、番号を付けて保存
174
+
175
+ # cv2.imwrite("data_set/" + str(num) + ".jpg" ,im)
176
+
177
+
178
+
179
+ # モデルの定義
180
+
181
+ model = Sequential()
182
+
183
+ model.add(Conv2D(filters=32, kernel_size=(3, 3),input_shape=(28,80,1)))
184
+
185
+ model.add(Activation('relu'))
186
+
187
+ model.add(Conv2D(filters=64, kernel_size=(3, 3)))
188
+
189
+ model.add(Activation('relu'))
190
+
191
+ model.add(MaxPooling2D(pool_size=(2, 2)))
192
+
193
+ model.add(Dropout(0.25))
194
+
195
+ model.add(Flatten())
196
+
197
+ model.add(Dense(128))
198
+
199
+ model.add(Activation('relu'))
200
+
201
+ model.add(Dropout(0.5))
202
+
203
+
204
+
205
+ #かっこの中は重複なしのファイル数とする。 model.add(Dense(10))
206
+
207
+ model.add(Dense(2219))
208
+
209
+
210
+
211
+ model.add(Activation('softmax'))
212
+
213
+
214
+
215
+
216
+
217
+ model.compile(loss='categorical_crossentropy',
218
+
219
+ optimizer='adadelta',
220
+
221
+ metrics=['accuracy'])
222
+
223
+ #変更する余地あり epochs=100
12
224
 
13
225
  model.fit(data_set,labels_set,
14
226
 
@@ -20,258 +232,72 @@
20
232
 
21
233
  validation_split=0.2)
22
234
 
23
-
24
-
235
+
236
+
25
- のコードで下記エラーが発生します。
237
+ model.summary()
26
-
27
- 調べるとラベルの数と入力の数とラベルの数の不一致とまでは分かりましたが修正すべきことが
238
+
28
-
29
- 分かりません。ご教示いただければと思います。
239
+
30
-
31
- コード
32
240
 
33
241
  ```
34
242
 
35
-
36
-
37
- ValueError Traceback (most recent call last)
38
-
39
- <ipython-input-10-104236dcb6cb> in <module>()
40
-
41
- 105 epochs=100,
42
-
43
- 106 verbose=1,
44
-
45
- --> 107 validation_split=0.2)
46
-
47
- 108
48
-
49
- 109 model.summary()
50
-
51
- ValueError: Input arrays should have the same number of samples as target arrays. Found 26628 input samples and 8876 target samples.
52
-
53
-
54
-
55
- ```ここに言語を入力
56
-
57
- from keras.datasets import mnist
58
-
59
- from keras.layers import Dense, Dropout, Flatten, Activation
60
-
61
- from keras.layers import Conv2D, MaxPooling2D
62
-
63
- from keras.models import Sequential, load_model
64
-
65
- from keras.utils.np_utils import to_categorical
66
-
67
- from keras.utils.vis_utils import plot_model
68
-
69
- import numpy as np
70
-
71
- import matplotlib.pyplot as plt
72
-
73
- import cv2
74
-
75
- import os
76
-
77
- %matplotlib inline
78
-
79
-
80
-
81
- path = "./data/"
82
-
83
- files = os.listdir(path)
84
-
85
-
86
-
87
- data_set = []
88
-
89
- labels=[]
90
-
91
-
92
-
93
- for item in files:
94
-
95
- img = cv2.imread(os.path.join(path, item))
96
-
97
- #追加
98
-
99
- img= cv2.resize(img, (80, 28))
100
-
101
- # グレースケール変換
102
-
103
- my_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
104
-
105
- my_img = cv2.cvtColor(my_img, cv2.COLOR_GRAY2BGR)
106
-
107
- #幅、高さ 80*28
108
-
109
- """
110
-
111
- #幅、高さ 80*28
112
-
113
- my_img= cv2.resize(gray, (80, 28))
114
-
115
- """
116
-
117
- # my_img= cv2.resize(gray, (80, 28))
118
-
119
-
120
-
121
- # リスト型へ変換してappendで追加
122
-
123
- #print(my_img)
124
-
125
- my_img = my_img.tolist()
126
-
127
- data_set.append(my_img)
128
-
129
- labels.append(item.split('.')[0])
130
-
131
- #ぼかし
132
-
133
- my_img = cv2.GaussianBlur(img, (5, 5), 0)
134
-
135
- data_set.append(my_img.tolist())
136
-
137
- labels.append(item.split('.')[0])
138
-
139
-
140
-
141
- # フィルタを定義
142
-
143
- filt = np.array([[0, 1, 0],
144
-
145
- [1, 0, 1],
146
-
147
- [0, 1, 0]], np.uint8)
148
-
149
-
150
-
151
-
152
-
153
- # 膨張
154
-
155
- my_img =cv2.dilate(img, filt)
156
-
157
- data_set.append(my_img.tolist())
158
-
159
- labels.append(item.split('.')[0])
160
-
161
- # 収縮
162
-
163
- my_img =cv2.erode(img, filt)
164
-
165
- data_set.append(my_img.tolist())
166
-
167
- labels.append(item.split('.')[0])
168
-
169
-
170
-
171
- # cv2.imwrite(str(file) + "_" + str(count) + ".jpg", img)
172
-
173
-
174
-
175
-
176
-
177
- # Numpyへ戻して
178
-
179
-
180
-
181
- data_set = np.array(data_set)
182
-
183
- # print(data_set)
184
-
185
- import pandas as pd
186
-
187
-
188
-
189
- labels_set=pd.get_dummies(labels).values
190
-
191
-
192
-
193
- # 正規化
194
-
195
- data_set = data_set/255
196
-
197
- data_set = data_set.reshape([-1, 80, 28, 1])
198
-
199
-
200
-
201
- if not os.path.exists("data_set"):
202
-
203
- os.mkdir("data_set")
204
-
205
-
206
-
207
- for num, im in enumerate(data_set):
208
-
209
- # まず保存先のディレクトリ"data_set/"を指定、番号を付けて保存
210
-
211
- cv2.imwrite("data_set/" + str(num) + ".jpg" ,im)
212
-
213
-
214
-
215
- # モデルの定義
216
-
217
- model = Sequential()
218
-
219
- model.add(Conv2D(filters=32, kernel_size=(3, 3),input_shape=(80,28,1)))
220
-
221
- model.add(Activation('relu'))
222
-
223
- model.add(Conv2D(filters=64, kernel_size=(3, 3)))
224
-
225
- model.add(Activation('relu'))
226
-
227
- model.add(MaxPooling2D(pool_size=(2, 2)))
228
-
229
- model.add(Dropout(0.25))
230
-
231
- model.add(Flatten())
232
-
233
- model.add(Dense(128))
234
-
235
- model.add(Activation('relu'))
236
-
237
- model.add(Dropout(0.5))
238
-
239
-
240
-
241
- #かっこの中は重複なしのファイル数とする。 model.add(Dense(10))
242
-
243
- model.add(Dense(2219))
244
-
245
-
246
-
247
- model.add(Activation('softmax'))
248
-
249
-
250
-
251
-
252
-
253
- model.compile(loss='categorical_crossentropy',
254
-
255
- optimizer='adadelta',
256
-
257
- metrics=['accuracy'])
258
-
259
- #変更する余地あり epochs=100
260
-
261
- model.fit(data_set,labels_set,
262
-
263
- batch_size=128,
264
-
265
- epochs=100,
266
-
267
- verbose=1,
268
-
269
- validation_split=0.2)
270
-
271
-
272
-
273
- model.summary()
274
-
275
-
276
-
277
- ```
243
+ 実行結果:
244
+
245
+ _________________________________________________________________
246
+
247
+ Layer (type) Output Shape Param #
248
+
249
+ =================================================================
250
+
251
+ conv2d_1 (Conv2D) (None, 26, 78, 32) 320
252
+
253
+ _________________________________________________________________
254
+
255
+ activation_1 (Activation) (None, 26, 78, 32) 0
256
+
257
+ _________________________________________________________________
258
+
259
+ conv2d_2 (Conv2D) (None, 24, 76, 64) 18496
260
+
261
+ _________________________________________________________________
262
+
263
+ activation_2 (Activation) (None, 24, 76, 64) 0
264
+
265
+ _________________________________________________________________
266
+
267
+ max_pooling2d_1 (MaxPooling2 (None, 12, 38, 64) 0
268
+
269
+ _________________________________________________________________
270
+
271
+ dropout_1 (Dropout) (None, 12, 38, 64) 0
272
+
273
+ _________________________________________________________________
274
+
275
+ flatten_1 (Flatten) (None, 29184) 0
276
+
277
+ _________________________________________________________________
278
+
279
+ dense_1 (Dense) (None, 128) 3735680
280
+
281
+ _________________________________________________________________
282
+
283
+ activation_3 (Activation) (None, 128) 0
284
+
285
+ _________________________________________________________________
286
+
287
+ dropout_2 (Dropout) (None, 128) 0
288
+
289
+ _________________________________________________________________
290
+
291
+ dense_2 (Dense) (None, 2219) 286251
292
+
293
+ _________________________________________________________________
294
+
295
+ activation_4 (Activation) (None, 2219) 0
296
+
297
+ =================================================================
298
+
299
+ Total params: 4,040,747
300
+
301
+ Trainable params: 4,040,747
302
+
303
+ Non-trainable params: 0