質問編集履歴

3

正しく動作するモデルについて追記

2020/01/23 02:26

投稿

Hagasuke
Hagasuke

スコア8

test CHANGED
File without changes
test CHANGED
@@ -42,11 +42,11 @@
42
42
 
43
43
  ④別の重みをダウンロードして実行 ⇒ 最新版でないとのメッセージがでたため、元の重みに戻した
44
44
 
45
-
45
+ ⑤転移学習を行わない場合の結果を追記いたしました(画像数とepoch数は異なる)。
46
-
47
-
48
-
46
+
47
+
48
+
49
- # スクリプト
49
+ # 問題のスクリプト
50
50
 
51
51
 
52
52
 
@@ -196,7 +196,7 @@
196
196
 
197
197
 
198
198
 
199
- # 結果
199
+ # 問題のスクリプトの結果
200
200
 
201
201
 
202
202
 
@@ -275,3 +275,195 @@
275
275
 
276
276
 
277
277
  ```
278
+
279
+
280
+
281
+ # 成功するスクリプト
282
+
283
+ ```python
284
+
285
+ # 画像とラベルをtrain, validation, testで分割
286
+
287
+ X_train, X_test, y_train, y_test = train_test_split(x_all_data, y_GroundTruth, test_size=0.2, random_state=1)
288
+
289
+ X_train, X_val , y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=1)
290
+
291
+
292
+
293
+ y_train = to_categorical(y_train)
294
+
295
+ y_val = to_categorical(y_val)
296
+
297
+ y_test = to_categorical(y_test)
298
+
299
+
300
+
301
+ model = Sequential()
302
+
303
+
304
+
305
+ # 入力画像は224 X 224 X 3
306
+
307
+ model.add(Conv2D(16, kernel_size=(5, 5),padding='same', activation='relu',
308
+
309
+ kernel_initializer='he_normal', input_shape=(224, 224, 3)))
310
+
311
+ model.add(MaxPooling2D(pool_size=(2, 2)))
312
+
313
+ model.add(Conv2D(64, kernel_size=(5, 5),padding='same', activation='relu',
314
+
315
+ kernel_initializer='he_normal'))
316
+
317
+ model.add(MaxPooling2D(pool_size=(2, 2)))
318
+
319
+ model.add(Conv2D(128, kernel_size=(5, 5),padding='same', activation='relu',
320
+
321
+ kernel_initializer='he_normal'))
322
+
323
+ model.add(MaxPooling2D(pool_size=(2, 2)))
324
+
325
+
326
+
327
+ model.add(Flatten())
328
+
329
+ model.add(Dense(units=512))
330
+
331
+ model.add(Activation('relu'))
332
+
333
+ model.add(Dense(units=256))
334
+
335
+ model.add(Activation('relu'))
336
+
337
+ model.add(Dense(units=256))
338
+
339
+ model.add(Activation('relu'))
340
+
341
+ model.add(Dense(8, activation='softmax'))
342
+
343
+
344
+
345
+ model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
346
+
347
+
348
+
349
+ history = model.fit(X_train, y_train, batch_size=8, verbose=1, epochs=15, validation_data=(X_val, y_val))
350
+
351
+
352
+
353
+
354
+
355
+ y_pred = model.predict(X_test, batch_size=8, verbose=0)
356
+
357
+
358
+
359
+ y_test_arg = np.argmax(y_test, axis=1)
360
+
361
+ y_pred_arg = np.argmax(y_pred, axis=1)
362
+
363
+
364
+
365
+ print("Confusion Matrix")
366
+
367
+ print(confusion_matrix(y_test_arg, y_pred_arg))
368
+
369
+
370
+
371
+ print('Accuracy: ', accuracy_score(y_test_arg, y_pred_arg))
372
+
373
+ print('F1 Score: ', f1_score(y_test_arg, y_pred_arg,average="macro"))
374
+
375
+
376
+
377
+ ```
378
+
379
+
380
+
381
+ # 成功するスクリプトの結果
382
+
383
+ ```python
384
+
385
+ Train on 670 samples, validate on 168 samples
386
+
387
+ Epoch 1/15
388
+
389
+ 670/670 [==============================] - 22s 33ms/step - loss: 11.9808 - accuracy: 0.3149 - val_loss: 1.4312 - val_accuracy: 0.3810
390
+
391
+ Epoch 2/15
392
+
393
+ 670/670 [==============================] - 6s 9ms/step - loss: 1.2536 - accuracy: 0.5746 - val_loss: 1.0848 - val_accuracy: 0.6726
394
+
395
+ Epoch 3/15
396
+
397
+ 670/670 [==============================] - 6s 9ms/step - loss: 1.1292 - accuracy: 0.6149 - val_loss: 1.1626 - val_accuracy: 0.6369
398
+
399
+ Epoch 4/15
400
+
401
+ 670/670 [==============================] - 6s 9ms/step - loss: 0.9577 - accuracy: 0.6343 - val_loss: 0.9260 - val_accuracy: 0.6786
402
+
403
+ Epoch 5/15
404
+
405
+ 670/670 [==============================] - 6s 9ms/step - loss: 0.7463 - accuracy: 0.7313 - val_loss: 0.8360 - val_accuracy: 0.6845
406
+
407
+ Epoch 6/15
408
+
409
+ 670/670 [==============================] - 6s 9ms/step - loss: 0.6855 - accuracy: 0.7507 - val_loss: 0.9705 - val_accuracy: 0.7262
410
+
411
+ Epoch 7/15
412
+
413
+ 670/670 [==============================] - 6s 9ms/step - loss: 0.6168 - accuracy: 0.7731 - val_loss: 1.0714 - val_accuracy: 0.7619
414
+
415
+ Epoch 8/15
416
+
417
+ 670/670 [==============================] - 6s 9ms/step - loss: 0.4977 - accuracy: 0.8164 - val_loss: 0.9056 - val_accuracy: 0.6964
418
+
419
+ Epoch 9/15
420
+
421
+ 670/670 [==============================] - 6s 9ms/step - loss: 0.3705 - accuracy: 0.8716 - val_loss: 0.7673 - val_accuracy: 0.7321
422
+
423
+ Epoch 10/15
424
+
425
+ 670/670 [==============================] - 6s 9ms/step - loss: 0.2310 - accuracy: 0.9075 - val_loss: 0.7087 - val_accuracy: 0.7798
426
+
427
+ Epoch 11/15
428
+
429
+ 670/670 [==============================] - 6s 9ms/step - loss: 0.1560 - accuracy: 0.9418 - val_loss: 1.0097 - val_accuracy: 0.7262
430
+
431
+ Epoch 12/15
432
+
433
+ 670/670 [==============================] - 6s 9ms/step - loss: 0.1333 - accuracy: 0.9507 - val_loss: 0.8617 - val_accuracy: 0.8452
434
+
435
+ Epoch 13/15
436
+
437
+ 670/670 [==============================] - 6s 9ms/step - loss: 0.1456 - accuracy: 0.9478 - val_loss: 0.8585 - val_accuracy: 0.7440
438
+
439
+ Epoch 14/15
440
+
441
+ 670/670 [==============================] - 6s 9ms/step - loss: 0.0938 - accuracy: 0.9716 - val_loss: 0.7732 - val_accuracy: 0.7857
442
+
443
+ Epoch 15/15
444
+
445
+ 670/670 [==============================] - 6s 9ms/step - loss: 0.0609 - accuracy: 0.9836 - val_loss: 0.7505 - val_accuracy: 0.8214
446
+
447
+
448
+
449
+ Confusion Matrix
450
+
451
+ [[ 3 0 0 0 0 0 0]
452
+
453
+ [ 0 1 1 2 0 0 3]
454
+
455
+ [ 0 1 21 7 3 0 1]
456
+
457
+ [ 0 1 11 38 1 8 1]
458
+
459
+ [ 0 0 0 0 83 0 0]
460
+
461
+ [ 0 0 0 1 0 14 0]
462
+
463
+ [ 0 0 3 0 0 0 6]]
464
+
465
+ Accuracy: 0.7904761904761904
466
+
467
+ F1 Score: 0.6922323858385239
468
+
469
+ ```

2

さらに追記しました

2020/01/23 02:26

投稿

Hagasuke
Hagasuke

スコア8

test CHANGED
File without changes
test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  ③input_shape = (image_size, image_size, 3)として、input_tensorでなくinput_shapeで指定 ⇒ 変化なし
42
42
 
43
-
43
+ ④別の重みをダウンロードして実行 ⇒ 最新版でないとのメッセージがでたため、元の重みに戻した
44
44
 
45
45
 
46
46
 

1

修正点と結果を追記しました

2020/01/23 02:12

投稿

Hagasuke
Hagasuke

スコア8

test CHANGED
File without changes
test CHANGED
@@ -26,6 +26,26 @@
26
26
 
27
27
 
28
28
 
29
+ # 追記(修正点と結果)
30
+
31
+ 下記の点、修正いたしました。
32
+
33
+
34
+
35
+ ①resnet50とfc_modelを削除しない(回答参考) ⇒ 変化なし
36
+
37
+ ②手動でダウンロードしていた重みを自分で作成したフォルダに保存して読み込んでいたが、
38
+
39
+  "~/.keras/models/"に移動して、'imagenet'で読み込み ⇒ 変化なし
40
+
41
+ ③input_shape = (image_size, image_size, 3)として、input_tensorでなくinput_shapeで指定 ⇒ 変化なし
42
+
43
+
44
+
45
+
46
+
47
+
48
+
29
49
  # スクリプト
30
50
 
31
51
 
@@ -94,7 +114,7 @@
94
114
 
95
115
 
96
116
 
97
- gc.collect()
117
+ gc.collect()
98
118
 
99
119
 
100
120