teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

7

一部修正

2021/10/10 00:27

投稿

toast-uz
toast-uz

スコア3266

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  過学習の対策としては、以下が推奨されます。
4
4
 
5
- - データを増やす。 *データ拡張を含む(画像解析ではデータ拡張は常識的な手法)
5
+ - データを増やす。 *データ拡張を含む(画像解析におけるデータ拡張は常識的な手法)
6
6
  - モデルを単純化する(与えられた問題やデータに対して、モデルが複雑すぎる)。
7
7
  - データの汎用的な特徴を捉えられるように、特徴量選択を工夫したり、モデルを見直したりする。 *ResNetもその1つ
8
8
  - 大量の類似分野のデータで学習済のモデルを元に、転移学習やファインチューニングをする。

6

一部修正

2021/10/10 00:26

投稿

toast-uz
toast-uz

スコア3266

answer CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  過学習の対策としては、以下が推奨されます。
4
4
 
5
- - データを増やす。 *データ拡張を含む
5
+ - データを増やす。 *データ拡張を含む(画像解析ではデータ拡張は常識的な手法)
6
6
  - モデルを単純化する(与えられた問題やデータに対して、モデルが複雑すぎる)。
7
7
  - データの汎用的な特徴を捉えられるように、特徴量選択を工夫したり、モデルを見直したりする。 *ResNetもその1つ
8
8
  - 大量の類似分野のデータで学習済のモデルを元に、転移学習やファインチューニングをする。
9
- - BatchNormalizationを活用する。
9
+ - BatchNormalizationを活用する。 *簡単に効果を得やすい
10
10
  - Dropoutを活用する。 *BNに対して効果は低く、補完程度の役割
11
11
  - 正則化する。 *古い教科書には記述されているが、ほぼ絶滅した手法
12
12
 

5

一部修正

2021/10/10 00:25

投稿

toast-uz
toast-uz

スコア3266

answer CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  - データを増やす。 *データ拡張を含む
6
6
  - モデルを単純化する(与えられた問題やデータに対して、モデルが複雑すぎる)。
7
- - データの汎用的な特徴を表現する特徴量選択を工夫したり、モデルを見直したりする。 *ResNetもその1つ
7
+ - データの汎用的な特徴を捉えられように、特徴量選択を工夫したり、モデルを見直したりする。 *ResNetもその1つ
8
8
  - 大量の類似分野のデータで学習済のモデルを元に、転移学習やファインチューニングをする。
9
9
  - BatchNormalizationを活用する。
10
10
  - Dropoutを活用する。 *BNに対して効果は低く、補完程度の役割

4

一部修正

2021/10/10 00:23

投稿

toast-uz
toast-uz

スコア3266

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  過学習の対策としては、以下が推奨されます。
4
4
 
5
- - データを増やす。 *後述するデータ拡張など
5
+ - データを増やす。 *データ拡張を含む
6
6
  - モデルを単純化する(与えられた問題やデータに対して、モデルが複雑すぎる)。
7
7
  - データの汎用的な特徴を表現する特徴量選択を工夫したり、モデルを見直したりする。 *ResNetもその1つ
8
8
  - 大量の類似分野のデータで学習済のモデルを元に、転移学習やファインチューニングをする。
@@ -22,11 +22,6 @@
22
22
 
23
23
  今回は、質問者様のモデルのすべてのActivateionレイヤーの前にBatchNormalizationを追加しました。BatchNormalizationを入れる場合はDropoutを入れないほうが良いと言われていますが、ケースバイケースです。今回はDropoutはそのまま残しています。なお、バッチサイズを変更しましたが、本質的な違いではありません。
24
24
 
25
- これでも十分な結果だと思いますが、さらに精度を上げるには、以下のような打ち手が一般的ですので、試してみてください。
26
-
27
- - データ拡張
28
- - ResNetモデルの転移学習やファインチューニング
29
-
30
25
  最後に試したコードを示します。Colabで実行していますが、TPUを利用しているため、質問者様のコードからだいぶ変わっていると思います。
31
26
 
32
27
  ```Python

3

補足追記

2021/10/10 00:21

投稿

toast-uz
toast-uz

スコア3266

answer CHANGED
@@ -1,5 +1,15 @@
1
1
  結論としては、BatchNormalizationを適用するとうまくいくと思います。
2
2
 
3
+ 過学習の対策としては、以下が推奨されます。
4
+
5
+ - データを増やす。 *後述するデータ拡張など
6
+ - モデルを単純化する(与えられた問題やデータに対して、モデルが複雑すぎる)。
7
+ - データの汎用的な特徴を表現する特徴量選択を工夫したり、モデルを見直したりする。 *ResNetもその1つ
8
+ - 大量の類似分野のデータで学習済のモデルを元に、転移学習やファインチューニングをする。
9
+ - BatchNormalizationを活用する。
10
+ - Dropoutを活用する。 *BNに対して効果は低く、補完程度の役割
11
+ - 正則化する。 *古い教科書には記述されているが、ほぼ絶滅した手法
12
+
3
13
  Cifar10のデータセットから5クラスを取り出して、質問者様のモデルを訓練してみました。
4
14
 
5
15
  - そのまま実行。loss = nan となって学習が進みません。

2

一部修正

2021/10/10 00:19

投稿

toast-uz
toast-uz

スコア3266

answer CHANGED
@@ -1,10 +1,12 @@
1
+ 結論としては、BatchNormalizationを適用するとうまくいくと思います。
2
+
1
3
  Cifar10のデータセットから5クラスを取り出して、質問者様のモデルを訓練してみました。
2
4
 
3
5
  - そのまま実行。loss = nan となって学習が進みません。
4
6
  - optimizerをAdamに変更。学習は進みますが、質問者様と同様に、過学習の傾向が出ます。
5
7
  - BatchNormalizationをモデルに追加。きれいに学習が進みます。
6
8
 
7
- 結果はこちらです。
9
+ 結果はこちらです。質問者様と異なるデータセットを使っていますので、参考程度にしてください。
8
10
 
9
11
  ![イメージ説明](f9e6a2a91f4585fe88da72fefb3b1575.png)
10
12
 

1

一部修正

2021/10/09 04:16

投稿

toast-uz
toast-uz

スコア3266

answer CHANGED
@@ -28,12 +28,10 @@
28
28
  (x_train, y_train), (x_test, y_test) = cifar10.load_data()
29
29
 
30
30
  num = 5
31
- X_train = x_train[y_train[:,0] < num]
31
+ X_train = x_train[y_train[:,0] < num].astype('float32') / 255.0
32
32
  y_train = to_categorical(y_train[y_train[:,0] < num], num).astype('float32')
33
- X_test = x_test[y_test[:,0] < num]
33
+ X_test = x_test[y_test[:,0] < num].astype('float32') / 255.0
34
34
  y_test = to_categorical(y_test[y_test[:,0] < num], num).astype('float32')
35
- x_train = x_train.astype('float32') / 255.0
36
- x_test = x_test.astype('float32') / 255.0
37
35
 
38
36
  def create_model():
39
37
  model = Sequential()