crnn_layer

cnnκ³Ό rnn을 κ²°ν•©ν•œ layer μž…λ‹ˆλ‹€.

rnnμ—μ„œ fully connected 연산을 convolutional μ—°μ‚°μœΌλ‘œ λ°”λ€Œμ–΄μ§„ 것 외에 λ”±νžˆ λ³€ν™”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

increment_layer

static void increment_layer(layer *l, int steps)
{
    int num = l->outputs*l->batch*steps;
    l->output += num;
    l->delta += num;
    l->x += num;
    l->x_norm += num;
}

ν•¨μˆ˜ 이름: increment_layer

μž…λ ₯:

  • layer 포인터 l

  • int steps

λ™μž‘:

  • l의 output, delta, x, x_norm 포인터λ₯Ό steps * l->outputs * l->batch 만큼 μ¦κ°€μ‹œν‚΄

μ„€λͺ…:

  • 이 ν•¨μˆ˜λŠ” λ―Έλ‹ˆλ°°μΉ˜ 처리λ₯Ό μœ„ν•΄ ν•„μš”ν•œ ν•¨μˆ˜ 쀑 ν•˜λ‚˜λ‘œ, 각 λ ˆμ΄μ–΄μ˜ 포인터λ₯Ό λ―Έλ‹ˆλ°°μΉ˜μ— 따라 적절히 μ΄λ™μ‹œμΌœμ£ΌλŠ” 역할을 ν•©λ‹ˆλ‹€.

  • μ΄λ™μ‹œμΌœμ•Ό ν•˜λŠ” 양은 steps * l->outputs * l->batch 둜 κ³„μ‚°λ©λ‹ˆλ‹€.

  • 이 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ ν•œ λ²ˆμ— μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” λ―Έλ‹ˆλ°°μΉ˜μ˜ 크기λ₯Ό μ‘°μ ˆν•  수 μžˆμŠ΅λ‹ˆλ‹€.

forward_crnn_layer

ν•¨μˆ˜ 이름: forward_crnn_layer

μž…λ ₯:

  • layer l: CRNN λ ˆμ΄μ–΄

  • network net: λ ˆμ΄μ–΄κ°€ μ†ν•œ λ„€νŠΈμ›Œν¬

λ™μž‘:

  • CRNN λ ˆμ΄μ–΄μ˜ forward 연산을 μˆ˜ν–‰ν•œλ‹€.

  • μž…λ ₯ 데이터λ₯Ό ν•œ μŠ€ν…μ”© μ²˜λ¦¬ν•˜λ©°, μž…λ ₯ λ ˆμ΄μ–΄, self λ ˆμ΄μ–΄, 좜λ ₯ λ ˆμ΄μ–΄λ₯Ό μ°¨λ‘€λŒ€λ‘œ κ±°μΉœλ‹€.

  • 각 μŠ€ν…μ—μ„œ μž…λ ₯, self λ ˆμ΄μ–΄μ˜ 좜λ ₯을 λ”ν•˜μ—¬ stateλ₯Ό κ΅¬ν•˜κ³ , 좜λ ₯ λ ˆμ΄μ–΄λ₯Ό 거쳐 좜λ ₯을 κ³„μ‚°ν•œλ‹€.

  • 각 μŠ€ν…μ—μ„œ μ‚¬μš©λœ λ ˆμ΄μ–΄μ˜ 인덱슀λ₯Ό 1μ”© μ¦κ°€μ‹œν‚¨λ‹€.

μ„€λͺ…:

  • CRNN(Convolutional Recurrent Neural Network)은 μ»¨λ³Όλ£¨μ…˜ λ ˆμ΄μ–΄μ™€ μˆœν™˜ λ ˆμ΄μ–΄κ°€ κ²°ν•©λœ ꡬ쑰λ₯Ό κ°€μ§€λŠ” λ”₯λŸ¬λ‹ λͺ¨λΈμ΄λ‹€.

  • 이 ν•¨μˆ˜λŠ” CRNN λ ˆμ΄μ–΄μ˜ forward 연산을 μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.

  • μž…λ ₯μœΌλ‘œλŠ” CRNN λ ˆμ΄μ–΄μ™€ λ ˆμ΄μ–΄κ°€ μ†ν•œ λ„€νŠΈμ›Œν¬κ°€ λ“€μ–΄μ˜¨λ‹€.

  • ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλŠ” μž…λ ₯ 데이터λ₯Ό ν•œ μŠ€ν…μ”© μ²˜λ¦¬ν•˜λ©°, μž…λ ₯ λ ˆμ΄μ–΄, self λ ˆμ΄μ–΄, 좜λ ₯ λ ˆμ΄μ–΄λ₯Ό μ°¨λ‘€λŒ€λ‘œ κ±°μΉœλ‹€.

  • 각 μŠ€ν…μ—μ„œ μž…λ ₯, self λ ˆμ΄μ–΄μ˜ 좜λ ₯을 λ”ν•˜μ—¬ stateλ₯Ό κ΅¬ν•˜κ³ , 좜λ ₯ λ ˆμ΄μ–΄λ₯Ό 거쳐 좜λ ₯을 κ³„μ‚°ν•œλ‹€.

  • ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλŠ” 각 μŠ€ν…μ—μ„œ μ‚¬μš©λœ λ ˆμ΄μ–΄μ˜ 인덱슀λ₯Ό 1μ”© μ¦κ°€μ‹œν‚¨λ‹€.

backward_crnn_layer

ν•¨μˆ˜ 이름: backward_crnn_layer

μž…λ ₯:

  • layer l: μ—­μ „νŒŒλ₯Ό μˆ˜ν–‰ν•  CRNN λ ˆμ΄μ–΄

  • network net: λ ˆμ΄μ–΄λ₯Ό ν¬ν•¨ν•˜λŠ” λ„€νŠΈμ›Œν¬

λ™μž‘:

  • CRNN λ ˆμ΄μ–΄μ˜ μ—­μ „νŒŒλ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  • λ¨Όμ €, μž…λ ₯ λ ˆμ΄μ–΄, self λ ˆμ΄μ–΄, output λ ˆμ΄μ–΄μ— λŒ€ν•œ 포인터λ₯Ό μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.

  • 그런 λ‹€μŒ, l.steps 번 λ°˜λ³΅ν•˜λ©΄μ„œ 각 μŠ€ν…μ—μ„œ λ‹€μŒμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  • μž…λ ₯ λ ˆμ΄μ–΄μ™€ self λ ˆμ΄μ–΄μ˜ 좜λ ₯ 값을 ν•©μ³μ„œ l.state에 μ €μž₯ν•œ ν›„, 좜λ ₯ λ ˆμ΄μ–΄μ˜ μ—­μ „νŒŒλ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  • κ·Έ ν›„, self λ ˆμ΄μ–΄μ˜ μ—­μ „νŒŒλ₯Ό μˆ˜ν–‰ν•˜κ³ , 이전 μŠ€ν…μ˜ self λ ˆμ΄μ–΄ μ—…λ°μ΄νŠΈ 델타λ₯Ό ν˜„μž¬ μŠ€ν…μ˜ μž…λ ₯ λ ˆμ΄μ–΄ μ—…λ°μ΄νŠΈ λΈνƒ€λ‘œ λ³΅μ‚¬ν•©λ‹ˆλ‹€.

  • λ§ˆμ§€λ§‰μœΌλ‘œ, ν˜„μž¬ μŠ€ν…μ˜ μž…λ ₯ 데이터에 λŒ€ν•œ μ—­μ „νŒŒλ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.

μ„€λͺ…:

  • 이 ν•¨μˆ˜λŠ” CRNN λ ˆμ΄μ–΄μ˜ μ—­μ „νŒŒλ₯Ό μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜λ‘œ, λ„€νŠΈμ›Œν¬κ°€ ν•™μŠ΅ 쀑인 κ²½μš°μ— μ‚¬μš©λ©λ‹ˆλ‹€.

  • l은 μ—­μ „νŒŒλ₯Ό μˆ˜ν–‰ν•  λ ˆμ΄μ–΄λ₯Ό λ‚˜νƒ€λ‚΄λŠ” layer ꡬ쑰체이며, net은 λ ˆμ΄μ–΄λ₯Ό ν¬ν•¨ν•˜λŠ” λ„€νŠΈμ›Œν¬λ₯Ό λ‚˜νƒ€λ‚΄λŠ” network κ΅¬μ‘°μ²΄μž…λ‹ˆλ‹€.

  • 이 ν•¨μˆ˜λŠ” 각 λ ˆμ΄μ–΄μ˜ 좜λ ₯ 값을 κ³„μ‚°ν•˜κ³  델타 값을 μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.

update_crnn_layer

ν•¨μˆ˜ 이름: update_crnn_layer

μž…λ ₯:

  • layer l: μ—…λ°μ΄νŠΈν•  CRNN λ ˆμ΄μ–΄

  • update_args a: μ—…λ°μ΄νŠΈμ— μ‚¬μš©ν•  μΈμžλ“€ (learning rate, momentum λ“±)

λ™μž‘:

  • μ£Όμ–΄μ§„ μ—…λ°μ΄νŠΈ μΈμžλ“€μ„ μ‚¬μš©ν•˜μ—¬ μž…λ ₯으둜 μ£Όμ–΄μ§„ CRNN λ ˆμ΄μ–΄μ˜ input_layer, self_layer, output_layerλ₯Ό 각각 μ—…λ°μ΄νŠΈν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

  • update_convolutional_layer ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ 각 λ ˆμ΄μ–΄λ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.

μ„€λͺ…:

  • CRNN λ ˆμ΄μ–΄λŠ” μž…λ ₯ μ‹œν€€μŠ€λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ μ»¨λ³Όλ£¨μ…˜ λ ˆμ΄μ–΄μ™€ RNN λ ˆμ΄μ–΄μ˜ κ²°ν•©μž…λ‹ˆλ‹€.

  • 이 ν•¨μˆ˜λŠ” κ·Έ 쀑 μ»¨λ³Όλ£¨μ…˜ λ ˆμ΄μ–΄λ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

  • 이 ν•¨μˆ˜λŠ” μž…λ ₯으둜 받은 update_argsλ₯Ό μ‚¬μš©ν•˜μ—¬ 각 λ ˆμ΄μ–΄μ˜ νŒŒλΌλ―Έν„°λ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.

  • λ¨Όμ €, input_layer, self_layer, output_layer 각각에 λŒ€ν•΄ update_convolutional_layer ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ κ·Έ λ ˆμ΄μ–΄μ˜ νŒŒλΌλ―Έν„°λ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.

  • 이 ν•¨μˆ˜λŠ” μ»¨λ³Όλ£¨μ…˜ λ ˆμ΄μ–΄μ˜ νŒŒλΌλ―Έν„°λ₯Ό μ—…λ°μ΄νŠΈν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

make_crnn_layer

ν•¨μˆ˜ 이름: make_crnn_layer

μž…λ ₯:

  • int batch: 배치 크기

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

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

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

  • int hidden_filters: μˆ¨κ²¨μ§„ λ ˆμ΄μ–΄μ—μ„œ μ‚¬μš©λ˜λŠ” ν•„ν„° 수

  • int output_filters: 좜λ ₯ λ ˆμ΄μ–΄μ—μ„œ μ‚¬μš©λ˜λŠ” ν•„ν„° 수

  • int steps: μ‹œν€€μŠ€ 길이 (μŠ€ν… 수)

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

  • int batch_normalize: 배치 μ •κ·œν™” μ—¬λΆ€

λ™μž‘:

  • CRNN λ ˆμ΄μ–΄λ₯Ό λ§Œλ“€κ³  μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.

μ„€λͺ…:

  • 이 ν•¨μˆ˜λŠ” μž…λ ₯ μ΄λ―Έμ§€μ˜ 높이, λ„ˆλΉ„, 채널 수 및 μ‹œν€€μŠ€ 길이와 같은 인수λ₯Ό μ‚¬μš©ν•˜μ—¬ CRNN(Convolutional Recurrent Neural Network) λ ˆμ΄μ–΄λ₯Ό λ§Œλ“­λ‹ˆλ‹€.

  • 이 λ ˆμ΄μ–΄λŠ” μˆ¨κ²¨μ§„ λ ˆμ΄μ–΄μ™€ 좜λ ₯ λ ˆμ΄μ–΄ 각각에 λŒ€ν•΄ 3x3 컀널과 같은 ν•˜μ΄νΌνŒŒλΌλ―Έν„°λ₯Ό μ‚¬μš©ν•œ 1D μ»¨λ³Όλ£¨μ…˜ λ ˆμ΄μ–΄λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.

  • 이 ν•¨μˆ˜λŠ” μ΄λŸ¬ν•œ λ ˆμ΄μ–΄λ₯Ό λ§Œλ“€κ³  μ΄ˆκΈ°ν™”ν•œ ν›„ CRNN λ ˆμ΄μ–΄λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

Last updated

Was this helpful?