回答編集履歴
4
d
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(
|
335
|
+
model.add(Dense(2))
|
336
336
|
|
337
337
|
model.add(Activation("linear"))
|
338
338
|
|
3
aa
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
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
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.
|
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_
|
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_
|
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
|
# エポックごとにテストデータで推論する。
|