質問編集履歴
2
コード追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,7 +1,3 @@
|
|
1
|
-
### プーリング層でValueError: axes don't match arrayというエラーが出る。
|
2
|
-
|
3
|
-
|
4
|
-
|
5
1
|
CNNを使った画像識別を行おうとしていますが、プーリング層の部分でエラーが発生してしまいます。
|
6
2
|
|
7
3
|
|
@@ -272,7 +268,55 @@
|
|
272
268
|
|
273
269
|
# 重みの初期化
|
274
270
|
|
275
|
-
|
271
|
+
self.params = {}
|
272
|
+
|
273
|
+
std = weight_init_std
|
274
|
+
|
275
|
+
cv_input_size = input_dim[1]
|
276
|
+
|
277
|
+
cv_list = filter_num_list
|
278
|
+
|
279
|
+
input_oku = input_dim[0]
|
280
|
+
|
281
|
+
for idx in range(1, len(cv_list)+1):
|
282
|
+
|
283
|
+
filter_num = cv_list[idx - 1]
|
284
|
+
|
285
|
+
conv_output_size = (cv_input_size + 2*filter_pad - filter_size) // filter_stride + 1
|
286
|
+
|
287
|
+
pool_output_size = (conv_output_size + 2*pool_pad - pool_size) // pool_stride + 1
|
288
|
+
|
289
|
+
|
290
|
+
|
291
|
+
self.params['W'+ str(idx)] = std * np.random.randn(filter_num,input_oku, filter_size, filter_size)
|
292
|
+
|
293
|
+
self.params['b'+ str(idx)] = np.zeros(filter_num)
|
294
|
+
|
295
|
+
self.params['gamma'+ str(idx)] = np.ones(filter_num)
|
296
|
+
|
297
|
+
self.params['beta'+ str(idx)] = np.zeros(filter_num)
|
298
|
+
|
299
|
+
|
300
|
+
|
301
|
+
cv_input_size = pool_output_size
|
302
|
+
|
303
|
+
input_oku = filter_num
|
304
|
+
|
305
|
+
|
306
|
+
|
307
|
+
pool_output_pixel = filter_num * pool_output_size * pool_output_size
|
308
|
+
|
309
|
+
self.params['W_hidden'] = std * np.random.randn(pool_output_pixel, hidden_size)
|
310
|
+
|
311
|
+
self.params['b_hidden'] = np.zeros(hidden_size)
|
312
|
+
|
313
|
+
self.params['W_last'] = std * np.random.randn(hidden_size, output_size)
|
314
|
+
|
315
|
+
self.params['b_last'] = np.zeros(output_size)
|
316
|
+
|
317
|
+
self.params['gamma_last'] = np.ones(hidden_size)
|
318
|
+
|
319
|
+
self.params['beta_last'] = np.zeros(hidden_size)
|
276
320
|
|
277
321
|
|
278
322
|
|
@@ -324,16 +368,6 @@
|
|
324
368
|
|
325
369
|
def loss(self, x, t,train_flg=False):
|
326
370
|
|
327
|
-
"""
|
328
|
-
|
329
|
-
損失関数
|
330
|
-
|
331
|
-
x : 入力データ
|
332
|
-
|
333
|
-
t : 教師データ
|
334
|
-
|
335
|
-
"""
|
336
|
-
|
337
371
|
y = self.predict(x,train_flg)
|
338
372
|
|
339
373
|
return self.last_layer.forward(y, t)
|
@@ -370,28 +404,6 @@
|
|
370
404
|
|
371
405
|
def gradient(self, x, t):
|
372
406
|
|
373
|
-
"""勾配を求める(誤差逆伝播法)
|
374
|
-
|
375
|
-
Parameters
|
376
|
-
|
377
|
-
----------
|
378
|
-
|
379
|
-
x : 入力データ
|
380
|
-
|
381
|
-
t : 教師データ
|
382
|
-
|
383
|
-
Returns
|
384
|
-
|
385
|
-
-------
|
386
|
-
|
387
|
-
各層の勾配を持ったディクショナリ変数
|
388
|
-
|
389
|
-
grads['W1']、grads['W2']、...は各層の重み
|
390
|
-
|
391
|
-
grads['b1']、grads['b2']、...は各層のバイアス
|
392
|
-
|
393
|
-
"""
|
394
|
-
|
395
407
|
# forward
|
396
408
|
|
397
409
|
self.loss(x, t,train_flg=True)
|
@@ -528,8 +540,6 @@
|
|
528
540
|
|
529
541
|
dmax = np.zeros((dout.size, pool_size))
|
530
542
|
|
531
|
-
#flattenは構造を1次元配列に入れ直すこと
|
532
|
-
|
533
543
|
dmax[np.arange(self.arg_max.size), self.arg_max.flatten()] = dout.flatten()
|
534
544
|
|
535
545
|
dmax = dmax.reshape(dout.shape + (pool_size,))
|
1
誤字修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -550,7 +550,7 @@
|
|
550
550
|
|
551
551
|
|
552
552
|
|
553
|
-
プーリング層のbackwardのtransposeでエラーが出
|
553
|
+
プーリング層のbackwardのtransposeでエラーが出ているので、transposeしようとしているdoutを確認したら、print(dout.shape)の結果が(32, 576)と出力されました。ここが4次元じゃなくなっているのでエラーが出ているのだと思いますが、原因がわかりません。
|
554
554
|
|
555
555
|
|
556
556
|
|