質問編集履歴
1
記法を最新のKerasに合わせ、警告がなくなるように修正し、少し見やすくしました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -12,88 +12,46 @@
|
|
12
12
|
|
13
13
|
実行結果
|
14
14
|
|
15
|
-
$ python3 getboar-checker.py sample.JPG STC_0232.JPG STC_0280.JPG STC_0141.JPG STC_1442.JPG
|
15
|
+
$ python3 getboar-checker.py sample.JPG STC_0232.JPG STC_0280.JPG STC_0141.JPG STC_1442.JPG
|
16
|
-
|
17
|
-
JPG
|
18
|
-
|
19
|
-
|
20
16
|
|
21
17
|
Using TensorFlow backend.
|
22
18
|
|
23
|
-
/Users/nakagawa/Documents/pyprogram/getboar_keras2.py:27: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(32, (3, 3), input_shape=(50, 50, 3...
|
24
|
-
|
25
|
-
, padding="same")`
|
26
|
-
|
27
|
-
model.add(Conv2D(32, 3, 3, border_mode='same', input_shape=in_shape))
|
28
|
-
|
29
|
-
/Users/nakagawa/Documents/pyprogram/getboar_keras2.py:31: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(64, (3, 3), padding="same")`
|
30
|
-
|
31
|
-
model.add(Conv2D(64, 3, 3, border_mode='same'))
|
32
|
-
|
33
|
-
/Users/nakagawa/Documents/pyprogram/getboar_keras2.py:33: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(64, (3, 3))`
|
34
|
-
|
35
|
-
model.add(Conv2D(64, 3, 3))
|
36
|
-
|
37
19
|
+ 入力: sample.JPG
|
38
20
|
|
39
|
-
| 動物:
|
21
|
+
| 動物: nothing
|
40
22
|
|
41
23
|
| 状態: 0
|
42
24
|
|
43
25
|
+ 入力: STC_0232.JPG
|
44
26
|
|
45
|
-
| 動物:
|
27
|
+
| 動物: nothing
|
46
|
-
|
47
|
-
|
48
28
|
|
49
29
|
| 状態: 0
|
50
30
|
|
51
31
|
+ 入力: STC_0280.JPG
|
52
32
|
|
53
|
-
| 動物:
|
33
|
+
| 動物: nothing
|
54
34
|
|
55
35
|
| 状態: 0
|
56
36
|
|
57
37
|
+ 入力: STC_0141.JPG
|
58
38
|
|
59
|
-
| 動物:
|
39
|
+
| 動物: nothing
|
60
40
|
|
61
41
|
| 状態: 0
|
62
42
|
|
63
43
|
+ 入力: STC_1442.JPG
|
64
44
|
|
65
|
-
| 動物:
|
45
|
+
| 動物: nothing
|
66
46
|
|
67
47
|
| 状態: 0
|
68
48
|
|
69
|
-
+ 入力: STC_0253.JPG
|
70
|
-
|
71
|
-
| 動物: boar2
|
72
|
-
|
73
|
-
| 状態: 0
|
74
|
-
|
75
|
-
+ 入力: STC_0278.JPG
|
76
|
-
|
77
|
-
| 動物: boar2
|
78
|
-
|
79
|
-
| 状態: 0
|
80
|
-
|
81
|
-
+ 入力: STC_5392.JPG
|
82
|
-
|
83
|
-
| 動物: boar2
|
84
|
-
|
85
|
-
| 状態: 0
|
86
|
-
|
87
|
-
+ 入力: STC_0929.JPG
|
88
|
-
|
89
|
-
| 動物: boar2
|
90
|
-
|
91
|
-
| 状態: 0
|
92
|
-
|
93
49
|
|
94
50
|
|
95
51
|
###該当のソースコード
|
96
52
|
|
53
|
+
|
54
|
+
|
97
55
|
```Python 3.x
|
98
56
|
|
99
57
|
import getboar_keras2 as getboar
|
@@ -122,7 +80,7 @@
|
|
122
80
|
|
123
81
|
image_size = 50
|
124
82
|
|
125
|
-
categories = ["
|
83
|
+
categories = ["nothing", "others", "boar2"]
|
126
84
|
|
127
85
|
state = [0, 1, 2]
|
128
86
|
|
@@ -154,7 +112,7 @@
|
|
154
112
|
|
155
113
|
model = getboar.build_model(X.shape[1:])
|
156
114
|
|
157
|
-
model.load_weights("./image/getboar
|
115
|
+
model.load_weights("./image/hogetboar-model.hdf5")
|
158
116
|
|
159
117
|
|
160
118
|
|
@@ -222,11 +180,21 @@
|
|
222
180
|
|
223
181
|
画像データを減らしてやってみたが、効果なし。
|
224
182
|
|
183
|
+
binary_crossentropyをcategorical_crossentropyにしたが、効果なし。
|
184
|
+
|
225
185
|
|
226
186
|
|
227
187
|
###補足情報(言語/FW/ツール等のバージョンなど)
|
228
188
|
|
229
|
-
Python3.6.1
|
189
|
+
Python3.6.1
|
190
|
+
|
191
|
+
tensorflow (1.3.0)
|
192
|
+
|
193
|
+
tensorflow-tensorboard (0.1.5)
|
194
|
+
|
195
|
+
Keras (2.0.8)
|
196
|
+
|
197
|
+
numpy (1.13.1)
|
230
198
|
|
231
199
|
|
232
200
|
|
@@ -240,9 +208,11 @@
|
|
240
208
|
|
241
209
|
|
242
210
|
|
243
|
-
(1)データをNumpy配列に変換し、チューニングするプログラム
|
211
|
+
(1)データをNumpy配列に変換し、チューニングするプログラム(getboar-makedata2.py)
|
212
|
+
|
213
|
+
|
214
|
+
|
244
|
-
|
215
|
+
```Python 3.x
|
245
|
-
|
246
216
|
|
247
217
|
from PIL import Image
|
248
218
|
|
@@ -256,7 +226,7 @@
|
|
256
226
|
|
257
227
|
root_dir = "./image/"
|
258
228
|
|
259
|
-
categories = ["no
|
229
|
+
categories = ["nothing", "boar2", "others"]
|
260
230
|
|
261
231
|
nb_classes = len(categories)
|
262
232
|
|
@@ -348,13 +318,15 @@
|
|
348
318
|
|
349
319
|
xy = (X_train, X_test, y_train, y_test)
|
350
320
|
|
351
|
-
np.save("./image/getboar
|
321
|
+
np.save("./image/hogetboar.npy", xy)
|
352
322
|
|
353
323
|
print("ok,", len(y_train))
|
354
324
|
|
355
|
-
|
325
|
+
```
|
356
|
-
|
326
|
+
|
357
|
-
(2)CNNで学習させるプログラム
|
327
|
+
Python (2)CNNで学習させるプログラム(getboar-keras2.py)
|
328
|
+
|
329
|
+
```Python 3.x
|
358
330
|
|
359
331
|
from keras.models import Sequential
|
360
332
|
|
@@ -370,7 +342,7 @@
|
|
370
342
|
|
371
343
|
root_dir = "./image/"
|
372
344
|
|
373
|
-
categories = ["boar2", "others"
|
345
|
+
categories = ["nothing", "boar2", "others"]
|
374
346
|
|
375
347
|
nb_classes = len(categories)
|
376
348
|
|
@@ -378,9 +350,13 @@
|
|
378
350
|
|
379
351
|
|
380
352
|
|
353
|
+
# データ読み込み
|
354
|
+
|
381
355
|
def main():
|
382
356
|
|
383
|
-
X_train, X_test, y_train, y_test = np.load("./image/getboar
|
357
|
+
X_train, X_test, y_train, y_test = np.load("./image/hogetboar.npy")
|
358
|
+
|
359
|
+
#データを正規化
|
384
360
|
|
385
361
|
X_train = X_train.astype("float") / 256
|
386
362
|
|
@@ -390,17 +366,21 @@
|
|
390
366
|
|
391
367
|
y_test = np_utils.to_categorical(y_test, nb_classes)
|
392
368
|
|
369
|
+
#モデルを訓練 & 評価
|
370
|
+
|
393
371
|
model = model_train(X_train, y_train)
|
394
372
|
|
395
373
|
model_eval(model, X_test, y_test)
|
396
374
|
|
397
375
|
|
398
376
|
|
377
|
+
#モデル構築
|
378
|
+
|
399
379
|
def build_model(in_shape):
|
400
380
|
|
401
381
|
model = Sequential()
|
402
382
|
|
403
|
-
model.add(Conv2D(32, 3, 3,
|
383
|
+
model.add(Conv2D(32, (3, 3), padding='same', input_shape=in_shape))
|
404
384
|
|
405
385
|
model.add(Activation('relu'))
|
406
386
|
|
@@ -408,11 +388,11 @@
|
|
408
388
|
|
409
389
|
model.add(Dropout(0.25))
|
410
390
|
|
411
|
-
model.add(Conv2D(64, 3, 3,
|
391
|
+
model.add(Conv2D(64, (3, 3), padding='same'))
|
412
392
|
|
413
393
|
model.add(Activation('relu'))
|
414
394
|
|
415
|
-
model.add(Conv2D(64, 3, 3))
|
395
|
+
model.add(Conv2D(64, (3, 3)))
|
416
396
|
|
417
397
|
model.add(MaxPooling2D(pool_size=(2, 2)))
|
418
398
|
|
@@ -430,21 +410,23 @@
|
|
430
410
|
|
431
411
|
model.add(Activation('softmax'))
|
432
412
|
|
433
|
-
model.compile(loss = '
|
413
|
+
model.compile(loss = 'categorical_crossentropy', optimizer = 'rmsprop', metrics=['accuracy'])
|
434
414
|
|
435
415
|
return model
|
436
416
|
|
437
417
|
|
438
418
|
|
419
|
+
# 訓練
|
420
|
+
|
439
421
|
def model_train(X, y):
|
440
422
|
|
441
423
|
model = build_model(X.shape[1:])
|
442
424
|
|
443
|
-
model.fit(X, y, batch_size=32,
|
425
|
+
model.fit(X, y, batch_size=32, epochs=30)
|
426
|
+
|
444
|
-
|
427
|
+
#モデル保存
|
445
|
-
|
446
|
-
|
428
|
+
|
447
|
-
hdf5_file = "./image/getboar
|
429
|
+
hdf5_file = "./image/hogetboar-model.hdf5"
|
448
430
|
|
449
431
|
model.save_weights(hdf5_file)
|
450
432
|
|
@@ -452,7 +434,9 @@
|
|
452
434
|
|
453
435
|
|
454
436
|
|
437
|
+
#モデル評価
|
438
|
+
|
455
|
-
|
439
|
+
def model_eval(model, X, y):
|
456
440
|
|
457
441
|
score = model.evaluate(X, y)
|
458
442
|
|
@@ -465,3 +449,5 @@
|
|
465
449
|
if __name__ == "__main__":
|
466
450
|
|
467
451
|
main()
|
452
|
+
|
453
|
+
```
|