質問編集履歴

3

コード追加分

2022/01/07 13:34

投稿

chronobcelp
chronobcelp

スコア9

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

コード追加

2022/01/07 13:34

投稿

chronobcelp
chronobcelp

スコア9

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

コードの追加

2022/01/07 13:32

投稿

chronobcelp
chronobcelp

スコア9

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