convolutional_layer
Convolutional Layer ๋?
Convolution์ ํฉ์ฑ๊ณฑ์ผ๋ก 2๊ฐ์ง ์ฐ์ฐ์ ์ฌ์ฉํฉ๋๋ค.
๊ฐ ์์๋ผ๋ฆฌ ๊ณฑํฉ๋๋ค. (element wise multiplication)
๊ฐ ์์๋ฅผ ๋ํฉ๋๋ค.
์ดํด๋ฅผ ๋๊ธฐ์ํด ๊ทธ๋ฆผ์ผ๋ก ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ฐ ์์๋ฅผ ๊ณฑํ๊ณ ํฉํ ๊ฐ์ ํ์ฑํ ํจ์๋ฅผ ํต๊ณผํ์ฌ ์ต์ข ์ ์ผ๋ก ๊ฐ์ ๋ง๋ญ๋๋ค.(์๋ ๊ทธ๋ฆผ์ ํ์ฑํ ํจ์๋ฅผ ์๋ตํ ๊ทธ๋ฆผ์ ๋๋ค.)
Convolutional Layer๋ Feature Maps๊ณผ Filters์ Convolution ์ฐ์ฐ์ ํตํด ๊ทธ ๋ค์ Feature Maps์ ๋ง๋ค์ด ๋ด๋ ์์ ์ ๋ฐ๋ณตํฉ๋๋ค. ์ฌ๊ธฐ์ filters๊ฐ ํ์ต ํ๋ผ๋ฏธํฐ ์ ๋๋ค.
์
๋ ฅ ์ด๋ฏธ์ง
-> Filters(kernel)
-> Feature Maps(Channels)
-> Filters(kernel)
-> Feature Maps(Channels)
-> ...
Convolutional Layer๋ ์ค์ ๊ฐ๋ฅํ ํ๋ผ๋ฏธํฐ๊ฐ ์์ต๋๋ค.
stride
: filter๊ฐ ์์ง์ด๋ ๊ฐ๊ฒฉ์ ๋๋ค.padding
: Feature Map์ ํ ๋๋ฆฌ ๋ถ๋ถ์ ์ ๋ณด ์์ค์ ์ค์ด๊ธฐ ์ํด์ ํ ๋๋ฆฌ๋ฅผ ํน์ ํ ๊ฐ(๋ณดํต 0)์ผ๋ก ์ฑ์ ๋ฃ๋ ๋ฐฉ๋ฒ์ ๋๋ค. padding์ ๋ช๊ฐ์ ํ ๋๋ฆฌ๋ฅผ ์ฑ์ธ์ง์ ๋ํ ๊ฐ์ ๋๋ค.filter์ ์(๊ฐ์ค์น์ ์) :
Convolutional Layer ์ญ์ ํ๋ ์ฝ๊ฒ ํํํ๋ ๊ฒฝ์ฐ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
output์ ๊ณ์ฐํ๊ธฐ ์ํด์ ๊ฐ์์ id๋ฅผ ๊ฐ์ง๊ณ ์๋ weight๊ฐ ์ฌ์ฉ๋ ๊ณณ์ ๋ณด์๋ฉด ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค. ์๋ฅผ ๋ค์ด์ ์ ๋ฅผ ์ฐ์ฐํ๋๋ฐ ๊ฐ๊ฐ ์ฌ์ฉ๋์๊ธฐ ๋๋ฌธ์ ์ด๋ค์ ๋ฏธ๋ถ ๊ฐ์ ํฉ์ผ๋ก ์ต์ข ์ ์ผ๋ก ์ ๋ฐ์ดํธ ํ ๊ธฐ์ธ๊ธฐ๋ฅผ ๋ง๋ญ๋๋ค. ์ญ์ ํ๋ Layer ๋ฐ๋ก ๋ฐ๋ก ๊ฐ๋จํ๊ฒ ์ด๋ป๊ฒ ๋์ํ๋์ง๋ฅผ ์ ๋ถ ์ดํด๋ณด๊ณ ๋ง์ง๋ง์ ๋ณด๋ฉด ๋ ์ฌ์ด๊ฑฐ ๊ฐ์ต๋๋ค.
forward_convolutional_layer
ํจ์ ์ด๋ฆ: forward_convolutional_layer
์ ๋ ฅ:
convolutional_layer l: ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด ๊ตฌ์กฐ์ฒด
network net: ๋คํธ์ํฌ ๊ตฌ์กฐ์ฒด
๋์:
์ปจ๋ณผ๋ฃจ์ ์ฐ์ฐ์ ์ํํ์ฌ l.output์ ๊ฒฐ๊ณผ๊ฐ์ ์ ์ฅ
๋ฐฐ์น ์ ๊ทํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, forward_batchnorm_layer ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ฐฐ์น ์ ๊ทํ๋ฅผ ์ํ
ํ์ฑํ ํจ์๋ฅผ ์ํํ์ฌ l.output์ ์ ๋ฐ์ดํธ
์ด์ง ์ปจ๋ณผ๋ฃจ์ ๋๋ XNOR-Networks๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, swap_binary ํจ์๋ฅผ ํธ์ถํ์ฌ ๊ฐ์ค์น์ ์ ๋ ฅ๊ฐ์ ์ด์งํ
์ค๋ช :
์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด์ ๋ํ forward ์ฐ์ฐ์ ์ํํ๋ ํจ์์ด๋ค.
l.weights, l.biases, l.activation ๋ฑ ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด์ ํ์ ๊ตฌ์ฑ ์์๋ค์ ์ฌ์ฉํ์ฌ ์ ๋ ฅ๊ฐ์ ์ปจ๋ณผ๋ฃจ์ ์ฐ์ฐํ์ฌ ์ถ๋ ฅ๊ฐ์ ๊ณ์ฐํ๋ค.
์ปจ๋ณผ๋ฃจ์ ์ฐ์ฐ์ ์ํํ๊ธฐ ์ํด ์ ๋ ฅ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ columns๋ก ๋ณํํ๋ค.
l.batch_normalize๊ฐ true์ธ ๊ฒฝ์ฐ, forward_batchnorm_layer ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ฐฐ์น ์ ๊ทํ๋ฅผ ์ํํ๋ค.
activate_array ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฑํ ํจ์๋ฅผ ์ํํ์ฌ l.output์ ์ ๋ฐ์ดํธํ๋ค.
l.binary ๋๋ l.xnor๊ฐ true์ธ ๊ฒฝ์ฐ, swap_binary ํจ์๋ฅผ ํธ์ถํ์ฌ ๊ฐ์ค์น์ ์ ๋ ฅ๊ฐ์ ์ด์งํํ๋ค.
backward_convolutional_layer
ํจ์ ์ด๋ฆ: backward_convolutional_layer
์ ๋ ฅ:
convolutional_layer l: ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด ๊ตฌ์กฐ์ฒด
network net: ๋คํธ์ํฌ ๊ตฌ์กฐ์ฒด
๋์:
activation function์ gradient๋ฅผ ๊ณ์ฐํ๋ค.
batch normalization์ด ์ ์ฉ๋์๋ค๋ฉด batch normalization์ gradient๋ฅผ ๊ณ์ฐํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด bias์ gradient๋ฅผ ๊ณ์ฐํ๋ค.
๊ฐ ๋ฐฐ์น์ ๋ํด, ๊ฐ ๊ทธ๋ฃน์์ gradient์ weight๋ฅผ ๊ณฑํด weight update๋ฅผ ๊ณ์ฐํ๋ค.
์ด๋ฏธ์ง๋ฅผ columns๋ก ๋ณํํ์ฌ, ๊ฐ ๊ทธ๋ฃน์์ weight์ gradient๋ฅผ ๊ณฑํด input delta๋ฅผ ๊ณ์ฐํ๋ค.
columns์ ์ด๋ฏธ์ง๋ก ๋ณํํ์ฌ input delta๋ฅผ ์ ์ฅํ๋ค.
์ค๋ช :
convolutional layer์์๋ ์ด๋ฏธ์ง์ weight๋ฅผ ์ปจ๋ณผ๋ฃจ์ ์ฐ์ฐํ์ฌ output feature map์ ๊ณ์ฐํ๊ณ , ์ดํ activation function์ ์ ์ฉํ๋ค.
์ญ์ ํ์์๋ output feature map์ gradient๋ฅผ ๊ณ์ฐํ๊ณ , ์ด๋ฅผ ์ด์ฉํ์ฌ input delta์ weight update๋ฅผ ๊ณ์ฐํ๋ค.
์ด๋, gradient์ weight๋ฅผ ๊ณฑํด weight update๋ฅผ ๊ณ์ฐํ ๋๋ ํด๋น ๊ทธ๋ฃน์ weight๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๋ฉฐ, ๊ฐ ๊ทธ๋ฃน๋ง๋ค input delta๋ฅผ ๊ณ์ฐํ์ฌ ๋์ ํ์ฌ ์ ์ฅํ๋ค.
์ดํ, columns๋ฅผ ์ด๋ฏธ์ง๋ก ๋ณํํ์ฌ input delta๋ฅผ ๊ณ์ฐํ๋ค.
๋ง์ฝ batch normalization์ด ์ ์ฉ๋ convolutional layer๋ผ๋ฉด, ์ด์ layer์์ ์ ๋ฌ๋ฐ์ error๋ฅผ ์ด์ฉํ์ฌ batch normalization์ gradient๋ฅผ ๊ณ์ฐํ๊ณ , ์ด๋ฅผ ์ด์ฉํ์ฌ gamma์ beta๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
update_convolutional_layer
ํจ์ ์ด๋ฆ: update_convolutional_layer
์ ๋ ฅ:
convolutional_layer l: ์ ๋ฐ์ดํธํ convolutional layer ๊ตฌ์กฐ์ฒด
update_args a: ์ ๋ฐ์ดํธ์ ํ์ํ ์ธ์๋ค์ ๋ด์ ๊ตฌ์กฐ์ฒด. learning_rate, momentum, decay, batch ๊ฐ์ ๊ฐ์ง
๋์:
Convolutional layer์ bias์ weight๋ฅผ ์ ๋ฐ์ดํธํจ
learning_rate, momentum, decay, batch ๊ฐ์ ์ฌ์ฉํ์ฌ ์ ๋ฐ์ดํธ์ ํ์ํ ๊ณ์ฐ ์ํ
์ค๋ช :
axpy_cpu ํจ์๋ฅผ ์ฌ์ฉํ์ฌ bias์ scale์ ์ ๋ฐ์ดํธ ํจ. axpy_cpu ํจ์๋ y = a*x + y ์ฐ์ฐ์ ์ํํจ
scal_cpu ํจ์๋ฅผ ์ฌ์ฉํ์ฌ momentum์ ์ ์ฉํจ. scal_cpu ํจ์๋ ๋ฒกํฐ์ ๋ชจ๋ ์์์ ์ค์นผ๋ผ ๊ฐ์ ๊ณฑํด์ค
weight์ ๊ฒฝ์ฐ decay๋ฅผ ์ ์ฉํ๊ณ , axpy_cpu ํจ์๋ฅผ ์ฌ์ฉํ์ฌ weight๋ฅผ ์ ๋ฐ์ดํธ ํจ. ์ด๋ batch ๊ฐ์ ์ฌ์ฉํ์ฌ mini-batch gradient descent๋ฅผ ์ํํจ
resize_convolutional_layer
ํจ์ ์ด๋ฆ: resize_convolutional_layer
์ ๋ ฅ:
convolutional_layer *l: ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด
int w: ์กฐ์ ํ ๊ฐ๋ก ํฌ๊ธฐ
int h: ์กฐ์ ํ ์ธ๋ก ํฌ๊ธฐ
๋์:
์ฃผ์ด์ง ๊ฐ๋ก ํฌ๊ธฐ์ ์ธ๋ก ํฌ๊ธฐ์ ๋ฐ๋ผ ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํฉ๋๋ค.
์ด๋, ์ถ๋ ฅ ํฌ๊ธฐ(out_w, out_h)๋ ๊ณ์ฐํ๊ณ , ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด์ ์ถ๋ ฅ, ๋ธํ, x, x_norm, workspace์ ํฌ๊ธฐ๋ฅผ ์๋ก์ด ํฌ๊ธฐ์ ๋ง๊ฒ ์ฌํ ๋นํฉ๋๋ค.
์ค๋ช :
์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ ํจ์์ ๋๋ค.
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด์ ๊ฐ๋ก์ ์ธ๋ก ํฌ๊ธฐ๋ฅผ ์ฃผ์ด์ง w์ h ๊ฐ์ผ๋ก ๊ฐ๊ฐ ๋ฐ๊พธ์ด์ฃผ๋ฉฐ, ์ถ๋ ฅ ํฌ๊ธฐ(out_w, out_h)๋ ์ด์ ๋ง๊ฒ ๋ค์ ๊ณ์ฐํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ถ๋ ฅ, ๋ธํ, x, x_norm, workspace์ ํฌ๊ธฐ๋ฅผ ์๋ก์ด ํฌ๊ธฐ์ ๋ง๊ฒ realloc ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฌํ ๋นํฉ๋๋ค.
์ด๋, batch_normalize๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ์๋ x์ x_norm๋ ์ฌํ ๋นํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก workspace_size๋ฅผ get_workspace_size ํจ์๋ฅผ ํตํด ๋ค์ ๊ณ์ฐํ์ฌ ์ ์ฅํฉ๋๋ค.
make_convolutional_layer
ํจ์ ์ด๋ฆ: make_convolutional_layer
์ ๋ ฅ:
batch: ๋ฐฐ์น ํฌ๊ธฐ
h: ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋์ด
w: ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋๋น
c: ์ ๋ ฅ ์ด๋ฏธ์ง์ ์ฑ๋ ์
n: ํํฐ ๊ฐ์
groups: ๊ทธ๋ฃน ์
size: ํํฐ ํฌ๊ธฐ
stride: ์คํธ๋ผ์ด๋
padding: ํจ๋ฉ ํฌ๊ธฐ
activation: ํ์ฑํ ํจ์
batch_normalize: ๋ฐฐ์น ์ ๊ทํ ์ฌ๋ถ
binary: ์ด์งํ ์ฌ๋ถ
xnor: XNOR ์ฌ๋ถ
adam: Adam ์ตํฐ๋ง์ด์ ์ฌ์ฉ ์ฌ๋ถ
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง์ ํํฐ๋ฅผ ํฉ์ฑ๊ณฑ ์ฐ์ฐํ์ฌ ์ถ๋ ฅ์ ๊ณ์ฐํ๋ ํฉ์ฑ๊ณฑ ๋ ์ด์ด๋ฅผ ์์ฑํฉ๋๋ค.
ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ ํ ๋นํฉ๋๋ค.
๊ฐ์ค์น(weight)์ ํธํฅ(bias)์ ์ด๊ธฐํํฉ๋๋ค.
ํ์ฑํ ํจ์, ๋ฐฐ์น ์ ๊ทํ, ์ด์งํ, XNOR, Adam ์ตํฐ๋ง์ด์ ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํ์ํ ๋ฉ๋ชจ๋ฆฌ์ ๋ณ์๋ฅผ ํ ๋นํ๊ณ ์ด๊ธฐํํฉ๋๋ค.
์์ฑ๋ ๋ ์ด์ด์ ์ถ๋ ฅ ํฌ๊ธฐ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
์์ฑ๋ ๋ ์ด์ด์ ์ฐ๊ด๋ ํจ์ ํฌ์ธํฐ๋ฅผ ์ค์ ํฉ๋๋ค.
์์ฑ๋ ๋ ์ด์ด๋ฅผ ๋ฐํํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์ ๋ ฅ ์ด๋ฏธ์ง์ ํํฐ์ ํฉ์ฑ๊ณฑ ์ฐ์ฐ์ ์ํํ๋ ํฉ์ฑ๊ณฑ ๋ ์ด์ด๋ฅผ ์์ฑํ๋ ํจ์์ ๋๋ค.
์ ๋ ฅ์ผ๋ก ๋ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ ํ ๋นํ๊ณ ์ด๊ธฐํํฉ๋๋ค.
ํํฐ(weight)๋ ๋๋คํ ๊ฐ์ผ๋ก ์ด๊ธฐํํ๋ฉฐ, Xavier ์ด๊ธฐํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค.
ํ์ฑํ ํจ์๋ ReLU, LeakyReLU, linear ํจ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฐฐ์น ์ ๊ทํ๋ ์ ๋ ฅ ๋ฐ์ดํฐ์ ๋ฐฐ์น ๋จ์๋ก ์ ๊ทํ๋ฅผ ์ํํ์ฌ ํ์ต์ ์์ ํ์ํค๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ด์งํ๋ ๋ชจ๋ธ์ ๊ฐ์ค์น๋ฅผ ์ด์ง ํํ๋ก ๋ณํํ์ฌ ๋ชจ๋ธ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์ฐ์ฐ ์๋๋ฅผ ๋์ด๋ ๋ฐฉ๋ฒ์ ๋๋ค.
XNOR๋ ์ด์งํ๋ ๊ฐ์ค์น์ ์ด์งํ๋ ์ ๋ ฅ์ ์ฌ์ฉํ์ฌ ํฉ์ฑ๊ณฑ ์ฐ์ฐ์ ์ํํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ์ด์งํ๋ณด๋ค ๋ ํฐ ๋ชจ๋ธ ์์ถ๊ณผ ๋น ๋ฅธ ์ฐ์ฐ ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
Adam ์ตํฐ๋ง์ด์ ๋ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์ฌ์ฉํ๋ ์ตํฐ๋ง์ด์ ์ค ํ๋๋ก, ๋ชจ๋ฉํ ๊ณผ RMSProp์ ๊ฒฐํฉํ ๋ฐฉ๋ฒ์ ๋๋ค. ํ์ต ์๋๋ฅผ ์๋์ผ๋ก ์กฐ์ ํ์ฌ ๋ ๋น ๋ฅด๊ฒ ์๋ ดํ๋ ํน์ง์ด ์์ต๋๋ค.
denormalize_convolutional_layer
ํจ์ ์ด๋ฆ: denormalize_convolutional_layer
์ ๋ ฅ:
convolutional_layer l: denormalization์ด ํ์ํ convolutional layer
๋์:
batch normalization์ ์ ์ฉํ convolutional layer๋ฅผ denormalize ํจ
convolutional layer์ weights, biases, scales, rolling_mean, rolling_variance ๊ฐ์ ์์ ํจ
์ค๋ช :
batch normalization์ ๋ฐ์ดํฐ์ ๋ถํฌ๋ฅผ ์กฐ์ ํด ํ์ต์ ์์ ํ์ํค๋ ๊ธฐ์ ์ด๋ค.
ํ์ต ๊ณผ์ ์์ ์ด์ ๋ฏธ๋๋ฐฐ์น์ ํ๊ท ๊ณผ ๋ถ์ฐ์ ์ด์ฉํด ํ์ฌ ๋ฏธ๋๋ฐฐ์น์ ๋ฐ์ดํฐ๋ฅผ normalizeํ๋ค.
ํ์ง๋ง, ํ์ต์ด ๋๋ ๋ชจ๋ธ์ ์ฌ์ฉํ ๋๋ ์ด์ ๋ฏธ๋๋ฐฐ์น์ ํ๊ท ๊ณผ ๋ถ์ฐ ๋์ ์ ์ฒด ๋ฐ์ดํฐ์ ์ ํ๊ท ๊ณผ ๋ถ์ฐ์ ์ด์ฉํด denormalizeํด์ผ ํ๋ค.
์ด ํจ์๋ ๊ทธ ์ญํ ์ ์ํํ๋ ํจ์์ด๋ค.
๊ฐ ์ฑ๋๋ง๋ค denormalize์ ํ์ํ ๊ฐ์ ๊ณ์ฐํ๊ณ , weights์ biases ๊ฐ์ ์์ ํ๋ค.
scales ๊ฐ์ 1๋ก, rolling_mean๊ณผ rolling_variance ๊ฐ์ 0๊ณผ 1๋ก ์ด๊ธฐํํ๋ค.
add_bias
ํจ์ ์ด๋ฆ: add_bias
์ ๋ ฅ:
output: float ํ์์ ์ถ๋ ฅ ๊ฐ ํฌ์ธํฐ
biases: float ํ์์ bias ๊ฐ ํฌ์ธํฐ
batch: int ํ์์ batch ํฌ๊ธฐ
n: int ํ์์ ํํฐ ๊ฐ์
size: int ํ์์ ์ถ๋ ฅ ๊ฐ ํฌ๊ธฐ
๋์:
์ถ๋ ฅ ๊ฐ์ bias ๊ฐ์ ๋ํจ
์ถ๋ ฅ ๊ฐ์ ํฌ๊ธฐ๋ batch x n x size
์ค๋ช :
๊ฐ ํํฐ๋ง๋ค bias ๊ฐ์ ๋ํด์ฃผ๋ ํจ์
์ถ๋ ฅ ๊ฐ์ ๊ฐ ์์์ biases[i] ๊ฐ์ ๋ํด์ค์ผ๋ก์จ bias ๊ฐ์ ์ ์ฉํจ
์ถ๋ ฅ ๊ฐ์ ํฌ๊ธฐ๋ batch x n x size ์ด๋ฏ๋ก, ๋ฐ๋ณต๋ฌธ์ ํตํด ๊ฐ ์์์ biases[i] ๊ฐ์ ๋ํด์ค
scale_bias
ํจ์ ์ด๋ฆ: scale_bias
์ ๋ ฅ:
float *output: ์ถ๋ ฅ๊ฐ ํฌ์ธํฐ
float *scales: ์ค์ผ์ผ๊ฐ ํฌ์ธํฐ
int batch: ๋ฐฐ์น ํฌ๊ธฐ
int n: ์ถ๋ ฅ ์ฑ๋ ์
int size: ์ถ๋ ฅ๊ฐ ํฌ๊ธฐ (๊ฐ๋ก, ์ธ๋ก)
๋์:
๊ฐ ๋ฐฐ์น๋ณ๋ก ์ถ๋ ฅ๊ฐ(output)์ ๊ฐ ์ฑ๋์ ๋ํด, scales ๋ฐฐ์ด์ ํด๋น ์ฑ๋ ๊ฐ์ผ๋ก ์ถ๋ ฅ๊ฐ์ ์ค์ผ์ผ๋ง(scale)ํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์ถ๋ ฅ๊ฐ(output)์ ๋ํด ๊ฐ ์ฑ๋์ ๋ํ ์ค์ผ์ผ๋ง ์์ ์ ์ํํ๋ ํจ์์ ๋๋ค.
๋ฐฐ์น(batch) ํฌ๊ธฐ๋งํผ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ, ๊ฐ ๋ฐฐ์น์ ๋ํด ์ถ๋ ฅ๊ฐ(output)์ n๊ฐ ์ฑ๋์ ๋ํด ์ค์ผ์ผ๋ง ์์ ์ ์ํํฉ๋๋ค.
์ถ๋ ฅ๊ฐ(output)์ ๋ฐฐ์น, ์ฑ๋, ๊ฐ๋ก, ์ธ๋ก์ 4์ฐจ์ ๋ฐฐ์ด ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์ค์ผ์ผ(scales)๋ ์ถ๋ ฅ ์ฑ๋ ์(n)๋งํผ์ 1์ฐจ์ ๋ฐฐ์ด๋ก ์ฃผ์ด์ง๋๋ค.
์ด ํจ์๋ ๊ฐ ๋ฐฐ์น(b), ์ฑ๋(i), ๊ฐ๋ก(j), ์ธ๋ก(k)์ ๋ํ ๋ฐ๋ณต๋ฌธ์ ์ํํ๋ฉฐ, ์ถ๋ ฅ๊ฐ(output)์ (b*n+i)*size+j ์์น์ ํด๋นํ๋ ๊ฐ์ ์ค์ผ์ผ(scales) ๋ฐฐ์ด์ i๋ฒ์งธ ๊ฐ์ผ๋ก ๊ณฑํด์ฃผ๋ ์์ ์ ์ํํฉ๋๋ค.
์ด๋ ๊ฒ ์ค์ผ์ผ๋ง๋ ๊ฐ์ ์ถ๋ ฅ๊ฐ(output)์ ์ ์ฅํฉ๋๋ค.
backward_bias
ํจ์ ์ด๋ฆ: backward_bias
์ ๋ ฅ:
bias_updates: ๊ฐ ๋ ์ด์ด์ ํธํฅ(bias) ์ ๋ฐ์ดํธ ๊ฐ์ ์ ์ฅํ ๋ฐฐ์ด
delta: ๊ฐ ๋ด๋ฐ์ ์ค์ฐจ ๊ฐ(error) ๋ฐฐ์ด
batch: ๋ฏธ๋๋ฐฐ์น(batch) ํฌ๊ธฐ
n: ๋ ์ด์ด ๋ด ๋ด๋ฐ ๊ฐ์
size: ๋ด๋ฐ์ด ๊ฐ์ง๊ณ ์๋ ์ ๋ ฅ(input) ๋ฐ์ดํฐ ํฌ๊ธฐ
๋์:
์ด ํจ์๋ convolutional neural network์์ ํธํฅ(bias) ์ ๋ฐ์ดํธ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
delta๋ ํ์ฌ ๋ ์ด์ด์ ๋ด๋ฐ์์์ ์ค์ฐจ ๊ฐ์ ๋๋ค.
bias_updates ๋ฐฐ์ด์ ๊ฐ ๋ ์ด์ด์ ํธํฅ ๊ฐ์ ์ ๋ฐ์ดํธํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ๋ฏธ๋๋ฐฐ์น(batch) ๋ด์ ๋ชจ๋ ๋ด๋ฐ์ ๋ํด bias_updates ๋ฐฐ์ด์ ๋ํ ์ ๋ฐ์ดํธ ๊ฐ์ ๊ณ์ฐํฉ๋๋ค.
๋จผ์ for๋ฌธ์ ์ด์ฉํ์ฌ batch ๋ด ๊ฐ ๋ด๋ฐ์ ๋ํ bias_updates ๊ฐ์ ๊ณ์ฐํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ sum_array ํจ์๋ฅผ ์ฌ์ฉํ์ฌ delta ๋ฐฐ์ด์ ํด๋น ๋ด๋ฐ์ ์ค์ฐจ ๊ฐ์ ๊ณ์ฐํ๊ณ , bias_updates ๋ฐฐ์ด์ ๋ํฉ๋๋ค.
๋ฐ๋ผ์ ์ด ํจ์๋ backward propagation ๊ณผ์ ์์ ํธํฅ ์ ๋ฐ์ดํธ๋ฅผ ์ํํฉ๋๋ค.
swap_binary
ํจ์ ์ด๋ฆ: swap_binary
์ ๋ ฅ:
convolutional_layer *l: convolutional_layer ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ
๋์:
์ด ํจ์๋ convolutional layer์ ๊ฐ์ค์น(weights)์ binary weights๋ฅผ ๊ตํ(swap)ํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ convolutional layer์ ๊ฐ์ค์น๋ฅผ binary weights๋ก ๊ตํํฉ๋๋ค.
์ด๋ forward pass์์ ๊ธฐ์กด์ ๊ฐ์ค์น๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ฐ์ ์ํํ๋ ๋์ , ์ด์ง ํํ์ ๊ฐ์ค์น(binary weights)๋ฅผ ์ฌ์ฉํ์ฌ ๋์ฑ ๋น ๋ฅด๊ฒ ์ฐ์ฐ์ ์ํํ ์ ์๋๋ก ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค.
์ด ํจ์์์๋ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ค์น์ binary weights๋ฅผ ๊ตํํฉ๋๋ค.
binarize_weights
ํจ์ ์ด๋ฆ: binarize_weights
์ ๋ ฅ:
float *weights: ์ด์งํํ ๊ฐ์ค์น ๋ฐฐ์ด
int n: ๊ฐ์ค์น์ ์ฑ๋ ์
int size: ๊ฐ์ค์น์ ํฌ๊ธฐ
float *binary: ์ด์งํ๋ ๊ฐ์ค์น๋ฅผ ์ ์ฅํ ๋ฐฐ์ด
๋์:
์ฃผ์ด์ง ๊ฐ์ค์น ๋ฐฐ์ด(weights)์ ์ด์งํํ์ฌ ์ด์งํ๋ ๊ฐ์ค์น(binary)๋ฅผ ๊ณ์ฐํฉ๋๋ค.
์ด์งํ๋ ๊ฐ์ค์น๋ ๊ฐ ๊ฐ์ค์น์ ์ ๋๊ฐ ํ๊ท (mean)์ผ๋ก ๊ณ์ฐ๋ฉ๋๋ค.
๊ฐ์ค์น ๊ฐ์ด ํ๊ท ๋ณด๋ค ํฌ๋ฉด ์ด์งํ๋ ๊ฐ์ค์น ๊ฐ์ ํ๊ท ์ด๊ณ , ์์ผ๋ฉด -ํ๊ท ์ ๋๋ค.
์ค๋ช :
Convolutional neural network์์ ์ด์งํ๋ ๊ฐ์ค์น๋ ๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐจ์งํ๊ณ ๋น ๋ฅธ ์ฐ์ฐ์ด ๊ฐ๋ฅํ์ฌ ๋ชจ๋ธ์ ์คํ ์๋๋ฅผ ํฅ์์ํค๋ ๋ฐ ๋์์ ์ค๋๋ค.
์ด์งํ๋ ๊ฐ์ค์น๋ฅผ ์ฌ์ฉํ๋ฉด ๊ณ์ฐ ๋ณต์ก๋๋ฅผ ์ค์ด๋ ๋์์ ์ ํ๋๋ฅผ ์ ์งํ ์ ์์ต๋๋ค.
binarize_cpu
ํจ์ ์ด๋ฆ: binarize_cpu
์ ๋ ฅ:
input: float ํํ์ 1์ฐจ์ ๋ฐฐ์ด
n: input ๋ฐฐ์ด์ ๊ธธ์ด
binary: float ํํ์ 1์ฐจ์ ๋ฐฐ์ด
๋์:
input ๋ฐฐ์ด์ ์์๋ฅผ 0์ ๊ธฐ์ค์ผ๋ก 1 ๋๋ -1๋ก ์ด์งํํ์ฌ binary ๋ฐฐ์ด์ ์ ์ฅํจ.
์ค๋ช :
์ด์งํ๋, ์ ๋ ฅ๊ฐ์ 0๊ณผ 1 ๋๋ -1๊ณผ 1๊ณผ ๊ฐ์ ์ด์ง์ ํํ๋ก ๋ฐ๊พธ๋ ์์ ์ ์๋ฏธํจ.
์ด ํจ์์์๋ ์ ๋ ฅ๋ input ๋ฐฐ์ด์ ์์๋ฅผ 0์ ๊ธฐ์ค์ผ๋ก 1 ๋๋ -1๋ก ์ด์งํํ์ฌ binary ๋ฐฐ์ด์ ์ ์ฅํจ.
์ด์งํ๋ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด๋ฌธ์ผ๋ก ๊ฒฐ์ ๋จ:
input[i] > 0 ์ด๋ฉด, binary[i] = 1
input[i] <= 0 ์ด๋ฉด, binary[i] = -1
binarize_input
ํจ์ ์ด๋ฆ: binarize_input
์ ๋ ฅ:
float *input: ์ด์งํํ ์ ๋ ฅ ๋ฐฐ์ด
int n: ์ ๋ ฅ ๋ฐฐ์ด์ ์ฑ๋ ์
int size: ์ ๋ ฅ ๋ฐฐ์ด์ ํฌ๊ธฐ (๊ฐ๋ก ๋๋ ์ธ๋ก ํ ๋ณ์ ๊ธธ์ด)
float *binary: ์ด์งํ๋ ๊ฐ์ ์ ์ฅํ ์ถ๋ ฅ ๋ฐฐ์ด
๋์:
์ ๋ ฅ ๋ฐฐ์ด์ ์ด์งํํ์ฌ ์ถ๋ ฅ ๋ฐฐ์ด์ ์ ์ฅํฉ๋๋ค.
์ค๋ช :
์ ๋ ฅ ๋ฐฐ์ด์ ๊ฐ ์ฑ๋๊ณผ ์์น์ ๋ํด ํ๊ท ๊ฐ์ ๊ณ์ฐํ๊ณ , ์ ๋ ฅ ๊ฐ์ด ํ๊ท ๋ณด๋ค ํฌ๋ฉด 1, ์์ผ๋ฉด -1์ ์ถ๋ ฅ ๋ฐฐ์ด์ ์ ์ฅํฉ๋๋ค.
ํ๊ท ๊ฐ์ ๊ฐ ์ฑ๋๊ณผ ์์น๋ง๋ค ๋ค๋ฅด๊ฒ ๊ณ์ฐ๋ฉ๋๋ค.
convolutional_out_height
ํจ์ ์ด๋ฆ: convolutional_out_height
์ ๋ ฅ:
convolutional_layer l: ํฉ์ฑ๊ณฑ ๋ ์ด์ด ๊ตฌ์กฐ์ฒด
๋์:
ํฉ์ฑ๊ณฑ ๋ ์ด์ด์ ์ ๋ ฅ ์ด๋ฏธ์ง ๋์ด(l.h), ํจ๋ฉ ํฌ๊ธฐ(l.pad), ํํฐ ํฌ๊ธฐ(l.size), ๋ฐ ์คํธ๋ผ์ด๋ ํฌ๊ธฐ(l.stride)๋ฅผ ๊ณ ๋ คํ์ฌ ์ถ๋ ฅ ์ด๋ฏธ์ง ๋์ด๋ฅผ ๊ณ์ฐํ๋ค.
์ค๋ช :
ํฉ์ฑ๊ณฑ ๋ ์ด์ด์์ ํํฐ์ ์ ๋ ฅ ์ด๋ฏธ์ง์ ํฉ์ฑ๊ณฑ ์ฐ์ฐ์ ์ํํ๋ฉด ์ถ๋ ฅ ์ด๋ฏธ์ง๊ฐ ์์ฑ๋๋ค.
์ด๋, ์ถ๋ ฅ ์ด๋ฏธ์ง์ ๋์ด๋ฅผ ๊ณ์ฐํ๋ ํจ์์ด๋ค.
ํฉ์ฑ๊ณฑ ๋ ์ด์ด ๊ตฌ์กฐ์ฒด์์ ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋์ด(l.h), ํจ๋ฉ ํฌ๊ธฐ(l.pad), ํํฐ ํฌ๊ธฐ(l.size), ๋ฐ ์คํธ๋ผ์ด๋ ํฌ๊ธฐ(l.stride)๋ฅผ ์ด์ฉํ์ฌ ์ถ๋ ฅ ์ด๋ฏธ์ง์ ๋์ด๋ฅผ ๊ณ์ฐํ๊ณ ๋ฐํํ๋ค.
convolutional_out_width
ํจ์ ์ด๋ฆ: convolutional_out_width
์ ๋ ฅ:
convolutional_layer l: ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด ๊ตฌ์กฐ์ฒด
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง์ ๋๋น, ํจ๋ฉ, ์คํธ๋ผ์ด๋, ํํฐ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ์ฌ ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด์ ์ถ๋ ฅ ๋๋น๋ฅผ ๊ณ์ฐํ๋ค.
์ค๋ช :
์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด์ ์ถ๋ ฅ ๋๋น๋ฅผ ๋ฐํํ๋ ํจ์์ด๋ค.
์ ๋ ฅ ์ด๋ฏธ์ง์ ๋๋น, ํจ๋ฉ, ์คํธ๋ผ์ด๋, ํํฐ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ์ฌ ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด์ ์ถ๋ ฅ ๋๋น๋ฅผ ๊ณ์ฐํ๊ณ ๋ฐํํ๋ค.
์ถ๋ ฅ ๋๋น๋ ์๋์ ๊ณต์์ ๋ฐ๋ฅธ๋ค: (์ ๋ ฅ ๋๋น + 2 x ํจ๋ฉ - ํํฐ ํฌ๊ธฐ) / ์คํธ๋ผ์ด๋ + 1
get_convolutional_image
ํจ์ ์ด๋ฆ: get_convolutional_image
์ ๋ ฅ:
convolutional_layer ๊ตฌ์กฐ์ฒด
๋์:
convolutional_layer์ ์ถ๋ ฅ์ float_to_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ image ๊ตฌ์กฐ์ฒด๋ก ๋ณํ
์ค๋ช :
convolutional_layer์ ์ถ๋ ฅ์ ์ด๋ฏธ์ง ํ์์ผ๋ก ๋ณํํ์ฌ ๋ฐํํ๋ ํจ์์ด๋ค.
๋ฐํ๋ ์ด๋ฏธ์ง๋ float_to_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ณํ๋๋ค.
get_convolutional_delta
ํจ์ ์ด๋ฆ: get_convolutional_delta
์ ๋ ฅ:
convolutional_layer ๊ตฌ์กฐ์ฒด
๋์:
convolutional_layer ๊ตฌ์กฐ์ฒด ๋ด delta ๋ฐฐ์ด์ out_w, out_h, out_c ํฌ๊ธฐ์ ์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด ํํ๋ก ๋ณํ
์ค๋ช :
convolutional_layer ๊ตฌ์กฐ์ฒด ๋ด delta ๋ฐฐ์ด์ ํด๋น ์ธต์์ ์ญ์ ํ(backpropagation)๋ฅผ ํตํด ๊ณ์ฐ๋ ์ถ๋ ฅ ๊ฐ์ ์ค์ฐจ ๊ฐ์ ์ ์ฅํ๊ณ ์๋ค.
์ด ํจ์๋ ํด๋น delta ๋ฐฐ์ด์ ์ด๋ฏธ์ง ํํ๋ก ๋ณํํ์ฌ ๋ฐํํ๋ค.
์ด ๋, ๋ณํ๋ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ ํด๋น ์ธต์ ์ถ๋ ฅ ๊ฐ ํฌ๊ธฐ(out_w, out_h, out_c)์ ๋์ผํ๋ค.
get_convolutional_weight
ํจ์ ์ด๋ฆ: get_convolutional_weight
์ ๋ ฅ:
convolutional_layer l: ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด ๊ตฌ์กฐ์ฒด
int i: ๊ฐ์ ธ์ฌ ๊ฐ์ค์น์ ์ธ๋ฑ์ค
๋์:
์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด์์ i๋ฒ์งธ ๊ฐ์ค์น์ ํฌ๊ธฐ๋ฅผ ์ด์ฉํ์ฌ float_to_image ํจ์๋ฅผ ํธ์ถํด ๊ฐ์ค์น ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ค.
์ค๋ช :
์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด์์ i๋ฒ์งธ ๊ฐ์ค์น์ ๊ฐ์ ์ด์ฉํ์ฌ ํด๋น ๊ฐ์ค์น๋ฅผ ์๊ฐํํ ์ ์๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ค.
์์ฑ๋ ์ด๋ฏธ์ง๋ float_to_image ํจ์๋ฅผ ์ด์ฉํ์ฌ ์์ฑ๋๋ฉฐ, ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ ๊ฐ์ค์น์ ํฌ๊ธฐ์ ๋์ผํ๋ค.
rgbgr_weights
ํจ์ ์ด๋ฆ: rgbgr_weights
์ ๋ ฅ:
convolutional_layer l: ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด
๋์:
๊ฐ ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด์ ๊ฐ์ค์น ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์จ๋ค.
์ด๋ฏธ์ง์ ์ฑ๋์ด 3์ธ ๊ฒฝ์ฐ, rgbgr_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ RGB ์ด๋ฏธ์ง๋ฅผ BGR ์ด๋ฏธ์ง๋ก ๋ณํํ๋ค.
๋ชจ๋ ๊ฐ์ค์น ์ด๋ฏธ์ง์ ๋ํด ์ ๋์์ ์ํํ๋ค.
์ค๋ช :
์ด ํจ์๋ ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด์ ๊ฐ์ค์น ์ด๋ฏธ์ง๋ฅผ BGR ์ฑ๋ ์์๋ก ๋ณํํ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค.
์ปฌ๋ฌ ์ด๋ฏธ์ง์์๋ ์์ ์ฑ๋์ ์์๊ฐ RGB๊ฐ ์ผ๋ฐ์ ์ด์ง๋ง, OpenCV ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์๋ BGR ์ฑ๋ ์์๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์ด๋ฌํ ๋ณํ์ด ํ์ํ๋ค.
์ด ํจ์๋ ์ฃผ๋ก ๋ฅ๋ฌ๋ ๋ชจ๋ธ์ OpenCV์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฌ์ฉํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค. ํ์ ์ค๋ช :
for ๋ฌธ์์ i ๋ณ์๋ฅผ ์ด๊ธฐํํ๊ณ , l.n๋งํผ ๋ฐ๋ณตํ๋ค.
get_convolutional_weight ํจ์๋ฅผ ์ฌ์ฉํ์ฌ i๋ฒ์งธ ๊ฐ์ค์น ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์จ๋ค.
์ด๋ฏธ์ง์ ์ฑ๋์ด 3์ธ ๊ฒฝ์ฐ์๋ง rgbgr_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ณํํ๋ค.
rescale_weights
ํจ์ ์ด๋ฆ: rescale_weights
์ ๋ ฅ:
convolutional_layer l : rescaleํ ๋ ์ด์ด
float scale : ๊ฐ์ค์น๋ฅผ ๊ณฑํ ์ค์ผ์ผ ๊ฐ
float trans : ํธํฅ(bias) ๊ฐ์ ์กฐ์ ํ ๊ฐ
๋์:
convolutional layer์์ ๊ฐ์ค์น(weight)๋ฅผ ๊ฐ์ ธ์์ ์ด๋ฏธ์ง๋ฅผ rescaleํ๊ณ , ์ด๋ฏธ์ง์ ์ด ํฉ(sum)์ ๊ตฌํ ํ, ํธํฅ(bias) ๊ฐ์ trans๋งํผ ๋ํด์ค
์ค๋ช :
convolutional_layer l์์ ๊ฐ์ค์น(weight) ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์์ ์ด๋ฏธ์ง์ ์ฑ๋ ์(c)๊ฐ 3์ผ ๋(rescaleํ๊ณ ์ ํ๋ ์ด๋ฏธ์ง๊ฐ RGB ์ด๋ฏธ์ง์ผ ๋), ์ด๋ฏธ์ง๋ฅผ scale ๊ฐ๋งํผ ๊ณฑํด์ค
์ด๋ฏธ์ง์ ๋ชจ๋ ํฝ์ ๊ฐ์ ํฉ(sum)์ ๊ตฌํจ
l.biases[i]์ sum * trans ๊ฐ์ ๋ํด์ค์ผ๋ก์จ, ํธํฅ(bias) ๊ฐ์ trans๋งํผ ๋ํด์ค
get_weights
ํจ์ ์ด๋ฆ: get_weights
์ ๋ ฅ:
convolutional_layer l: ํฉ์ฑ๊ณฑ ๋ ์ด์ด ๊ฐ์ฒด
๋์:
ํฉ์ฑ๊ณฑ ๋ ์ด์ด์ ๊ฐ์ค์น๋ฅผ ๊ฐ์ ธ์์, ๊ฐ์ค์น ์ด๋ฏธ์ง๋ค์ ์์ฑ
์์ฑ๋ ๊ฐ์ค์น ์ด๋ฏธ์ง๋ค์ ์ ๊ทํ(normalize)
๊ฐ์ค์น ์ด๋ฏธ์ง๋ค์ ๋ฐํ
์ค๋ช :
ํจ์๋ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ํฉ์ฑ๊ณฑ ๋ ์ด์ด์ ๊ฐ์ค์น๋ฅผ ๊ฐ์ ธ์ ๊ฐ์ค์น ์ด๋ฏธ์ง๋ค์ ์์ฑํ๊ณ , ์์ฑ๋ ๊ฐ์ค์น ์ด๋ฏธ์ง๋ค์ ์ ๊ทํ(normalize)ํฉ๋๋ค.
์ ๊ทํ(normalize)๋, ์ด๋ฏธ์ง ํฝ์ ๊ฐ๋ค์ 0๊ณผ 1์ฌ์ด์ ๊ฐ์ผ๋ก ์กฐ์ ํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
์์ฑ๋ ๊ฐ์ค์น ์ด๋ฏธ์ง๋ค์ ํฌ์ธํฐ ๋ฐฐ์ด๋ก ๋ฐํ๋ฉ๋๋ค.
visualize_convolutional_layer
ํจ์ ์ด๋ฆ: visualize_convolutional_layer
์ ๋ ฅ:
convolutional_layer l: ์๊ฐํํ ํฉ์ฑ๊ณฑ ๋ ์ด์ด
char *window: ์๊ฐํํ ์๋์ฐ ์ด๋ฆ
image *prev_weights: ์ด์ ๊ฐ์ค์น ์ด๋ฏธ์ง ํฌ์ธํฐ
๋์:
ํฉ์ฑ๊ณฑ ๋ ์ด์ด์ ๊ฐ์ค์น ์ด๋ฏธ์ง์ ์ถ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์๊ฐํํ๊ณ ,
์๊ฐํ๋ ๊ฐ์ค์น ์ด๋ฏธ์ง๋ฅผ ๋ฐํํ๋ค.
์ค๋ช :
convolutional_layer ๊ตฌ์กฐ์ฒด์ ์ ์ฅ๋ ๊ฐ์ค์น ๊ฐ๋ค์ ์ด๋ฏธ์ง๋ก ๋ณํํ๋ค.
๋ณํ๋ ์ด๋ฏธ์ง๋ค์ ์๋์ฐ์ ์๊ฐํํ์ฌ ๋ณด์ฌ์ค๋ค.
ํฉ์ฑ๊ณฑ ๋ ์ด์ด์ ์ถ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ด๋ฏธ์ง collapse๋ฅผ ํตํด ํ ์ฅ์ผ๋ก ๋ง๋ค์ด์ ๋ณด์ฌ์ค๋ค.
๋ฐํ๋๋ single_weights ํฌ์ธํฐ๋ ๊ฐ์ค์น ์ด๋ฏธ์ง๋ฅผ ๋ด๊ณ ์๋ ์ด๋ฏธ์ง ๋ฐฐ์ด์ด๋ค.
Last updated
Was this helpful?