質問編集履歴
1
エラーコードの追加、プログラムコードの追記
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
|
|