質問編集履歴

1

エラーコードの追加、プログラムコードの追記

2020/07/31 05:55

投稿

T_Endo
T_Endo

スコア5

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,9 @@
2
2
 
3
3
  Deep Learning関連の質問なのですが、非常に優れた関数であるim2colという関数の逆バージョンであるcoltoim関数を実装したいと考えております。
4
4
 
5
- 実験の意図としては、画像データとして読み込んだものをim2colによって行列化し、それに以下のコードの演算を加えた後、coltoimによって再び画像化したいと考えています。ただし、演算によって次元の要素が変わってしまうため、上手くいっていない状況です。
5
+ 実験の意図としては、画像データとして読み込んだものをim2colによって行列化し、それに以下のコードの演算を加えた後、coltoimによって再び画像化したいと考えています。ただし、演算によって次元の要素が変わってしまうため、上手くいっていない状況です。エラーコードとしては、以下のようなものです。
6
+
7
+ "cannot reshape array of size 412958720 into shape (1280,71,71,1,5,5)"
6
8
 
7
9
 
8
10
 
@@ -15,6 +17,40 @@
15
17
  #前提データとして、"T1","Filters","Bias"があります。
16
18
 
17
19
  #T1.shape = (画像枚数、チャネル数、画像の縦サイズ、画像の横サイズ) = (1280,1,75,75),Filters.shape = (25,64),Bias.shape = (64,)です。
20
+
21
+
22
+
23
+ def im2col(input_data, filter_h, filter_w, stride=1, pad=0):
24
+
25
+ N, C, H, W = input_data.shape
26
+
27
+ out_h = (H + 2*pad - filter_h)//stride + 1
28
+
29
+ out_w = (W + 2*pad - filter_w)//stride + 1
30
+
31
+
32
+
33
+ img = np.pad(input_data, [(0,0), (0,0), (pad, pad), (pad, pad)], 'constant')
34
+
35
+ col = np.zeros((N, C, filter_h, filter_w, out_h, out_w))
36
+
37
+
38
+
39
+ for y in range(filter_h):
40
+
41
+ y_max = y + stride*out_h
42
+
43
+ for x in range(filter_w):
44
+
45
+ x_max = x + stride*out_w
46
+
47
+ col[:, :, y, x, :, :] = img[:, :, y:y_max:stride, x:x_max:stride]
48
+
49
+
50
+
51
+ col = col.transpose(0, 4, 5, 1, 2, 3).reshape(N*out_h*out_w, -1)
52
+
53
+ return col
18
54
 
19
55
 
20
56