githubEdit

local_layer

local_out_height

int local_out_height(local_layer l)
{
    int h = l.h;
    if (!l.pad) h -= l.size;
    else h -= 1;
    return h/l.stride + 1;
}

ν•¨μˆ˜ 이름: local_out_height

μž…λ ₯:

  • local_layer l: 둜컬 λ ˆμ΄μ–΄ ꡬ쑰체

λ™μž‘:

  • μž…λ ₯으둜 받은 둜컬 λ ˆμ΄μ–΄μ˜ 높이(height)에 λŒ€ν•œ 좜λ ₯ 높이(output height)λ₯Ό κ³„μ‚°ν•œλ‹€.

  • νŒ¨λ”©(padding)이 μ μš©λ˜μ–΄ μžˆμ§€ μ•Šμ€ 경우 ν•„ν„°(filter) 크기(size)만큼 높이λ₯Ό 쀄이고, νŒ¨λ”©μ΄ 적용된 경우 λ†’μ΄μ—μ„œ 1만큼 λΉΌμ€€λ‹€.

  • 그리고 λ‚˜μ„œ 좜λ ₯ 높이λ₯Ό κ³„μ‚°ν•˜κΈ° μœ„ν•΄ stride둜 λ‚˜λˆ„κ³  1을 더해쀀닀.

μ„€λͺ…:

  • 이 ν•¨μˆ˜λŠ” 둜컬 λ ˆμ΄μ–΄μ˜ 좜λ ₯ 높이λ₯Ό κ³„μ‚°ν•˜λŠ” ν•¨μˆ˜λ‘œ, 필터와 μž…λ ₯ λ°μ΄ν„°μ˜ 크기, μŠ€νŠΈλΌμ΄λ“œ λ“±μ˜ 정보λ₯Ό μ΄μš©ν•΄ κ³„μ‚°ν•œλ‹€.

  • 이 계산은 둜컬 λ ˆμ΄μ–΄μ˜ μˆœμ „νŒŒ(forward propagation) λ‹¨κ³„μ—μ„œ ν•„μš”ν•˜λ©°, 좜λ ₯ 높이λ₯Ό κ³„μ‚°ν•˜λŠ” 것은 좜λ ₯ λ°μ΄ν„°μ˜ 크기λ₯Ό κ²°μ •ν•˜λŠ” μ€‘μš”ν•œ μš”μ†Œ 쀑 ν•˜λ‚˜μ΄λ‹€.

local_out_width

ν•¨μˆ˜ 이름: local_out_width

μž…λ ₯:

  • local_layer l (둜컬 λ ˆμ΄μ–΄ ꡬ쑰체)

λ™μž‘:

  • 둜컬 λ ˆμ΄μ–΄μ˜ 좜λ ₯ λ„ˆλΉ„λ₯Ό κ³„μ‚°ν•˜μ—¬ λ°˜ν™˜ν•©λ‹ˆλ‹€.

μ„€λͺ…:

  • μž…λ ₯ 이미지에 λŒ€ν•΄ 둜컬 필터링을 μˆ˜ν–‰ν•œ ν›„ 좜λ ₯ μ΄λ―Έμ§€μ˜ λ„ˆλΉ„λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€.

  • λ„ˆλΉ„λŠ” νŒ¨λ”©μ΄ 적용된 경우 μž…λ ₯ λ„ˆλΉ„μ—μ„œ ν•„ν„° 크기λ₯Ό λΊ€ 값에 1을 λ”ν•œ ν›„, μŠ€νŠΈλΌμ΄λ“œλ‘œ λ‚˜λˆ„μ–΄ κ³„μ‚°λ©λ‹ˆλ‹€.

forward_local_layer

ν•¨μˆ˜ 이름: forward_local_layer

μž…λ ₯:

  • const local_layer l

  • network net

λ™μž‘:

  • 둜컬 λ ˆμ΄μ–΄μ˜ μˆœμ „νŒŒ 연산을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  • μž…λ ₯ 데이터λ₯Ό im2col λ°©μ‹μœΌλ‘œ μ „μ²˜λ¦¬ν•˜κ³ , μ»€λ„κ³Όμ˜ 행렬곱을 κ³„μ‚°ν•˜μ—¬ 좜λ ₯값을 μ–»μŠ΅λ‹ˆλ‹€.

  • λ§ˆμ§€λ§‰μœΌλ‘œ ν™œμ„±ν™” ν•¨μˆ˜λ₯Ό μ μš©ν•©λ‹ˆλ‹€.

μ„€λͺ…:

  • l: 둜컬 λ ˆμ΄μ–΄μ˜ 정보λ₯Ό λ‹΄κ³  μžˆλŠ” ꡬ쑰체

  • net: λ„€νŠΈμ›Œν¬ 정보λ₯Ό λ‹΄κ³  μžˆλŠ” ꡬ쑰체

  • out_h: 좜λ ₯κ°’μ˜ 높이

  • out_w: 좜λ ₯κ°’μ˜ λ„ˆλΉ„

  • locations: 좜λ ₯κ°’μ˜ 전체 크기

  • biases: 둜컬 λ ˆμ΄μ–΄μ˜ 편ν–₯κ°’

  • input: λ„€νŠΈμ›Œν¬μ˜ μž…λ ₯ 데이터

  • output: 둜컬 λ ˆμ΄μ–΄μ˜ 좜λ ₯κ°’

  • weights: 둜컬 λ ˆμ΄μ–΄μ˜ κ°€μ€‘μΉ˜κ°’

  • a: 컀널과 μž…λ ₯값을 ν–‰λ ¬κ³±ν•˜κΈ° μœ„ν•œ λ°°μ—΄

  • b: im2col λ°©μ‹μœΌλ‘œ μ „μ²˜λ¦¬λœ μž…λ ₯κ°’

  • c: 좜λ ₯값을 μ €μž₯ν•˜κΈ° μœ„ν•œ λ°°μ—΄

  • m, n, k: 행렬곱을 μœ„ν•œ λ§€κ°œλ³€μˆ˜

  • activate_array: ν™œμ„±ν™” ν•¨μˆ˜λ₯Ό μ μš©ν•˜λŠ” ν•¨μˆ˜

backward_local_layer

ν•¨μˆ˜ 이름: backward_local_layer

μž…λ ₯:

  • local_layer ꡬ쑰체 l

  • network ꡬ쑰체 net

λ™μž‘:

  • local_layerλ₯Ό μ—­μ „νŒŒν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

  • 좜λ ₯값에 λŒ€ν•œ 델타λ₯Ό κ³„μ‚°ν•˜κ³ , λ°”μ΄μ–΄μŠ€ μ—…λ°μ΄νŠΈ 및 κ°€μ€‘μΉ˜ μ—…λ°μ΄νŠΈλ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  • 이후 μž…λ ₯값에 λŒ€ν•œ 델타λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€.

μ„€λͺ…:

  • l.delta: 좜λ ₯κ°’μ˜ 델타λ₯Ό μ €μž₯ν•˜λŠ” λ°°μ—΄

  • l.bias_updates: λ°”μ΄μ–΄μŠ€ μ—…λ°μ΄νŠΈλ₯Ό μ €μž₯ν•˜λŠ” λ°°μ—΄

  • l.weight_updates: κ°€μ€‘μΉ˜ μ—…λ°μ΄νŠΈλ₯Ό μ €μž₯ν•˜λŠ” λ°°μ—΄

  • net.workspace: im2col μ—°μ‚°μ˜ κ²°κ³Όλ₯Ό μ €μž₯ν•˜λŠ” λ°°μ—΄

  • net.delta: 이전 λ ˆμ΄μ–΄μ˜ 델타λ₯Ό μ €μž₯ν•˜λŠ” λ°°μ—΄

  1. 좜λ ₯값에 λŒ€ν•œ 델타λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€.

  2. λͺ¨λ“  λ°°μΉ˜μ— λŒ€ν•΄ λ°”μ΄μ–΄μŠ€ μ—…λ°μ΄νŠΈλ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  3. λͺ¨λ“  λ°°μΉ˜μ— λŒ€ν•΄ im2col 연산을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  4. λͺ¨λ“  배치 및 μœ„μΉ˜μ— λŒ€ν•΄ κ°€μ€‘μΉ˜ μ—…λ°μ΄νŠΈλ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  5. 이전 λ ˆμ΄μ–΄μ˜ 델타λ₯Ό κ³„μ‚°ν•˜κ³  net.delta 배열에 μ €μž₯ν•©λ‹ˆλ‹€.

update_local_layer

ν•¨μˆ˜ 이름: update_local_layer

μž…λ ₯:

  • local_layer l: 둜컬 λ ˆμ΄μ–΄ 객체

  • update_args a: μ—…λ°μ΄νŠΈ 인자 객체

λ™μž‘:

  • 둜컬 λ ˆμ΄μ–΄μ˜ κ°€μ€‘μΉ˜μ™€ 편ν–₯을 μ—…λ°μ΄νŠΈν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

  • μ—…λ°μ΄νŠΈλŠ” 경사 ν•˜κ°•λ²•μ„ μ‚¬μš©ν•˜μ—¬ μˆ˜ν–‰λ©λ‹ˆλ‹€.

  • 편ν–₯은 배치 크기둜 λ‚˜λˆˆ ν•™μŠ΅λ₯ κ³Ό λͺ¨λ©˜ν…€μ„ μ‚¬μš©ν•˜μ—¬ μ—…λ°μ΄νŠΈν•˜κ³ , κ°€μ€‘μΉ˜λŠ” ν•™μŠ΅λ₯ κ³Ό κ°€μ€‘μΉ˜ 감쇠, λͺ¨λ©˜ν…€μ„ μ‚¬μš©ν•˜μ—¬ μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.

μ„€λͺ…:

  • local_layer: 둜컬 λ ˆμ΄μ–΄ 객체둜, 둜컬 λ ˆμ΄μ–΄μ˜ 좜λ ₯, κ°€μ€‘μΉ˜, 편ν–₯ λ“±μ˜ 정보λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.

  • update_args: μ—…λ°μ΄νŠΈ 인자 객체둜, ν•™μŠ΅λ₯ , λͺ¨λ©˜ν…€, κ°€μ€‘μΉ˜ 감쇠, 배치 크기 λ“±μ˜ μ—…λ°μ΄νŠΈμ— ν•„μš”ν•œ 정보λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.

  • axpy_cpu(): 벑터 λ§μ…ˆκ³Ό 슀칼라 곱을 μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

  • scal_cpu(): 벑터λ₯Ό 슀칼라둜 κ³±ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

make_local_layer

ν•¨μˆ˜ 이름: make_local_layer

μž…λ ₯:

  • int batch: 배치 크기

  • int h: μž…λ ₯ 이미지 높이

  • int w: μž…λ ₯ 이미지 λ„ˆλΉ„

  • int c: μž…λ ₯ 이미지 채널 수

  • int n: ν•„ν„° 수

  • int size: ν•„ν„° 크기

  • int stride: μŠ€νŠΈλΌμ΄λ“œ

  • int pad: νŒ¨λ”©

  • ACTIVATION activation: ν™œμ„±ν™” ν•¨μˆ˜

λ™μž‘:

  • 둜컬 λ ˆμ΄μ–΄λ₯Ό μƒμ„±ν•˜κ³  μ΄ˆκΈ°ν™”ν•œ ν›„ λ°˜ν™˜ν•œλ‹€.

μ„€λͺ…:

  • 둜컬 λ ˆμ΄μ–΄λ₯Ό μ΄ˆκΈ°ν™”ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ νŒŒλΌλ―Έν„°λ₯Ό μž…λ ₯으둜 λ°›λŠ”λ‹€.

  • 둜컬 λ ˆμ΄μ–΄μ˜ 좜λ ₯ 크기와 ν•„μš”ν•œ λ©”λͺ¨λ¦¬λ₯Ό κ³„μ‚°ν•œλ‹€.

  • 둜컬 λ ˆμ΄μ–΄μ˜ κ°€μ€‘μΉ˜, 편ν–₯, 좜λ ₯, 델타, κ°€μ€‘μΉ˜ μ—…λ°μ΄νŠΈ, 편ν–₯ μ—…λ°μ΄νŠΈ 등을 μ €μž₯ν•  λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•œλ‹€.

  • κ°€μ€‘μΉ˜λŠ” sqrt(2./(sizesizec))둜 μŠ€μΌ€μΌλ§λœ κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”ν•˜λ©°, 편ν–₯은 0으둜 μ΄ˆκΈ°ν™”ν•œλ‹€.

  • 둜컬 λ ˆμ΄μ–΄μ˜ forward, backward, update ν•¨μˆ˜λ₯Ό μ„€μ •ν•œλ‹€.

  • μ΄ˆκΈ°ν™”λœ 둜컬 λ ˆμ΄μ–΄λ₯Ό λ°˜ν™˜ν•œλ‹€.

Last updated

Was this helpful?