質問編集履歴
1
大変失礼いたしました。「コードの挿入」してコードを記載いたしました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -102,6 +102,10 @@
|
|
102
102
|
|
103
103
|
### 該当のソースコード
|
104
104
|
|
105
|
+
```ここに言語を入力
|
106
|
+
|
107
|
+
|
108
|
+
|
105
109
|
'''
|
106
110
|
|
107
111
|
1.CIFAR-10データセットの読み込み
|
@@ -120,21 +124,21 @@
|
|
120
124
|
|
121
125
|
from tensorflow.keras import models, layers, optimizers, regularizers
|
122
126
|
|
123
|
-
|
127
|
+
|
124
|
-
|
128
|
+
|
125
|
-
L2正則化の係数
|
129
|
+
# L2正則化の係数
|
126
130
|
|
127
131
|
weight_decay = 1e-4
|
128
132
|
|
129
|
-
|
133
|
+
|
130
|
-
|
134
|
+
|
131
|
-
CNNを構築
|
135
|
+
# CNNを構築
|
132
136
|
|
133
137
|
model = models.Sequential()
|
134
138
|
|
135
|
-
|
139
|
+
|
136
|
-
|
140
|
+
|
137
|
-
(第1層)畳み込み層1 正則化を行う
|
141
|
+
# (第1層)畳み込み層1 正則化を行う
|
138
142
|
|
139
143
|
model.add(
|
140
144
|
|
@@ -154,17 +158,17 @@
|
|
154
158
|
|
155
159
|
))
|
156
160
|
|
157
|
-
|
161
|
+
|
158
|
-
|
162
|
+
|
159
|
-
(第2層)プーリング層1:ウィンドウサイズは2×2
|
163
|
+
# (第2層)プーリング層1:ウィンドウサイズは2×2
|
160
164
|
|
161
165
|
model.add(
|
162
166
|
|
163
167
|
layers.MaxPooling2D(pool_size=(2,2)))
|
164
168
|
|
165
|
-
|
169
|
+
|
166
|
-
|
170
|
+
|
167
|
-
(第3層)畳み込み層2 正則化を行う
|
171
|
+
# (第3層)畳み込み層2 正則化を行う
|
168
172
|
|
169
173
|
model.add(
|
170
174
|
|
@@ -182,17 +186,17 @@
|
|
182
186
|
|
183
187
|
))
|
184
188
|
|
185
|
-
|
189
|
+
|
186
|
-
|
190
|
+
|
187
|
-
(第4層)プーリング層2:ウィンドウサイズは2×2
|
191
|
+
# (第4層)プーリング層2:ウィンドウサイズは2×2
|
188
192
|
|
189
193
|
model.add(
|
190
194
|
|
191
195
|
layers.MaxPooling2D(pool_size=(2,2)))
|
192
196
|
|
193
|
-
|
197
|
+
|
194
|
-
|
198
|
+
|
195
|
-
(第5層)畳み込み層3 正則化を行う
|
199
|
+
# (第5層)畳み込み層3 正則化を行う
|
196
200
|
|
197
201
|
model.add(
|
198
202
|
|
@@ -210,29 +214,29 @@
|
|
210
214
|
|
211
215
|
))
|
212
216
|
|
213
|
-
|
217
|
+
|
214
|
-
|
218
|
+
|
215
|
-
(第6層)プーリング層2:ウィンドウサイズは2×2
|
219
|
+
# (第6層)プーリング層2:ウィンドウサイズは2×2
|
216
220
|
|
217
221
|
model.add(
|
218
222
|
|
219
223
|
layers.MaxPooling2D(pool_size=(2,2)))
|
220
224
|
|
221
|
-
|
225
|
+
|
222
|
-
|
226
|
+
|
223
|
-
Flatten
|
227
|
+
# Flatten
|
224
228
|
|
225
229
|
model.add(layers.Flatten())
|
226
230
|
|
227
|
-
|
231
|
+
|
228
|
-
|
232
|
+
|
229
|
-
ドロップアウト:ドロップアウトは40%
|
233
|
+
# ドロップアウト:ドロップアウトは40%
|
230
234
|
|
231
235
|
model.add(layers.Dropout(0.4))
|
232
236
|
|
233
237
|
|
234
238
|
|
235
|
-
(第7層)全結合層
|
239
|
+
# (第7層)全結合層
|
236
240
|
|
237
241
|
model.add(
|
238
242
|
|
@@ -242,11 +246,11 @@
|
|
242
246
|
|
243
247
|
activation='relu')) # 活性化関数はReLU
|
244
248
|
|
245
|
-
|
249
|
+
|
250
|
+
|
246
|
-
|
251
|
+
|
247
|
-
|
248
|
-
|
252
|
+
|
249
|
-
(第8層)出力層
|
253
|
+
# (第8層)出力層
|
250
254
|
|
251
255
|
model.add(
|
252
256
|
|
@@ -256,31 +260,33 @@
|
|
256
260
|
|
257
261
|
activation='softmax')) # 活性化関数はソフトマックス
|
258
262
|
|
259
|
-
|
263
|
+
|
260
|
-
|
264
|
+
|
261
|
-
学習率
|
265
|
+
# 学習率
|
262
266
|
|
263
267
|
learning_rate = 0.0001
|
264
268
|
|
265
|
-
|
269
|
+
|
266
|
-
|
270
|
+
|
267
|
-
Sequentialオブジェクトのコンパイル
|
271
|
+
# Sequentialオブジェクトのコンパイル
|
268
272
|
|
269
273
|
model.compile(
|
270
274
|
|
271
|
-
|
275
|
+
# 損失関数はスパースラベル対応クロスエントロピー誤差
|
272
276
|
|
273
277
|
loss='sparse_categorical_crossentropy',
|
274
278
|
|
275
|
-
オプティマイザーはSGD
|
279
|
+
# オプティマイザーはSGD
|
276
280
|
|
277
281
|
optimizer=optimizers.SGD(lr=learning_rate),
|
278
282
|
|
279
|
-
学習評価として正解率を指定
|
283
|
+
# 学習評価として正解率を指定
|
280
284
|
|
281
285
|
metrics=['accuracy'])
|
282
286
|
|
283
|
-
|
287
|
+
|
288
|
+
|
289
|
+
|
284
290
|
|
285
291
|
'''
|
286
292
|
|
@@ -292,15 +298,15 @@
|
|
292
298
|
|
293
299
|
from tensorflow.keras.callbacks import ReduceLROnPlateau
|
294
300
|
|
295
|
-
|
301
|
+
|
296
|
-
|
302
|
+
|
297
|
-
ミニバッチのサイズ
|
303
|
+
# ミニバッチのサイズ
|
298
304
|
|
299
305
|
batch_size = 64
|
300
306
|
|
301
|
-
|
307
|
+
|
302
|
-
|
308
|
+
|
303
|
-
データ拡張
|
309
|
+
# データ拡張
|
304
310
|
|
305
311
|
datagen = ImageDataGenerator(
|
306
312
|
|
@@ -320,9 +326,9 @@
|
|
320
326
|
|
321
327
|
)
|
322
328
|
|
323
|
-
|
329
|
+
|
324
|
-
|
330
|
+
|
325
|
-
訓練データ用のジェネレーターを生成
|
331
|
+
# 訓練データ用のジェネレーターを生成
|
326
332
|
|
327
333
|
training_generator = datagen.flow(x_train, t_train,
|
328
334
|
|
@@ -330,7 +336,7 @@
|
|
330
336
|
|
331
337
|
subset='training') # 訓練用のデータを生成
|
332
338
|
|
333
|
-
検証データ用のジェネレーターを生成
|
339
|
+
# 検証データ用のジェネレーターを生成
|
334
340
|
|
335
341
|
validation_generator = datagen.flow(x_train, t_train,
|
336
342
|
|
@@ -338,9 +344,9 @@
|
|
338
344
|
|
339
345
|
subset='validation') # 検証用のデータを生成
|
340
346
|
|
341
|
-
|
347
|
+
|
342
|
-
|
348
|
+
|
343
|
-
5エポックの間にval_accuracyが改善されなかったら学習率を0.5倍する。
|
349
|
+
# 5エポックの間にval_accuracyが改善されなかったら学習率を0.5倍する。
|
344
350
|
|
345
351
|
reduce_lr = ReduceLROnPlateau(
|
346
352
|
|
@@ -358,19 +364,19 @@
|
|
358
364
|
|
359
365
|
)
|
360
366
|
|
361
|
-
|
367
|
+
|
362
|
-
|
368
|
+
|
363
|
-
エポック数
|
369
|
+
# エポック数
|
364
370
|
|
365
371
|
epochs = 100
|
366
372
|
|
367
|
-
|
373
|
+
|
368
|
-
|
374
|
+
|
369
|
-
学習を行う
|
375
|
+
# 学習を行う
|
370
376
|
|
371
377
|
history = model.fit(
|
372
378
|
|
373
|
-
拡張データをミニバッチの数だけ生成
|
379
|
+
# 拡張データをミニバッチの数だけ生成
|
374
380
|
|
375
381
|
training_generator,
|
376
382
|
|
@@ -380,9 +386,9 @@
|
|
380
386
|
|
381
387
|
validation_data=validation_generator,
|
382
388
|
|
383
|
-
エポック終了後にreduce_lrをコールバック
|
389
|
+
# エポック終了後にreduce_lrをコールバック
|
384
|
-
|
390
|
+
|
385
|
-
コールバックはリストで指定する
|
391
|
+
# コールバックはリストで指定する
|
386
392
|
|
387
393
|
callbacks=[reduce_lr]
|
388
394
|
|
@@ -390,7 +396,7 @@
|
|
390
396
|
|
391
397
|
|
392
398
|
|
393
|
-
|
399
|
+
```
|
394
400
|
|
395
401
|
### 試したこと
|
396
402
|
|