質問編集履歴

1

記法を最新のKerasに合わせ、警告がなくなるように修正し、少し見やすくしました。

2017/09/05 05:38

投稿

mizu4423
mizu4423

スコア10

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 STC_0253.JPG STC_0278.JPG STC_5392.JPG STC_0929.
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
- | 動物: boar2
21
+ | 動物: nothing
40
22
 
41
23
  | 状態: 0
42
24
 
43
25
  + 入力: STC_0232.JPG
44
26
 
45
- | 動物: boar2
27
+ | 動物: nothing
46
-
47
-
48
28
 
49
29
  | 状態: 0
50
30
 
51
31
  + 入力: STC_0280.JPG
52
32
 
53
- | 動物: boar2
33
+ | 動物: nothing
54
34
 
55
35
  | 状態: 0
56
36
 
57
37
  + 入力: STC_0141.JPG
58
38
 
59
- | 動物: boar2
39
+ | 動物: nothing
60
40
 
61
41
  | 状態: 0
62
42
 
63
43
  + 入力: STC_1442.JPG
64
44
 
65
- | 動物: boar2
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 = ["boar2", "others", "normal"]
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/getboar2-model.hdf5")
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 = ["normal", "boar2", "others"]
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/getboar2.npy", xy)
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", "normal"]
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/getboar2.npy")
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, border_mode='same', input_shape=in_shape))
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, border_mode='same'))
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 = 'binary_crossentropy', optimizer = 'rmsprop', metrics=['accuracy'])
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, nb_epoch=30)
425
+ model.fit(X, y, batch_size=32, epochs=30)
426
+
444
-
427
+ #モデル保存
445
-
446
-
428
+
447
- hdf5_file = "./image/getboar2-model.hdf5"
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
- def model_eval(model, X, y):
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
+ ```