回答編集履歴

4

d

2018/10/25 06:18

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -292,7 +292,7 @@
292
292
 
293
293
  print(image_list.shape, image_list.dtype) # (300, 11250) float64
294
294
 
295
- print(location_list.shape, location_list.dtype) # (300,) float64
295
+ print(location_list.shape, location_list.dtype) # (300, 2) float64
296
296
 
297
297
  ```
298
298
 
@@ -332,7 +332,7 @@
332
332
 
333
333
  model.add(Dropout(0.0))
334
334
 
335
- model.add(Dense(1))
335
+ model.add(Dense(2))
336
336
 
337
337
  model.add(Activation("linear"))
338
338
 

3

aa

2018/10/25 06:18

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -275,3 +275,143 @@
275
275
  np.savetxt(filepath, result, fmt='%.0f')
276
276
 
277
277
  ```
278
+
279
+
280
+
281
+ ## 追記
282
+
283
+
284
+
285
+ 前提として、image_list は (サンプル数, Width * Height) の float 型の numpy 配列
286
+
287
+ location_list は (サンプル数,) の float 型の numpy 配列です。
288
+
289
+
290
+
291
+ ```
292
+
293
+ print(image_list.shape, image_list.dtype) # (300, 11250) float64
294
+
295
+ print(location_list.shape, location_list.dtype) # (300,) float64
296
+
297
+ ```
298
+
299
+
300
+
301
+ その場合に、質問のコードに各エポックごとに推論結果を CSV に保存するは以下のようになります。
302
+
303
+
304
+
305
+ ```
306
+
307
+ # モデルを作成
308
+
309
+ model = Sequential()
310
+
311
+ model.add(Dense(8000, input_dim=Z, kernel_initializer='random_uniform',bias_initializer='zeros'))
312
+
313
+ model.add(LeakyReLU())
314
+
315
+ model.add(Dropout(0.2))
316
+
317
+ model.add(Dense(100,kernel_initializer='random_uniform',bias_initializer='zeros'))
318
+
319
+ model.add(LeakyReLU())
320
+
321
+ model.add(Dropout(0.075))
322
+
323
+ model.add(Dense(50,kernel_initializer='random_uniform',bias_initializer='zeros'))
324
+
325
+ model.add(LeakyReLU())
326
+
327
+ model.add(Dropout(0.075))
328
+
329
+ model.add(Dense(10,kernel_initializer='random_uniform',bias_initializer='zeros'))
330
+
331
+ model.add(LeakyReLU())
332
+
333
+ model.add(Dropout(0.0))
334
+
335
+ model.add(Dense(1))
336
+
337
+ model.add(Activation("linear"))
338
+
339
+ model.compile(loss="mean_absolute_percentage_error", optimizer=Adam(lr=LR))
340
+
341
+
342
+
343
+ def get_batch(x, y, batch_size, shuffle=False):
344
+
345
+ '''ミニバッチを生成するジェネレーター関数
346
+
347
+ '''
348
+
349
+ num_samples = len(x)
350
+
351
+ if shuffle:
352
+
353
+ indices = np.random.permutation(num_samples)
354
+
355
+ else:
356
+
357
+ indices = np.arange(num_samples)
358
+
359
+
360
+
361
+ num_steps = np.ceil(num_samples / batch_size).astype(int)
362
+
363
+ # ステップ数 = ceil(サンプル数 / バッチサイズ)
364
+
365
+ # 例 np.ceil(10 / 3) = np.ceil(3.33333333...) = 4
366
+
367
+
368
+
369
+ for itr in range(num_steps):
370
+
371
+ start = batch_size * itr
372
+
373
+ excerpt = indices[start:start + batch_size]
374
+
375
+ yield x[excerpt], y[excerpt]
376
+
377
+
378
+
379
+ # 保存用ディレクトリ
380
+
381
+ out_dirpath = 'prediction'
382
+
383
+ os.makedirs(out_dirpath, exist_ok=True)
384
+
385
+
386
+
387
+ # 学習する。
388
+
389
+ epochs = 5
390
+
391
+ for i in range(epochs): # エポック数分ループする。
392
+
393
+ for x_batch, y_batch in get_batch(image_list, location_list, batch_size=BATCH_SIZE, shuffle=True):
394
+
395
+ # 1バッチ分学習する
396
+
397
+ model.train_on_batch(x_batch, y_batch)
398
+
399
+ print('training... epoch {}'.format(i))
400
+
401
+
402
+
403
+ # エポックごとにテストデータで推論する。
404
+
405
+ y_pred = model.predict(image_list)
406
+
407
+ result = np.c_[y_pred, location_list]
408
+
409
+
410
+
411
+ # 推論結果を保存する。
412
+
413
+ filepath = os.path.join(out_dirpath, 'prediction_{}.csv'.format(i))
414
+
415
+ np.savetxt(filepath, result, fmt='%.0f')
416
+
417
+ ```

2

d

2018/10/25 05:47

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -178,6 +178,44 @@
178
178
 
179
179
 
180
180
 
181
+ その下の for の部分は以下のことをしている。
182
+
183
+
184
+
185
+ ```
186
+
187
+ num_steps = 4
188
+
189
+ batch_size = 3
190
+
191
+ num_samples = 10
192
+
193
+ indices = np.arange(num_samples)
194
+
195
+
196
+
197
+ for itr in range(num_steps):
198
+
199
+ start = batch_size * itr
200
+
201
+ excerpt = indices[start:start + batch_size]
202
+
203
+ print(excerpt)
204
+
205
+ # [0 1 2]
206
+
207
+ # [3 4 5]
208
+
209
+ # [6 7 8]
210
+
211
+ # [9]
212
+
213
+ ```
214
+
215
+
216
+
217
+
218
+
181
219
  ### 学習する。
182
220
 
183
221
 

1

d

2018/10/25 04:58

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -122,30 +122,62 @@
122
122
 
123
123
  '''
124
124
 
125
- num_samples = len(x)
125
+ num_samples = len(x) # サンプル数
126
-
126
+
127
- if shuffle:
127
+ if shuffle: # シャッフルする場合
128
128
 
129
129
  indices = np.random.permutation(num_samples)
130
130
 
131
+ # 例: num_samples=10 の場合、array([7, 8, 1, 2, 4, 6, 9, 5, 3, 0])
132
+
133
+ # ランダムにシャッフルされている
134
+
131
- else:
135
+ else: # シャッフルしない場合
132
-
136
+
133
- indices = np.random.arange(num_samples)
137
+ indices = np.arange(num_samples)
138
+
134
-
139
+ # 例: num_samples=10 の場合、array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
140
+
141
+
142
+
135
- num_iterations = np.ceil(num_samples / batch_size).astype(int)
143
+ num_steps = np.ceil(num_samples / batch_size).astype(int)
144
+
136
-
145
+ # ステップ数 = ceil(サンプル数 / バッチサイズ)
146
+
147
+ # 例 np.ceil(10 / 3) = np.ceil(3.33333333...) = 4
148
+
149
+
150
+
137
- for itr in range(num_iterations):
151
+ for itr in range(num_steps):
138
152
 
139
153
  start = batch_size * itr
140
154
 
141
155
  excerpt = indices[start:start + batch_size]
142
156
 
157
+ # [batch_size * itr, batch_size * (itr + 1)] の範囲のサンプルを yield で返す。
158
+
143
159
  yield x[excerpt], y[excerpt]
144
160
 
145
161
  ```
146
162
 
147
163
 
148
164
 
165
+ [A, B, C, D, E, F, G, H, I, J] という10個のデータがあったとしたら、
166
+
167
+ バッチサイズ3の場合、
168
+
169
+ 1step目 [A, B, C]
170
+
171
+ 2step目 [D, E, F]
172
+
173
+ 3step目 [G, H, I]
174
+
175
+ 4step目 [J]
176
+
177
+ と4stepで全部のデータを一回ネットワークに流すことになるので、4step で 1epoch である。
178
+
179
+
180
+
149
181
  ### 学習する。
150
182
 
151
183
 
@@ -174,7 +206,7 @@
174
206
 
175
207
  epochs = 1
176
208
 
177
- for i in range(epochs):
209
+ for i in range(epochs): # エポック数分ループする。
178
210
 
179
211
  for x_batch, y_batch in get_batch(x_train, y_train_onehot, batch_size=128, shuffle=True):
180
212
 
@@ -186,6 +218,8 @@
186
218
 
187
219
  model.train_on_batch(x_batch, y_batch)
188
220
 
221
+ # この時点で1 epoch 分の学習が完了
222
+
189
223
 
190
224
 
191
225
  # エポックごとにテストデータで推論する。