質問編集履歴

2

コード追記

2021/08/02 16:06

投稿

tre_v
tre_v

スコア0

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

誤字修正

2021/08/02 16:06

投稿

tre_v
tre_v

スコア0

test CHANGED
File without changes
test CHANGED
@@ -550,7 +550,7 @@
550
550
 
551
551
 
552
552
 
553
- プーリング層のbackwardのtransposeでエラーが出いるので、transposeしようとしているdoutを確認したら、print(dout.shape)の結果が(32, 576)と出力されました。ここが4次元じゃなくなっているのでエラーが出ているのだと思いますが、原因がわかりません。
553
+ プーリング層のbackwardのtransposeでエラーが出いるので、transposeしようとしているdoutを確認したら、print(dout.shape)の結果が(32, 576)と出力されました。ここが4次元じゃなくなっているのでエラーが出ているのだと思いますが、原因がわかりません。
554
554
 
555
555
 
556
556