Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

im2col()과 col2im() 작동 검증 방법

Choo sun sick edited this page Jul 30, 2020 · 11 revisions

im2col() 작동 검증 방법

python에서 im2col() 작동 확인 방법 및 검증 자료 만들기

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.]])

R에서 im2col() 작동 확인 방법 및 검증 자료 만들기

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=",")

위에서 만든 결괏값을 R로 가져와 R에서 작성한 im2col()을 검증하기

더미 자료를 만들어서 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)

위에서 만든 결괏값을 R로 가져와 R에서 작성한 col2im()을 검증하기

더미 자료를 만들어서 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])

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /