[ํ˜ผ๊ณตํ•™์Šต๋‹จ 14๊ธฐ] ๊ฐ•์•„์ง€ ๊ณ ์–‘์ด ์‚ฌ์ง„ ๋ถ„๋ฅ˜ ์‹ค์Šต(AlexNet, VGGNet, ResNet)

2025. 7. 20. 23:36ยท๐Ÿ“šbook

 

๊ธฐ๋ณธ ์ˆ™์ œ

VGGNet

43.3% tabby

 

ResNet

86.8% tabby

 

์ถ”๊ฐ€ ์ˆ™์ œ

AlexNet ๊ตฌ์กฐ


 

๐Ÿ–ผ๏ธAlexNet

2012๋…„ ImageNet ILSVRC์—์„œ ์šฐ์Šนํ•œ ๋ชจ๋ธ. 

LeNet์ด ํ•ฉ์„ฑ๊ณฑ ์‹ ๊ฒฝ๋ง ๊ฐœ๋…์„ ์ œ์‹œํ•˜๊ธฐ๋Š” ํ–ˆ์ง€๋งŒ, ๊ณง๋ฐ”๋กœ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๋ถ„์•ผ์˜ ์ฃผ๋ฅ˜๋กœ ์ž๋ฆฌ๋งค๊น€ํ•˜์ง€๋Š” ๋ชปํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋˜ ์ค‘ AlexNet์ด ์••๋„์ ์ธ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ฃผ๋ฉด์„œ, CNN ๊ธฐ๋ฐ˜ ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์˜ ํšจ์šฉ์„ฑ์„ ์ž…์ฆํ•ด๋ƒ‡๋‹ค. 

 

๊ตฌ์กฐ ์š”์•ฝ

- ์ž…๋ ฅ: 224x224x3 ์ด๋ฏธ์ง€
- ์ด 8๊ฐœ์˜ ์ธต(5๊ฐœ Conv, 3๊ฐœ FC)
- ReLU
- ๋“œ๋กญ์•„์›ƒ
- ๋ฐ์ดํ„ฐ ์ฆ๊ฐ•(ํฌ๋กญ, ํ”Œ๋ฆฝ ๋“ฑ)
- ๋‘ ๊ฐœ์˜ GPU๋กœ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ

 

AlexNet vs LeNet-5

  1. AlexNet ๋ชจ๋ธ์€ LeNet-5 ๋ชจ๋ธ๋ณด๋‹ค ๋งŽ์€ ์ธต์„ ์‚ฌ์šฉํ•œ๋‹ค.
  2. AlexNet ๋ชจ๋ธ์€ LeNet-5 ๋ชจ๋ธ์—์„œ ์‚ฌ์šฉํ•œ ํ™œ์„ฑํ™” ํ•จ์ˆ˜์ธ ์‹œ๊ทธ๋ชจ์ด๋“œ ํ•จ์ˆ˜ ๋Œ€์‹  ๋ ๋ฃจ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • gradient vanishing problem ํ•ด๊ฒฐ
  3. ํ‰๊ท  ํ’€๋ง ๋Œ€์‹  ์ตœ๋Œ€ ํ’€๋ง์„ ์‚ฌ์šฉํ•œ๋‹ค.
  4. AlexNet ๋ชจ๋ธ์€ ๋ฐ€์ง‘์ธต์˜ ๊ณผ๋Œ€ ์ ํ•ฉ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์œ ๋‹›์˜ ์ถœ๋ ฅ์„ ๋žœ๋คํ•˜๊ฒŒ ๋„๋Š” ๋“œ๋กญ์•„์›ƒ์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

AlexNet ๋ชจ๋ธ ์‹ค์Šต

import keras
from keras import layers

alexnet = keras.Sequential()
alexnet.add(layers.Input(shape=(227, 227, 3)))
alexnet.add(layers.Conv2D(filters=96, kernel_size=11, strides=4,
                          activation='relu'))
alexnet.add(layers.MaxPooling2D(pool_size=3, strides=2))
alexnet.add(layers.Conv2D(filters=256, kernel_size=5, padding='same',
                          activation='relu'))
alexnet.add(layers.MaxPooling2D(pool_size=3, strides=2))
alexnet.add(layers.Conv2D(filters=384, kernel_size=3, padding='same',
                          activation='relu'))
alexnet.add(layers.Conv2D(filters=384, kernel_size=3, padding='same',
                          activation='relu'))
alexnet.add(layers.Conv2D(filters=256, kernel_size=3, padding='same',
                          activation='relu'))
alexnet.add(layers.MaxPooling2D(pool_size=3, strides=2))
alexnet.add(layers.Flatten())
alexnet.add(layers.Dense(4096, activation='relu'))
alexnet.add(layers.Dropout(0.5))
alexnet.add(layers.Dense(4096, activation='relu'))
alexnet.add(layers.Dropout(0.5))
alexnet.add(layers.Dense(1000, activation='softmax'))

alexnet.summary()


๐ŸงฉVGGNet

์˜ฅ์Šคํฌ๋“œ ๋Œ€ํ•™์˜ Visual Geometry Group์—์„œ ๋งŒ๋“  CNN ๋ชจ๋ธ, 2024๋…„ ์ด๋ฏธ์ง€๋„ท ๋Œ€ํšŒ ์šฐ์Šน

VGGNet์€ 3x3 Conv์™€ 2x2 Max pooling๋งŒ์œผ๋กœ ์ „์ฒด ๋ชจ๋ธ์„ ๊ตฌ์„ฑํ–ˆ๋‹ค. 3x3์„ ๋‘ ๋ฒˆ ์Œ“์œผ๋ฉด 5x5, ์„ธ ๋ฒˆ ์Œ“์œผ๋ฉด 7x7๊ณผ ๋™์ผํ•œ ์ˆ˜์šฉ ์˜์—ญ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„์„ ํ˜•์„ฑ ์ฆ๊ฐ€ + ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ์†Œ๋ผ๋Š” ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

 

๊ตฌ์กฐ ์š”์•ฝ

- Conv: ๋ชจ๋‘ 3x3, stride=1, padding=same
- Pooling: ๋ชจ๋‘ 2x2 max pooling
- ๊นŠ์ด: VGG-16 ๊ธฐ์ค€ Conv 13๊ฐœ + FC 1๊ฐœ
- ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆ˜๊ฐ€ ๋งŽ์•„์„œ ๋ฌด๊ฒ๊ณ  ๋А๋ฆผ

 

VGGNet ํŠน์ง•

  • ํ•ฉ์„ฑ๊ณฑ์ธต๊ณผ ํ’€๋ง์ธต์„ ๊ต๋Œ€๋กœ ๋ฐ˜๋ณตํ•˜๋Š” ๋Œ€์‹ , ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ํ•ฉ์„ฑ๊ณฑ์ธต์„ ์ ์šฉํ•œ ๋‹ค์Œ ํ’€๋ง์ธต์„ ์ ์šฉํ•œ๋‹ค.
  • ๋™์ผํ•œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•ฉ์„ฑ๊ณฑ์ธต๊ณผ ํ’€๋ง์ธต์˜ ๊ตฌ์กฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๋ธ”๋ก์„ ์ ์šฉํ•œ๋‹ค.
  • ํฐ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•˜๋‚˜์˜ ํ•ฉ์„ฑ๊ณฑ์ธต ๋Œ€์‹ , 3x3 ํฌ๊ธฐ์˜ ์ž‘์€ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•ฉ์„ฑ๊ณฑ์ธต์„ ์ ์šฉํ•œ๋‹ค.

VGGNet ์‹ค์Šต

vggnet = keras.Sequential()
vggnet.add(layers.Input(shape=(224, 224, 3)))

# 1, 2๋ฒˆ์งธ ๋ธ”๋ก
for n_filters in [64, 128]:
    for _ in range(2):
        vggnet.add(layers.Conv2D(filters=n_filters, kernel_size=3,
                                 padding='same', activation='relu'))
    vggnet.add(layers.MaxPooling2D(pool_size=2))

# 3, 4, 5๋ฒˆ์งธ ๋ธ”๋ก
for n_filters in [256, 512, 512]:
    for _ in range(3):
        vggnet.add(layers.Conv2D(filters=n_filters, kernel_size=3,
                                 padding='same', activation='relu'))
    vggnet.add(layers.MaxPooling2D(pool_size=2))

vggnet.add(layers.Flatten())
vggnet.add(layers.Dense(4096, activation='relu'))
vggnet.add(layers.Dense(4096, activation='relu'))
vggnet.add(layers.Dense(1000, activation='softmax'))

vggnet.summary()

 

๐Ÿ‘‰ AlexNet์€ ํ•ฉ์„ฑ๊ณฑ ์‹ ๊ฒฝ๋ง์„ ์‚ฌ์šฉํ•ด ์ปดํ“จํ„ฐ ๋น„์ „ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์˜ ์ „ํ™˜์ ์„ ๋งˆ๋ จํ–ˆ๋‹ค. VGGNet์€ ํ•ฉ์„ฑ๊ณฑ์ธต๊ณผ ํ’€๋ง์ธต์„ ํ•˜๋‚˜์˜ ๋ธ”๋ก์œผ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ๋ฐ˜๋ณตํ•˜๋Š” ๊ธฐ๋ฒ•์„ ๋„์ž…ํ–ˆ๊ณ , ์ด๋Ÿฐ ๋ฐ˜๋ณต ๊ตฌ์กฐ๋Š” ์ดํ›„ ํ•ฉ์„ฑ๊ณฑ ์‹ ๊ฒฝ๋ง๊ณผ ํŠธ๋žœ์Šคํฌ๋จธ๋ฅผ ๋น„๋กฏํ•œ ๋งŽ์€ ์‹ ๊ฒฝ๋ง ๊ตฌ์กฐ์— ์˜ํ–ฅ์„ ๋ฏธ์ณค๋‹ค.

ResNet

Degradation ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•˜ ์ž”์ฐจ ๋ธ”๋ก์„ ๋„์ž…ํ•œ ๋ชจ๋ธ

ResNet์€ ๋”ฅ๋Ÿฌ๋‹ ๊ตฌ์กฐ๊ฐ€ ๊นŠ์–ด์งˆ์ˆ˜๋ก ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์ด ๋‚˜๋น ์ง€๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ–ˆ๋‹ค. gradient vanishing, degradation gํ˜„์ƒ ๋ฌธ์ œ๋ฅผ ์ž”์ฐจ ์—ฐ๊ฒฐ๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

์‹ ๊ฒฝ๋ง์ด ํ•™์Šตํ•  ํ•จ์ˆ˜ H(x) ๋Œ€์‹ , ์ž…๋ ฅ์„ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ์ž”์ฐจ ํ•จ์ˆ˜ F(x) = H(x) - x ๋งŒ ํ•™์Šต์‹œํ‚ค๋ฉด ๋” ์‰ฝ๋‹ค.

Output = F(x) + x

 

์ž”์ฐจ ๋ธ”๋ก

์ž…๋ ฅ์„ ์ถœ๋ ฅ์— ์ง์ ‘ ์—ฐ๊ฒฐํ•˜๋Š” ์Šคํ‚ต ์—ฐ๊ฒฐ์„ ์ถ”๊ฐ€ํ•ด ๊ธฐ์šธ๊ธฐ ์†Œ์‹ค ๋ฌธ์ œ๋ฅผ ์™„ํ™”
Input x
  ↓
Conv → BN → ReLU → Conv → BN
  ↓               โ†˜
    ←โ”€โ”€โ”€โ”€โ”€โ”€โ”€(+x)โ”€โ”€โ”€โ”€โ”€โ”€โ”€
            ↓
          ReLU
  • Conv ๋’ค์— ํ•ญ์ƒ BatchNorm + ReLU
  • ๋ธ”๋ก์˜ ์ถœ๋ ฅ์€ F(x) + x
  • ์Šคํ‚ต ์—ฐ๊ฒฐ์„ ํ† ์•ป ๊ธฐ์šธ๊ธฐ ํ๋ฆ„์„ ์œ ์ง€ํ•˜๊ณ , ํ•™์Šต ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•œ๋‹ค. 

 

๋ณ‘๋ชฉ ๋ธ”๋ก

ResNet-50, ResNet-101 ๋“ฑ์—์„œ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆ˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด 1x1 -> 3x3 -> 1x1 ๊ตฌ์กฐ์˜ ๋ณ‘๋ชฉ ๋ธ”๋ก์„ ์‚ฌ์šฉํ•œ๋‹ค.

1x1 Conv (์ฑ„๋„ ๊ฐ์†Œ)
↓
3x3 Conv
↓
1x1 Conv (์ฑ„๋„ ๋ณต์›)
↓
+ ์ž…๋ ฅ x (skip)

์ด๋ ‡๊ฒŒ ์—ฐ์‚ฐ๋Ÿ‰์„ ์ค„์ด๋ฉด์„œ, ์ž”์ฐจ ์—ฐ๊ฒฐ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐฐ์น˜ ์ •๊ทœํ™”

์ž”์ฐจ ๋ธ”๋ก ๋‚ด์—์„œ ํ•™์Šต์˜ ์†๋„๋ฅผ ๋†’์ด๊ณ  ๋ชจ๋ธ์˜ ์•ˆ์ •์„ฑ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ฒ•

๊ฐ ๋ฏธ๋‹ˆ ๋ฐฐ์น˜์— ๋Œ€ํ•ด ํ‰๊ท  0, ๋ถ„์‚ฐ 1๋กœ ์ •๊ทœํ™”ํ•œ ๋’ค, ์Šค์ผ€์ผ๊ณผ ์‹œํ”„ํŠธ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋‹ค์‹œ ์กฐ์ •ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

์ˆ˜์‹

์ด๋ฅผ Conv ๋˜๋Š” FC ๋ ˆ์ด์–ด ๋’ค์— ๋„ฃ์œผ๋ฉด ํ•™์Šต ์†๋„ ์ฆ๊ฐ€ + ์ดˆ๊ธฐ๊ฐ’ ๋ฏผ๊ฐ๋„ ๊ฐ์†Œ ๊ฐ™์€ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ•๐Ÿˆ๊ฐ•์•„์ง€, ๊ณ ์–‘์ด ์‚ฌ์ง„ ๋ถ„๋ฅ˜ํ•˜๊ธฐ

๋“œ๋””์–ด ๊ฐ•์•„์ง€, ๊ณ ์–‘์ด ์‚ฌ์ง„ ๋ถ„๋ฅ˜ํ•˜๊ธฐ ์‹ค์Šต!

 

VGGNet์œผ๋กœ ๋ถ„๋ฅ˜

import keras

vggnet = keras.applications.VGG16()

!gdown 1xGkTT3uwYt4myj6eJJeYtdEFgTi2Sj8C

!unzip cat-dog-images.zip

from PIL import Image
dog_png = Image.open('images/dog.png')
display(dog_png)

import numpy as np
dog_array = np.array(dog_png)
dog_array.shape

from keras.applications import vgg16
vgg_prep_dog = vgg16.preprocess_input(dog_array)

predictions =vggnet.predict(vgg_prep_dog[np.newaxis, :])

max_index = np.argmax(predictions[0])
print(max_index, predictions[0][max_index])

import requests

url = "https://storage.googleapis.com/download.tensorflow.org/" + \
      "data/imagenet_class_index.json"
json_data = requests.get(url).json()

print(json_data[str(max_index)])

vgg16.decode_predictions(predictions)

vgg16.decode_predictions(predictions, top=1)

cat_png = Image.open('images/cat.png')
display(cat_png)

vgg_prep_cat = vgg16.preprocess_input(np.array(cat_png))
predictions = vggnet.predict(vgg_prep_cat[np.newaxis,:])
vgg16.decode_predictions(predictions)

 

๊ฒฐ๊ณผ:

- 43.3% tabby, 31.1% egyption_cat

 

ResNet์œผ๋กœ ๋ถ„๋ฅ˜

!gdown 1xGkTT3uwYt4myj6eJJeYtdEFgTi2Sj8C
!unzip cat-dog-images.zip

from PIL import Image
import numpy as np
from keras.applications import resnet

dog_png = Image.open('images/dog.png')
resnet_prep_dog = resnet.preprocess_input(np.array(dog_png))

resnet50 = keras.applications.ResNet50()
predictions = resnet50.predict(resnet_prep_dog[np.newaxis,:])

resnet.decode_predictions(predictions)

cat_png = Image.open('images/cat.png')
resnet_prep_cat = resnet.preprocess_input(np.array(cat_png))
predictions = resnet50.predict(resnet_prep_cat[np.newaxis,:])

resnet.decode_predictions(predictions)

 

๊ฒฐ๊ณผ:

- 86.8%% tabby

VGG16 ๋ชจ๋ธ๋ณด๋‹ค ๋” ๋†’์€ ์ˆ˜์ค€์˜ ์˜ˆ์ธก์„ ์ˆ˜ํ–‰ํ•œ๋‹ค!


์ด๋ฒˆ ์‹ค์Šต์„ ํ†ตํ•ด AlexNet, VGGNet, ResNet 3๊ฐœ์˜ ๋Œ€ํ‘œ์ ์ธ CNN ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ด๋ณด๋ฉด์„œ, ๊ฐ ๋ชจ๋ธ์ด ๊ฐ–๋Š” ๊ตฌ์กฐ์  ํŠน์ง•๊ณผ ํ•œ๊ณ„๋ฅผ ์ฒด๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

 

AlexNet์€ ๊นŠ์ด๊ฐ€ ์–•๊ณ  ๊ตฌ์กฐ๋„ ๋น„๊ต์  ๋‹จ์ˆœํ•œ ํŽธ์ด์ง€๋งŒ, ๋‹น์‹œ๋กœ์„œ๋Š” ํ˜์‹ ์ ์ด์—ˆ๋˜ ์—ฌ๋Ÿฌ ๊ธฐ์ˆ ์ด ์ง‘์•ฝ๋˜์–ด ์žˆ์—ˆ๋‹ค. ReLU ํ™œ์„ฑํ™” ํ•จ์ˆ˜ ๋„์ž…์ด๋‚˜ ๋“œ๋กญ์•„์›ƒ, ๋ฐ์ดํ„ฐ ์ฆ๊ฐ•์˜ ํ™œ์šฉ ๋“ฑ์€ ์ดํ›„ ๋งŽ์€ ๋ชจ๋ธ๋“ค์—๊ฒŒ ์˜ํ–ฅ์„ ์ฃผ์—ˆ๋‹ค. ๋‹ค๋งŒ ์ปค๋„ ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ , ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆ˜๊ฐ€ ๋งŽ์•„ ๊ณ„์‚ฐ๋Ÿ‰์ด ๋ถˆํ•„์š”ํ•˜๊ฒŒ ํฐ ๋ถ€๋ถ„์€ ํ•œ๊ณ„๋กœ ๋А๊ปด์กŒ๋‹ค.

 

VGGNet์€ AlexNet์˜ ๋‹จ์ ์„ ๊ฐœ์„ ํ•˜๋ฉฐ, ๋™์ผํ•œ 3x3 ์ปค๋„์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์Œ“์•„ ๊นŠ์ด๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋˜์—ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ชจ๋ธ ๊ตฌ์กฐ๊ฐ€ ํ›จ์”ฌ ๋” ์ผ๊ด€๋˜๊ณ  ๋‹จ์ˆœํ•ด์กŒ๊ณ , ์„ฑ๋Šฅ๋„ ํ–ฅ์ƒ๋˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊นŠ์ด๊ฐ€ ๊นŠ์–ด์ง€๋ฉด์„œ ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆ˜๊ฐ€ ๊ธ‰๊ฒฉํžˆ ๋Š˜์–ด๋‚˜๊ณ , ๊ณ„์‚ฐ๋Ÿ‰ ์—ญ์‹œ ๋งค์šฐ ์ปค์ง„๋‹ค๋Š” ์ ์€ ์‹ค์šฉ์ ์ธ ์ธก๋ฉด์—์„œ ๋ถ€๋‹ด์ด ๋˜์—ˆ๋‹ค.

 

ResNet์€ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•œ ์‹œ๋„๋กœ, ์ž”์ฐจ ํ•™์Šต์ด๋ผ๋Š” ๊ฐœ๋…์„ ๋„์ž…ํ–ˆ๋‹ค. ์ด๋Š” ๋„คํŠธ์›Œํฌ๊ฐ€ ๊นŠ์–ด์งˆ์ˆ˜๋ก ๋ฐœ์ƒํ•˜๋Š” ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉฐ, ์‹ค์งˆ์ ์œผ๋กœ ๋” ๊นŠ์€ ๋„คํŠธ์›Œํฌ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์—ˆ๋‹ค. ๊ตฌํ˜„ ๊ด€์ ์—์„œ๋„ skip connection๋งŒ ์ž˜ ์ ์šฉํ•˜๋ฉด, ๋น„๊ต์  ๋ณต์žกํ•˜์ง€ ์•Š๊ฒŒ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋ผ๋Š” ์ ์ด ์ธ์ƒ ๊นŠ์—ˆ๋‹ค.

 

์„ธ ๋ชจ๋ธ์„ ๋น„๊ตํ•ด ๋ณด๋ฉด, ๊นŠ์ด์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜์ง€๋งŒ ๋‹จ์ˆœํžˆ ์ธต์„ ๋งŽ์ด ์Œ“๋Š”๋‹ค๊ณ  ํ•ด์„œ ๋ฌด์กฐ๊ฑด ์ข‹์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜๋Š” ์—†๋‹ค๋Š” ์ ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•™์Šต ์•ˆ์ •์„ฑ๊ณผ ๊ณ„์‚ฐ ํšจ์œจ์„ฑ๋„ ํ•จ๊ป˜ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ตํ›ˆ์„ ์–ป์Œ

'๐Ÿ“šbook' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[npm deep dive] ์™„๋… ์ฑŒ๋ฆฐ์ง€-์™„๋… ๋ชปํ•œ ํ›„๊ธฐ  (12) 2025.07.23
[Luvit ํ•œ๋‹ฌ ์Šคํ„ฐ๋””] ์ƒˆ๋กœ์šด ์›น ๊ฐœ๋ฐœ์˜ ์‹œ์ž‘ ์Šค๋ฒจํŠธ #3  (1) 2025.07.20
[ํ˜ผ๊ณตํ•™์Šต๋‹จ 14๊ธฐ] LeNet ์‹ค์Šต-Fashoin MNIST ๋ถ„๋ฅ˜ ์‹ค์Šต  (3) 2025.07.13
[Luvit ํ•œ๋‹ฌ ์Šคํ„ฐ๋””] ์ƒˆ๋กœ์šด ์›น ๊ฐœ๋ฐœ์˜ ์‹œ์ž‘ ์Šค๋ฒจํŠธ #2  (8) 2025.07.13
[ํ˜ผ๊ณตํ•™์Šต๋‹จ 14๊ธฐ] CNN ๊ตฌ์กฐ์™€ ๋™์ž‘ ์›๋ฆฌ์˜ ์ดํ•ด  (4) 2025.07.06
'๐Ÿ“šbook' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [npm deep dive] ์™„๋… ์ฑŒ๋ฆฐ์ง€-์™„๋… ๋ชปํ•œ ํ›„๊ธฐ
  • [Luvit ํ•œ๋‹ฌ ์Šคํ„ฐ๋””] ์ƒˆ๋กœ์šด ์›น ๊ฐœ๋ฐœ์˜ ์‹œ์ž‘ ์Šค๋ฒจํŠธ #3
  • [ํ˜ผ๊ณตํ•™์Šต๋‹จ 14๊ธฐ] LeNet ์‹ค์Šต-Fashoin MNIST ๋ถ„๋ฅ˜ ์‹ค์Šต
  • [Luvit ํ•œ๋‹ฌ ์Šคํ„ฐ๋””] ์ƒˆ๋กœ์šด ์›น ๊ฐœ๋ฐœ์˜ ์‹œ์ž‘ ์Šค๋ฒจํŠธ #2
ํ‚ํ‚์ž‰
ํ‚ํ‚์ž‰
๋ฟŒ๋ก ํŠธ ๊ฐœ๋ฐœ์ž(์ง€๋ง์ƒ)์˜ ํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž ๋„์ „๊ธฐ
  • ํ‚ํ‚์ž‰
    monicx.dev
    ํ‚ํ‚์ž‰
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (173)
      • ๐Ÿ–ฅ๏ธdevelop (2)
        • Github (2)
        • Frontend (4)
        • Backend (5)
        • Mobile (0)
        • CS (0)
        • Three.js (0)
        • Docker (2)
      • ๐Ÿ“šbook (9)
        • npm Deep Dive (4)
      • ๐Ÿ“•review (33)
        • ์ฑ… (24)
        • ํ–‰์‚ฌ (1)
        • ํšŒ๊ณ  (2)
      • โญproject (5)
        • petiary (2)
        • ๆšŽ่ฉ  (0)
        • ์ธํ„ด (2)
      • ๐Ÿ˜ถ‍๐ŸŒซ๏ธalgorithm (0)
      • ๐Ÿ’กtips (1)
      • ๐Ÿ˜Ždaily (10)
      • ๐Ÿ•น๏ธgame (0)
      • ๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค (87)
        • TIL (61)
        • ํ”„๋กœ์ ํŠธ (18)
        • ํšŒ๊ณ  (8)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
  • ๋งํฌ

    • ๋ฒจ๋กœ๊ทธ
  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
ํ‚ํ‚์ž‰
[ํ˜ผ๊ณตํ•™์Šต๋‹จ 14๊ธฐ] ๊ฐ•์•„์ง€ ๊ณ ์–‘์ด ์‚ฌ์ง„ ๋ถ„๋ฅ˜ ์‹ค์Šต(AlexNet, VGGNet, ResNet)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”