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

質問編集履歴

1

大変失礼いたしました。「コードの挿入」してコードを記載いたしました。

2021/07/29 04:26

投稿

ot24
ot24

スコア4

title CHANGED
File without changes
body CHANGED
@@ -50,6 +50,8 @@
50
50
  625/625 [==============================] - 89s 143ms/step - loss: 2.3136 - accuracy: 0.3460 - val_loss: 2.3107 - val_accuracy: 0.6208
51
51
 
52
52
  ### 該当のソースコード
53
+ ```ここに言語を入力
54
+
53
55
  '''
54
56
  1.CIFAR-10データセットの読み込み
55
57
  '''
@@ -59,14 +61,14 @@
59
61
  2.畳み込みネットワークの構築
60
62
  '''
61
63
  from tensorflow.keras import models, layers, optimizers, regularizers
62
-
64
+
63
- L2正則化の係数
65
+ # L2正則化の係数
64
66
  weight_decay = 1e-4
65
-
67
+
66
- CNNを構築
68
+ # CNNを構築
67
69
  model = models.Sequential()
68
-
70
+
69
- (第1層)畳み込み層1 正則化を行う
71
+ # (第1層)畳み込み層1 正則化を行う
70
72
  model.add(
71
73
  layers.Conv2D(
72
74
  filters=32, # フィルターの数は32
@@ -76,12 +78,12 @@
76
78
  kernel_regularizer=regularizers.l2(weight_decay),
77
79
  activation='relu' # 活性化関数はReLU
78
80
  ))
79
-
81
+
80
- (第2層)プーリング層1:ウィンドウサイズは2×2
82
+ # (第2層)プーリング層1:ウィンドウサイズは2×2
81
83
  model.add(
82
84
  layers.MaxPooling2D(pool_size=(2,2)))
83
-
85
+
84
- (第3層)畳み込み層2 正則化を行う
86
+ # (第3層)畳み込み層2 正則化を行う
85
87
  model.add(
86
88
  layers.Conv2D(
87
89
  filters=128, # フィルターの数は64
@@ -90,12 +92,12 @@
90
92
  kernel_regularizer=regularizers.l2(weight_decay),
91
93
  activation='relu' # 活性化関数はReLU
92
94
  ))
93
-
95
+
94
- (第4層)プーリング層2:ウィンドウサイズは2×2
96
+ # (第4層)プーリング層2:ウィンドウサイズは2×2
95
97
  model.add(
96
98
  layers.MaxPooling2D(pool_size=(2,2)))
97
-
99
+
98
- (第5層)畳み込み層3 正則化を行う
100
+ # (第5層)畳み込み層3 正則化を行う
99
101
  model.add(
100
102
  layers.Conv2D(
101
103
  filters=256, # フィルターの数は256
@@ -104,52 +106,53 @@
104
106
  kernel_regularizer=regularizers.l2(weight_decay),
105
107
  activation='relu' # 活性化関数はReLU
106
108
  ))
107
-
109
+
108
- (第6層)プーリング層2:ウィンドウサイズは2×2
110
+ # (第6層)プーリング層2:ウィンドウサイズは2×2
109
111
  model.add(
110
112
  layers.MaxPooling2D(pool_size=(2,2)))
111
-
113
+
112
- Flatten
114
+ # Flatten
113
115
  model.add(layers.Flatten())
114
-
116
+
115
- ドロップアウト:ドロップアウトは40%
117
+ # ドロップアウト:ドロップアウトは40%
116
118
  model.add(layers.Dropout(0.4))
117
119
 
118
- (第7層)全結合層
120
+ # (第7層)全結合層
119
121
  model.add(
120
122
  layers.Dense(
121
123
  512, # ニューロン数は512
122
124
  activation='relu')) # 活性化関数はReLU
123
-
125
+
124
-
126
+
125
- (第8層)出力層
127
+ # (第8層)出力層
126
128
  model.add(
127
129
  layers.Dense(
128
130
  10, # 出力層のニューロン数は10
129
131
  activation='softmax')) # 活性化関数はソフトマックス
130
-
132
+
131
- 学習率
133
+ # 学習率
132
134
  learning_rate = 0.0001
133
-
135
+
134
- Sequentialオブジェクトのコンパイル
136
+ # Sequentialオブジェクトのコンパイル
135
137
  model.compile(
136
-   損失関数はスパースラベル対応クロスエントロピー誤差
138
+ # 損失関数はスパースラベル対応クロスエントロピー誤差
137
139
  loss='sparse_categorical_crossentropy',
138
- オプティマイザーはSGD
140
+ # オプティマイザーはSGD
139
141
  optimizer=optimizers.SGD(lr=learning_rate),
140
- 学習評価として正解率を指定
142
+ # 学習評価として正解率を指定
141
143
  metrics=['accuracy'])
142
- %%time
144
+
145
+
143
146
  '''
144
147
  3.学習の実行
145
148
  '''
146
149
  from tensorflow.keras.preprocessing.image import ImageDataGenerator
147
150
  from tensorflow.keras.callbacks import ReduceLROnPlateau
148
-
151
+
149
- ミニバッチのサイズ
152
+ # ミニバッチのサイズ
150
153
  batch_size = 64
151
-
154
+
152
- データ拡張
155
+ # データ拡張
153
156
  datagen = ImageDataGenerator(
154
157
  rescale=1.0/255.0, # ピクセル値を255で割って正規化する
155
158
  validation_split=0.2, # 20パーセントのデータを検証用にする
@@ -159,17 +162,17 @@
159
162
  horizontal_flip=True, # 水平方向にランダムに反転、左右の入れ替え
160
163
  zoom_range=0.2, # ランダムに拡大
161
164
  )
162
-
165
+
163
- 訓練データ用のジェネレーターを生成
166
+ # 訓練データ用のジェネレーターを生成
164
167
  training_generator = datagen.flow(x_train, t_train,
165
168
  batch_size=batch_size,
166
169
  subset='training') # 訓練用のデータを生成
167
- 検証データ用のジェネレーターを生成
170
+ # 検証データ用のジェネレーターを生成
168
171
  validation_generator = datagen.flow(x_train, t_train,
169
172
  batch_size=batch_size,
170
173
  subset='validation') # 検証用のデータを生成
171
-
174
+
172
- 5エポックの間にval_accuracyが改善されなかったら学習率を0.5倍する。
175
+ # 5エポックの間にval_accuracyが改善されなかったら学習率を0.5倍する。
173
176
  reduce_lr = ReduceLROnPlateau(
174
177
  monitor='val_accuracy', # 監視対象は検証データの精度
175
178
  factor=0.5, # 学習率を減衰させる割合
@@ -178,23 +181,23 @@
178
181
  mode='max', # 最高値を監視する
179
182
  min_lr=0.00001 # 学習率の下限
180
183
  )
181
-
184
+
182
- エポック数
185
+ # エポック数
183
186
  epochs = 100
184
-
187
+
185
- 学習を行う
188
+ # 学習を行う
186
189
  history = model.fit(
187
- 拡張データをミニバッチの数だけ生成
190
+ # 拡張データをミニバッチの数だけ生成
188
191
  training_generator,
189
192
  epochs=epochs, # エポック数
190
193
  verbose=1, # 学習の進捗状況を出力する
191
194
  validation_data=validation_generator,
192
- エポック終了後にreduce_lrをコールバック
195
+ # エポック終了後にreduce_lrをコールバック
193
- コールバックはリストで指定する
196
+ # コールバックはリストで指定する
194
197
  callbacks=[reduce_lr]
195
198
  )
196
199
 
197
-
200
+ ```
198
201
  ### 試したこと
199
202
 
200
203
  learning_rateを一桁、上げたり下げたりすることでaccuracyが上昇するとの記事を確認したため実施しましたが、