im2col()과 col2im() 작동 검증 방법 - LOPES-HUFS/DeepLearningFromForR GitHub Wiki
im2col()
작동 검증 방법
im2col()
작동 확인 방법 및 검증 자료 만들기
python에서 python에서 다음과 같이 자료를 만든다. 2차원 자료를 만들어서 4차원으로 만든다. 현재 m2col()
을 만드는 이유가 CNN을 원할하게 작동하기 위한 것이기 때문에 채널을 따로 만들지 않고 2차원으로 만든 것을 3개 붙여서 3 채널을 만들고, 배치에서 사용하기 위하여 이것을 2개 붙여서 4차원을 만든다.
input = np.array([
[1,2,3,4,5,6,7],
[8,9,10,11,12,13,14],
[15,16,17,18,19,20,21],
[22,23,24,25,26,27,28],
[29,30,31,32,33,34,35],
[36,37,38,39,40,41,42]
])
input_3d = np.array([input, input, input])
input_4d = np.array([input_3d, input_3d])
아래는 실제 코드를 입력한 화면이다.
>>> import numpy as np
>>> input = np.array([
... [1,2,3,4,5,6,7],
... [8,9,10,11,12,13,14],
... [15,16,17,18,19,20,21],
... [22,23,24,25,26,27,28],
... [29,30,31,32,33,34,35],
... [36,37,38,39,40,41,42]
... ])
>>> input.shape
(6, 7)
>>> input_3d = np.array([input, input, input])
>>> input_4d = np.array([input_3d, input_3d])
>>> input_4d.shape
(2, 3, 6, 7)
>>>
그런 다음 다음과 같이 im2col()
으로 계산을 한다.
im2col(input_4d, 3, 3, 2, 1)
그러면 다음과 같은 결과가 나온다. shape는 (24, 27)
가 나온다.
im2col(input_4d, 3, 3, 2, 1)
array([[ 0., 0., 0., 0., 1., 2., 0., 8., 9., 0., 0., 0., 0.,
1., 2., 0., 8., 9., 0., 0., 0., 0., 1., 2., 0., 8.,
9.],
[ 0., 0., 0., 2., 3., 4., 9., 10., 11., 0., 0., 0., 2.,
3., 4., 9., 10., 11., 0., 0., 0., 2., 3., 4., 9., 10.,
11.],
[ 0., 0., 0., 4., 5., 6., 11., 12., 13., 0., 0., 0., 4.,
5., 6., 11., 12., 13., 0., 0., 0., 4., 5., 6., 11., 12.,
13.],
[ 0., 0., 0., 6., 7., 0., 13., 14., 0., 0., 0., 0., 6.,
7., 0., 13., 14., 0., 0., 0., 0., 6., 7., 0., 13., 14.,
0.],
[ 0., 8., 9., 0., 15., 16., 0., 22., 23., 0., 8., 9., 0.,
15., 16., 0., 22., 23., 0., 8., 9., 0., 15., 16., 0., 22.,
23.],
[ 9., 10., 11., 16., 17., 18., 23., 24., 25., 9., 10., 11., 16.,
17., 18., 23., 24., 25., 9., 10., 11., 16., 17., 18., 23., 24.,
25.],
[11., 12., 13., 18., 19., 20., 25., 26., 27., 11., 12., 13., 18.,
19., 20., 25., 26., 27., 11., 12., 13., 18., 19., 20., 25., 26.,
27.],
[13., 14., 0., 20., 21., 0., 27., 28., 0., 13., 14., 0., 20.,
21., 0., 27., 28., 0., 13., 14., 0., 20., 21., 0., 27., 28.,
0.],
[ 0., 22., 23., 0., 29., 30., 0., 36., 37., 0., 22., 23., 0.,
29., 30., 0., 36., 37., 0., 22., 23., 0., 29., 30., 0., 36.,
37.],
[23., 24., 25., 30., 31., 32., 37., 38., 39., 23., 24., 25., 30.,
31., 32., 37., 38., 39., 23., 24., 25., 30., 31., 32., 37., 38.,
39.],
[25., 26., 27., 32., 33., 34., 39., 40., 41., 25., 26., 27., 32.,
33., 34., 39., 40., 41., 25., 26., 27., 32., 33., 34., 39., 40.,
41.],
[27., 28., 0., 34., 35., 0., 41., 42., 0., 27., 28., 0., 34.,
35., 0., 41., 42., 0., 27., 28., 0., 34., 35., 0., 41., 42.,
0.],
[ 0., 0., 0., 0., 1., 2., 0., 8., 9., 0., 0., 0., 0.,
1., 2., 0., 8., 9., 0., 0., 0., 0., 1., 2., 0., 8.,
9.],
[ 0., 0., 0., 2., 3., 4., 9., 10., 11., 0., 0., 0., 2.,
3., 4., 9., 10., 11., 0., 0., 0., 2., 3., 4., 9., 10.,
11.],
[ 0., 0., 0., 4., 5., 6., 11., 12., 13., 0., 0., 0., 4.,
5., 6., 11., 12., 13., 0., 0., 0., 4., 5., 6., 11., 12.,
13.],
[ 0., 0., 0., 6., 7., 0., 13., 14., 0., 0., 0., 0., 6.,
7., 0., 13., 14., 0., 0., 0., 0., 6., 7., 0., 13., 14.,
0.],
[ 0., 8., 9., 0., 15., 16., 0., 22., 23., 0., 8., 9., 0.,
15., 16., 0., 22., 23., 0., 8., 9., 0., 15., 16., 0., 22.,
23.],
[ 9., 10., 11., 16., 17., 18., 23., 24., 25., 9., 10., 11., 16.,
17., 18., 23., 24., 25., 9., 10., 11., 16., 17., 18., 23., 24.,
25.],
[11., 12., 13., 18., 19., 20., 25., 26., 27., 11., 12., 13., 18.,
19., 20., 25., 26., 27., 11., 12., 13., 18., 19., 20., 25., 26.,
27.],
[13., 14., 0., 20., 21., 0., 27., 28., 0., 13., 14., 0., 20.,
21., 0., 27., 28., 0., 13., 14., 0., 20., 21., 0., 27., 28.,
0.],
[ 0., 22., 23., 0., 29., 30., 0., 36., 37., 0., 22., 23., 0.,
29., 30., 0., 36., 37., 0., 22., 23., 0., 29., 30., 0., 36.,
37.],
[23., 24., 25., 30., 31., 32., 37., 38., 39., 23., 24., 25., 30.,
31., 32., 37., 38., 39., 23., 24., 25., 30., 31., 32., 37., 38.,
39.],
[25., 26., 27., 32., 33., 34., 39., 40., 41., 25., 26., 27., 32.,
33., 34., 39., 40., 41., 25., 26., 27., 32., 33., 34., 39., 40.,
41.],
[27., 28., 0., 34., 35., 0., 41., 42., 0., 27., 28., 0., 34.,
35., 0., 41., 42., 0., 27., 28., 0., 34., 35., 0., 41., 42.,
0.]])
im2col()
작동 확인 방법 및 검증 자료 만들기
R에서 R에서 같은 모양을 만들기 위해서는 위와 같이 노가다로 2차원 array를 만들지 않고 바로 만들었다.
> temp <- c(t(array(c(1:42), dim=c(7,6))))
> input_4d <- array(c(temp, temp, temp, temp, temp, temp), dim = c(6,7,3,2))
> dim(input_4d)
[1] 6 7 3 2
> input_4d
, , 1, 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1 2 3 4 5 6 7
[2,] 8 9 10 11 12 13 14
[3,] 15 16 17 18 19 20 21
[4,] 22 23 24 25 26 27 28
[5,] 29 30 31 32 33 34 35
[6,] 36 37 38 39 40 41 42
, , 2, 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1 2 3 4 5 6 7
[2,] 8 9 10 11 12 13 14
[3,] 15 16 17 18 19 20 21
[4,] 22 23 24 25 26 27 28
[5,] 29 30 31 32 33 34 35
[6,] 36 37 38 39 40 41 42
, , 3, 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1 2 3 4 5 6 7
[2,] 8 9 10 11 12 13 14
[3,] 15 16 17 18 19 20 21
[4,] 22 23 24 25 26 27 28
[5,] 29 30 31 32 33 34 35
[6,] 36 37 38 39 40 41 42
, , 1, 2
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1 2 3 4 5 6 7
[2,] 8 9 10 11 12 13 14
[3,] 15 16 17 18 19 20 21
[4,] 22 23 24 25 26 27 28
[5,] 29 30 31 32 33 34 35
[6,] 36 37 38 39 40 41 42
, , 2, 2
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1 2 3 4 5 6 7
[2,] 8 9 10 11 12 13 14
[3,] 15 16 17 18 19 20 21
[4,] 22 23 24 25 26 27 28
[5,] 29 30 31 32 33 34 35
[6,] 36 37 38 39 40 41 42
, , 3, 2
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1 2 3 4 5 6 7
[2,] 8 9 10 11 12 13 14
[3,] 15 16 17 18 19 20 21
[4,] 22 23 24 25 26 27 28
[5,] 29 30 31 32 33 34 35
[6,] 36 37 38 39 40 41 42
R에서 검증하는 새로운 방법
im2col()
를 적용한 결괏값을 저장하는 법
파이썬에서 더미 자료를 만들어서 test = np.arange(100 * 30 * 24 * 24).reshape(100, 30, 24, 24)
test.shape
test_im2col = im2col(test, 2, 2, 2, 0)
test_im2col.shape
np.savetxt("im2col_100_30_24_24.csv", test_im2col, delimiter=",")
test = np.arange(100 * 3 * 28 * 28).reshape(100, 3, 28, 28)
test.shape
test_im2col = im2col(test, 5, 5, 1, 0)
np.savetxt("im2col_100_3_28_28.csv", test_im2col, delimiter=",")
im2col()
을 검증하기
위에서 만든 결괏값을 R로 가져와 R에서 작성한 더미 자료를 만들어서 im2col()
를 적용한다.
test <- c(0:((100 * 30 * 24 * 24)-1))
test <- array(test ,c(24, 24, 30, 100))
test <- aperm(test, c(2, 1, 3, 4))
test_im2col <- im2col(test, 2, 2, 2, 0)
파이썬에서 저장한 결괏값을 가져오기
im2col_100_30_24_24 <- read.csv("im2col_100_30_24_24.csv", header=FALSE)
dim(im2col_100_30_24_24)
같은지 확인하기
all(im2col_100_30_24_24 == test_im2col)
col2im()
을 검증하기
위에서 만든 결괏값을 R로 가져와 R에서 작성한 더미 자료를 만들어서 col2im()
를 적용한다.
test <- c(0:((14400 * 120)-1))
test <- array(test ,c(120, 14400))
test <- t(test)
temp_col2im <- col2im(test, c(24, 24, 30, 100), 2, 2, 2, 0)
파이썬에서 저장한 결괏값을 가져온다. csv
포멧으로는 2차원 이상 처리 하기 어렵기 때문에 첫번째 2차원만 입력했다.
col2im_14400_120_0_0_1_1 <- read.csv("col2im_14400_120_0_0_1_1.csv", header=FALSE)
> dim(col2im_14400_120_0_0_1_1)
[1] 24 24
같은지 확인하기
all(col2im_14400_120_0_0_1_1) == temp_col2im[ , , 1,1])