回答編集履歴
7
一部修正
answer
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
過学習の対策としては、以下が推奨されます。
|
4
4
|
|
5
|
-
- データを増やす。 *データ拡張を含む(画像解析
|
5
|
+
- データを増やす。 *データ拡張を含む(画像解析におけるデータ拡張は常識的な手法)
|
6
6
|
- モデルを単純化する(与えられた問題やデータに対して、モデルが複雑すぎる)。
|
7
7
|
- データの汎用的な特徴を捉えられるように、特徴量選択を工夫したり、モデルを見直したりする。 *ResNetもその1つ
|
8
8
|
- 大量の類似分野のデータで学習済のモデルを元に、転移学習やファインチューニングをする。
|
6
一部修正
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
一部修正
answer
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
- データを増やす。 *データ拡張を含む
|
6
6
|
- モデルを単純化する(与えられた問題やデータに対して、モデルが複雑すぎる)。
|
7
|
-
- データの汎用的な特徴を
|
7
|
+
- データの汎用的な特徴を捉えられるように、特徴量選択を工夫したり、モデルを見直したりする。 *ResNetもその1つ
|
8
8
|
- 大量の類似分野のデータで学習済のモデルを元に、転移学習やファインチューニングをする。
|
9
9
|
- BatchNormalizationを活用する。
|
10
10
|
- Dropoutを活用する。 *BNに対して効果は低く、補完程度の役割
|
4
一部修正
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
補足追記
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
一部修正
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
|

|
10
12
|
|
1
一部修正
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()
|