質問編集履歴
3
コード追加分
test
CHANGED
File without changes
|
test
CHANGED
@@ -135,3 +135,209 @@
|
|
135
135
|
return False
|
136
136
|
|
137
137
|
```
|
138
|
+
|
139
|
+
### コード追加分
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
### 該当のソースコード
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
```python
|
148
|
+
|
149
|
+
%%time
|
150
|
+
|
151
|
+
'''
|
152
|
+
|
153
|
+
8.モデルを生成して学習する
|
154
|
+
|
155
|
+
'''
|
156
|
+
|
157
|
+
from sklearn.utils import shuffle
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
# エポック数
|
162
|
+
|
163
|
+
epochs = 100
|
164
|
+
|
165
|
+
# ミニバッチのサイズ
|
166
|
+
|
167
|
+
batch_size = 64
|
168
|
+
|
169
|
+
# 訓練のステップ数
|
170
|
+
|
171
|
+
train_steps = len(x_train)*0.8 / batch_size
|
172
|
+
|
173
|
+
# 検証のステップ数
|
174
|
+
|
175
|
+
val_steps = len(x_train)*0.2 / batch_size
|
176
|
+
|
177
|
+
# 訓練と検証における損失と精度の推移を記録するdictオブジェクト
|
178
|
+
|
179
|
+
history = {'loss':[], 'accuracy':[],
|
180
|
+
|
181
|
+
'val_loss':[], 'val_accuracy': []}
|
182
|
+
|
183
|
+
|
184
|
+
|
185
|
+
# 早期終了の判定を行うオブジェクトを生成
|
186
|
+
|
187
|
+
ers = EarlyStopping(patience=20, # 監視対象回数
|
188
|
+
|
189
|
+
verbose=1) # 早期終了時にメッセージを出力
|
190
|
+
|
191
|
+
|
192
|
+
|
193
|
+
# 出力層10ニューロンのモデルを生成
|
194
|
+
|
195
|
+
model = CNN(10)
|
196
|
+
|
197
|
+
|
198
|
+
|
199
|
+
# ImageDataGeneratorを生成
|
200
|
+
|
201
|
+
datagen = keras.preprocessing.image.ImageDataGenerator(
|
202
|
+
|
203
|
+
rescale=1.0/255.0, # ピクセル値を255で割って正規化する
|
204
|
+
|
205
|
+
validation_split=0.2, # 20パーセントのデータを検証用にする
|
206
|
+
|
207
|
+
rotation_range=15, # 15度の範囲でランダムに回転させる
|
208
|
+
|
209
|
+
width_shift_range=0.1, # 横サイズの0.1の割合でランダムに水平移動
|
210
|
+
|
211
|
+
height_shift_range=0.1, # 縦サイズの0.1の割合でランダムに垂直移動
|
212
|
+
|
213
|
+
horizontal_flip=True, # 水平方向にランダムに反転、左右の入れ替え
|
214
|
+
|
215
|
+
zoom_range=0.2, # ランダムに拡大
|
216
|
+
|
217
|
+
)
|
218
|
+
|
219
|
+
|
220
|
+
|
221
|
+
# 訓練データ用のジェネレーターを生成
|
222
|
+
|
223
|
+
training_generator = datagen.flow(x_train, t_train,
|
224
|
+
|
225
|
+
batch_size=batch_size,
|
226
|
+
|
227
|
+
subset='training') # 訓練用のデータを生成
|
228
|
+
|
229
|
+
# 検証データ用のジェネレーターを生成
|
230
|
+
|
231
|
+
validation_generator = datagen.flow(x_train, t_train,
|
232
|
+
|
233
|
+
batch_size=batch_size,
|
234
|
+
|
235
|
+
subset='validation') # 検証用のデータを生成
|
236
|
+
|
237
|
+
|
238
|
+
|
239
|
+
# 学習を行う
|
240
|
+
|
241
|
+
for epoch in range(epochs):
|
242
|
+
|
243
|
+
# 訓練時のステップカウンター
|
244
|
+
|
245
|
+
step_counter = 0
|
246
|
+
|
247
|
+
# 1ステップ毎にミニバッチで学習する
|
248
|
+
|
249
|
+
for x_batch, t_batch in training_generator:
|
250
|
+
|
251
|
+
# ミニバッチでバイアス、重みを更新
|
252
|
+
|
253
|
+
train_step(x_batch, t_batch)
|
254
|
+
|
255
|
+
step_counter += 1
|
256
|
+
|
257
|
+
# すべてのステップが終了したらbreak
|
258
|
+
|
259
|
+
if step_counter >= train_steps:
|
260
|
+
|
261
|
+
break
|
262
|
+
|
263
|
+
|
264
|
+
|
265
|
+
# 検証時のステップカウンター
|
266
|
+
|
267
|
+
v_step_counter = 0
|
268
|
+
|
269
|
+
# 検証データによるモデルの評価
|
270
|
+
|
271
|
+
for x_val_batch, t_val_batch in validation_generator:
|
272
|
+
|
273
|
+
# 検証データのミニバッチで損失と精度を測定
|
274
|
+
|
275
|
+
val_step(x_val_batch, t_val_batch)
|
276
|
+
|
277
|
+
v_step_counter += 1
|
278
|
+
|
279
|
+
# すべてのステップが終了したらbreak
|
280
|
+
|
281
|
+
if v_step_counter >= val_steps:
|
282
|
+
|
283
|
+
break
|
284
|
+
|
285
|
+
|
286
|
+
|
287
|
+
# 訓練と検証における損失と精度の推移をhistoryに記録
|
288
|
+
|
289
|
+
history['loss'].append(train_loss.result())
|
290
|
+
|
291
|
+
history['accuracy'].append(train_acc.result())
|
292
|
+
|
293
|
+
history['val_loss'].append(val_loss.result())
|
294
|
+
|
295
|
+
history['val_accuracy'].append(val_acc.result())
|
296
|
+
|
297
|
+
|
298
|
+
|
299
|
+
# 1エポックごとに結果を出力
|
300
|
+
|
301
|
+
print('epoch({}) train_loss: {:.4} train_acc: {:.4}'
|
302
|
+
|
303
|
+
'val_loss: {:.4} val_acc: {:.4}'.format(
|
304
|
+
|
305
|
+
epoch+1,
|
306
|
+
|
307
|
+
train_loss.result(), # 訓練データの損失を出力
|
308
|
+
|
309
|
+
train_acc.result(), # 訓練データの精度を出力
|
310
|
+
|
311
|
+
val_loss.result(), # 検証データの損失を出力
|
312
|
+
|
313
|
+
val_acc.result() # 検証データの精度を出力
|
314
|
+
|
315
|
+
))
|
316
|
+
|
317
|
+
|
318
|
+
|
319
|
+
# 検証データの損失をEarlyStoppingオブジェクトに渡して早期終了を判定
|
320
|
+
|
321
|
+
if ers(val_loss.result()):
|
322
|
+
|
323
|
+
# 監視対象のエポックで損失が改善されなければ学習を終了
|
324
|
+
|
325
|
+
break
|
326
|
+
|
327
|
+
```
|
328
|
+
|
329
|
+
|
330
|
+
|
331
|
+
### 試したこと
|
332
|
+
|
333
|
+
|
334
|
+
|
335
|
+
ここに問題に対して試したことを記載してください。
|
336
|
+
|
337
|
+
|
338
|
+
|
339
|
+
### 補足情報(FW/ツールのバージョンなど)
|
340
|
+
|
341
|
+
|
342
|
+
|
343
|
+
ここにより詳細な情報を記載してください。
|
2
コード追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -135,183 +135,3 @@
|
|
135
135
|
return False
|
136
136
|
|
137
137
|
```
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
%%time
|
142
|
-
|
143
|
-
'''
|
144
|
-
|
145
|
-
8.モデルを生成して学習する
|
146
|
-
|
147
|
-
'''
|
148
|
-
|
149
|
-
from sklearn.utils import shuffle
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
# エポック数
|
154
|
-
|
155
|
-
epochs = 100
|
156
|
-
|
157
|
-
# ミニバッチのサイズ
|
158
|
-
|
159
|
-
batch_size = 64
|
160
|
-
|
161
|
-
# 訓練のステップ数
|
162
|
-
|
163
|
-
train_steps = len(x_train)*0.8 / batch_size
|
164
|
-
|
165
|
-
# 検証のステップ数
|
166
|
-
|
167
|
-
val_steps = len(x_train)*0.2 / batch_size
|
168
|
-
|
169
|
-
# 訓練と検証における損失と精度の推移を記録するdictオブジェクト
|
170
|
-
|
171
|
-
history = {'loss':[], 'accuracy':[],
|
172
|
-
|
173
|
-
'val_loss':[], 'val_accuracy': []}
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
# 早期終了の判定を行うオブジェクトを生成
|
178
|
-
|
179
|
-
ers = EarlyStopping(patience=20, # 監視対象回数
|
180
|
-
|
181
|
-
verbose=1) # 早期終了時にメッセージを出力
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
# 出力層10ニューロンのモデルを生成
|
186
|
-
|
187
|
-
model = CNN(10)
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
# ImageDataGeneratorを生成
|
192
|
-
|
193
|
-
datagen = keras.preprocessing.image.ImageDataGenerator(
|
194
|
-
|
195
|
-
rescale=1.0/255.0, # ピクセル値を255で割って正規化する
|
196
|
-
|
197
|
-
validation_split=0.2, # 20パーセントのデータを検証用にする
|
198
|
-
|
199
|
-
rotation_range=15, # 15度の範囲でランダムに回転させる
|
200
|
-
|
201
|
-
width_shift_range=0.1, # 横サイズの0.1の割合でランダムに水平移動
|
202
|
-
|
203
|
-
height_shift_range=0.1, # 縦サイズの0.1の割合でランダムに垂直移動
|
204
|
-
|
205
|
-
horizontal_flip=True, # 水平方向にランダムに反転、左右の入れ替え
|
206
|
-
|
207
|
-
zoom_range=0.2, # ランダムに拡大
|
208
|
-
|
209
|
-
)
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
# 訓練データ用のジェネレーターを生成
|
214
|
-
|
215
|
-
training_generator = datagen.flow(x_train, t_train,
|
216
|
-
|
217
|
-
batch_size=batch_size,
|
218
|
-
|
219
|
-
subset='training') # 訓練用のデータを生成
|
220
|
-
|
221
|
-
# 検証データ用のジェネレーターを生成
|
222
|
-
|
223
|
-
validation_generator = datagen.flow(x_train, t_train,
|
224
|
-
|
225
|
-
batch_size=batch_size,
|
226
|
-
|
227
|
-
subset='validation') # 検証用のデータを生成
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
# 学習を行う
|
232
|
-
|
233
|
-
for epoch in range(epochs):
|
234
|
-
|
235
|
-
# 訓練時のステップカウンター
|
236
|
-
|
237
|
-
step_counter = 0
|
238
|
-
|
239
|
-
# 1ステップ毎にミニバッチで学習する
|
240
|
-
|
241
|
-
for x_batch, t_batch in training_generator:
|
242
|
-
|
243
|
-
# ミニバッチでバイアス、重みを更新
|
244
|
-
|
245
|
-
train_step(x_batch, t_batch)
|
246
|
-
|
247
|
-
step_counter += 1
|
248
|
-
|
249
|
-
# すべてのステップが終了したらbreak
|
250
|
-
|
251
|
-
if step_counter >= train_steps:
|
252
|
-
|
253
|
-
break
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
# 検証時のステップカウンター
|
258
|
-
|
259
|
-
v_step_counter = 0
|
260
|
-
|
261
|
-
# 検証データによるモデルの評価
|
262
|
-
|
263
|
-
for x_val_batch, t_val_batch in validation_generator:
|
264
|
-
|
265
|
-
# 検証データのミニバッチで損失と精度を測定
|
266
|
-
|
267
|
-
val_step(x_val_batch, t_val_batch)
|
268
|
-
|
269
|
-
v_step_counter += 1
|
270
|
-
|
271
|
-
# すべてのステップが終了したらbreak
|
272
|
-
|
273
|
-
if v_step_counter >= val_steps:
|
274
|
-
|
275
|
-
break
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
# 訓練と検証における損失と精度の推移をhistoryに記録
|
280
|
-
|
281
|
-
history['loss'].append(train_loss.result())
|
282
|
-
|
283
|
-
history['accuracy'].append(train_acc.result())
|
284
|
-
|
285
|
-
history['val_loss'].append(val_loss.result())
|
286
|
-
|
287
|
-
history['val_accuracy'].append(val_acc.result())
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
# 1エポックごとに結果を出力
|
292
|
-
|
293
|
-
print('epoch({}) train_loss: {:.4} train_acc: {:.4}'
|
294
|
-
|
295
|
-
'val_loss: {:.4} val_acc: {:.4}'.format(
|
296
|
-
|
297
|
-
epoch+1,
|
298
|
-
|
299
|
-
train_loss.result(), # 訓練データの損失を出力
|
300
|
-
|
301
|
-
train_acc.result(), # 訓練データの精度を出力
|
302
|
-
|
303
|
-
val_loss.result(), # 検証データの損失を出力
|
304
|
-
|
305
|
-
val_acc.result() # 検証データの精度を出力
|
306
|
-
|
307
|
-
))
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
# 検証データの損失をEarlyStoppingオブジェクトに渡して早期終了を判定
|
312
|
-
|
313
|
-
if ers(val_loss.result()):
|
314
|
-
|
315
|
-
# 監視対象のエポックで損失が改善されなければ学習を終了
|
316
|
-
|
317
|
-
break
|
1
コードの追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -135,3 +135,183 @@
|
|
135
135
|
return False
|
136
136
|
|
137
137
|
```
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
%%time
|
142
|
+
|
143
|
+
'''
|
144
|
+
|
145
|
+
8.モデルを生成して学習する
|
146
|
+
|
147
|
+
'''
|
148
|
+
|
149
|
+
from sklearn.utils import shuffle
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
# エポック数
|
154
|
+
|
155
|
+
epochs = 100
|
156
|
+
|
157
|
+
# ミニバッチのサイズ
|
158
|
+
|
159
|
+
batch_size = 64
|
160
|
+
|
161
|
+
# 訓練のステップ数
|
162
|
+
|
163
|
+
train_steps = len(x_train)*0.8 / batch_size
|
164
|
+
|
165
|
+
# 検証のステップ数
|
166
|
+
|
167
|
+
val_steps = len(x_train)*0.2 / batch_size
|
168
|
+
|
169
|
+
# 訓練と検証における損失と精度の推移を記録するdictオブジェクト
|
170
|
+
|
171
|
+
history = {'loss':[], 'accuracy':[],
|
172
|
+
|
173
|
+
'val_loss':[], 'val_accuracy': []}
|
174
|
+
|
175
|
+
|
176
|
+
|
177
|
+
# 早期終了の判定を行うオブジェクトを生成
|
178
|
+
|
179
|
+
ers = EarlyStopping(patience=20, # 監視対象回数
|
180
|
+
|
181
|
+
verbose=1) # 早期終了時にメッセージを出力
|
182
|
+
|
183
|
+
|
184
|
+
|
185
|
+
# 出力層10ニューロンのモデルを生成
|
186
|
+
|
187
|
+
model = CNN(10)
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
+
# ImageDataGeneratorを生成
|
192
|
+
|
193
|
+
datagen = keras.preprocessing.image.ImageDataGenerator(
|
194
|
+
|
195
|
+
rescale=1.0/255.0, # ピクセル値を255で割って正規化する
|
196
|
+
|
197
|
+
validation_split=0.2, # 20パーセントのデータを検証用にする
|
198
|
+
|
199
|
+
rotation_range=15, # 15度の範囲でランダムに回転させる
|
200
|
+
|
201
|
+
width_shift_range=0.1, # 横サイズの0.1の割合でランダムに水平移動
|
202
|
+
|
203
|
+
height_shift_range=0.1, # 縦サイズの0.1の割合でランダムに垂直移動
|
204
|
+
|
205
|
+
horizontal_flip=True, # 水平方向にランダムに反転、左右の入れ替え
|
206
|
+
|
207
|
+
zoom_range=0.2, # ランダムに拡大
|
208
|
+
|
209
|
+
)
|
210
|
+
|
211
|
+
|
212
|
+
|
213
|
+
# 訓練データ用のジェネレーターを生成
|
214
|
+
|
215
|
+
training_generator = datagen.flow(x_train, t_train,
|
216
|
+
|
217
|
+
batch_size=batch_size,
|
218
|
+
|
219
|
+
subset='training') # 訓練用のデータを生成
|
220
|
+
|
221
|
+
# 検証データ用のジェネレーターを生成
|
222
|
+
|
223
|
+
validation_generator = datagen.flow(x_train, t_train,
|
224
|
+
|
225
|
+
batch_size=batch_size,
|
226
|
+
|
227
|
+
subset='validation') # 検証用のデータを生成
|
228
|
+
|
229
|
+
|
230
|
+
|
231
|
+
# 学習を行う
|
232
|
+
|
233
|
+
for epoch in range(epochs):
|
234
|
+
|
235
|
+
# 訓練時のステップカウンター
|
236
|
+
|
237
|
+
step_counter = 0
|
238
|
+
|
239
|
+
# 1ステップ毎にミニバッチで学習する
|
240
|
+
|
241
|
+
for x_batch, t_batch in training_generator:
|
242
|
+
|
243
|
+
# ミニバッチでバイアス、重みを更新
|
244
|
+
|
245
|
+
train_step(x_batch, t_batch)
|
246
|
+
|
247
|
+
step_counter += 1
|
248
|
+
|
249
|
+
# すべてのステップが終了したらbreak
|
250
|
+
|
251
|
+
if step_counter >= train_steps:
|
252
|
+
|
253
|
+
break
|
254
|
+
|
255
|
+
|
256
|
+
|
257
|
+
# 検証時のステップカウンター
|
258
|
+
|
259
|
+
v_step_counter = 0
|
260
|
+
|
261
|
+
# 検証データによるモデルの評価
|
262
|
+
|
263
|
+
for x_val_batch, t_val_batch in validation_generator:
|
264
|
+
|
265
|
+
# 検証データのミニバッチで損失と精度を測定
|
266
|
+
|
267
|
+
val_step(x_val_batch, t_val_batch)
|
268
|
+
|
269
|
+
v_step_counter += 1
|
270
|
+
|
271
|
+
# すべてのステップが終了したらbreak
|
272
|
+
|
273
|
+
if v_step_counter >= val_steps:
|
274
|
+
|
275
|
+
break
|
276
|
+
|
277
|
+
|
278
|
+
|
279
|
+
# 訓練と検証における損失と精度の推移をhistoryに記録
|
280
|
+
|
281
|
+
history['loss'].append(train_loss.result())
|
282
|
+
|
283
|
+
history['accuracy'].append(train_acc.result())
|
284
|
+
|
285
|
+
history['val_loss'].append(val_loss.result())
|
286
|
+
|
287
|
+
history['val_accuracy'].append(val_acc.result())
|
288
|
+
|
289
|
+
|
290
|
+
|
291
|
+
# 1エポックごとに結果を出力
|
292
|
+
|
293
|
+
print('epoch({}) train_loss: {:.4} train_acc: {:.4}'
|
294
|
+
|
295
|
+
'val_loss: {:.4} val_acc: {:.4}'.format(
|
296
|
+
|
297
|
+
epoch+1,
|
298
|
+
|
299
|
+
train_loss.result(), # 訓練データの損失を出力
|
300
|
+
|
301
|
+
train_acc.result(), # 訓練データの精度を出力
|
302
|
+
|
303
|
+
val_loss.result(), # 検証データの損失を出力
|
304
|
+
|
305
|
+
val_acc.result() # 検証データの精度を出力
|
306
|
+
|
307
|
+
))
|
308
|
+
|
309
|
+
|
310
|
+
|
311
|
+
# 検証データの損失をEarlyStoppingオブジェクトに渡して早期終了を判定
|
312
|
+
|
313
|
+
if ers(val_loss.result()):
|
314
|
+
|
315
|
+
# 監視対象のエポックで損失が改善されなければ学習を終了
|
316
|
+
|
317
|
+
break
|