Fundamentals of Deep Learning 1

Luuuuucy·2024년 11월 19일

DLI

목록 보기
1/2

🔖 REVIEW

❗ 선생님의 말씀

  1. 머신러닝과 딥러닝의 차이 ?
  2. 딥러닝이란?
  3. 인공지능의 역사
    • Single Layer: Exclusive or(XOR) Problem 해결 X
    • Multi Layer Perceptron(MLP) 3개까지밖에 못 씀
    • ReLU 비선형성 추가
  4. 몇 년 전까지만 해도 linux, nvidia gpu, x64 에서만 가능했음

❗ Deep Learning

1. Dataset, DataLoader

from torch.utils.data import Dataset, DataLoader

2. cuda 사용 문법

GPU에 model과 data를 보냄

1. gpu 사용 환경 맞는지?

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
torch.cuda.is_available()

************************************************************************
출력값: True

True: gpu 사용환경임
False: gpu 안됨, cpu로 동작 

2. gpu로 model과 data를 보냄 1

x_0_gpu = x_0_tensor.cuda()
x_0_gpu.device

3. gpu로 model과 data를 보냄 2

x_0_tensor.to(device).device

3. Tensor

딥러닝에서 사용하는 배열 용어

trans = transforms.Compose([transforms.ToTensor()])
x_0_tensor = trans(x_0)

int -> float32 로 변환 됨

x_0_tensor.min()
x_0_tensor.max()

*****************
출력값: 
tensor(0.)
tensor(1.)

4. pytoch 모양

C x H x W
C: color channel (흑백:1, 칼라:3)
H: height
W: width

x_0_tensor.size()

*****************
torch.Size([1, 28, 28])

5. shuffle

train dataset의 순서를 외울 수 있기 때문에 shuffle을 한 후에 진행

batch_size = 32

train_loader = DataLoader(train_set, batch_size=batch_size, shuffle=True)
valid_loader = DataLoader(valid_set, batch_size=batch_size)

6. Flatten

step 1. batch 만들기

None? 요소개수를 알아서 계산해서 넣어라
None = -1

방법 1

batch_test_matrix = test_matrix[None, :]
batch_test_matrix

방법 2

batch_test_matrix = test_matrix.unsqueeze(0)
batch_test_matrix

step 2. Flatten

nn.Flatten()(batch_test_matrix)

step 3. 확인

layers = [
    nn.Flatten()
]
layers


출력값: 
[Flatten(start_dim=1, end_dim=-1)]
입력되는 1차원 
end_dim은 자동으로 결정 

7. Model

n_classes? 내가 얻고자 하는 출력 개수

n_classes = 10

layers = [
    nn.Flatten(),
    nn.Linear(input_size, 512),  # Input
    nn.ReLU(),  # Activation for input
    nn.Linear(512, 512),  # Hidden
    nn.ReLU(),  # Activation for hidden
    nn.Linear(512, n_classes)  # Output
]

layers

8. Compiling

model = nn.Sequential(*layers)
model

출력값:
Sequential(
  (0): Flatten(start_dim=1, end_dim=-1)
  (1): Linear(in_features=784, out_features=512, bias=True)
  (2): ReLU()
  (3): Linear(in_features=512, out_features=512, bias=True)
  (4): ReLU()
  (5): Linear(in_features=512, out_features=10, bias=True)
)

9. Summary

연산을 해야지만 Parameter값이 나옴

파라미터란?
신경망에서 "파라미터"는 모델이 학습하는 값들을 의미합니다. 주로 가중치(weight)와 편향(bias)으로 구성되어 있습니다. 각 레이어의 파라미터 수는 해당 레이어의 입력과 출력의 크기에 따라 결정됩니다.

  • 가중치 수: 입력 차원 수 × 뉴런 수
  • 편향 수: 뉴런 수
from torchsummary import summary
summary(model, (1, 28, 28))

출력값:
----------------------------------------------------------------
        Layer (type)               Output Shape         Param #
================================================================
           Flatten-1                  [-1, 784]               0
            Linear-2                  [-1, 512]         401,920
              ReLU-3                  [-1, 512]               0
            Linear-4                  [-1, 512]         262,656
              ReLU-5                  [-1, 512]               0
            Linear-6                   [-1, 10]           5,130
================================================================
Total params: 669,706
Trainable params: 669,706
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.00
Forward/backward pass size (MB): 0.02
Params size (MB): 2.55
Estimated Total Size (MB): 2.58
---------------------------------------------------------------

Linear-2: 784 x 512 + 512
Linear-4: 512 x 512 + 512
Linear-6: 512 x 10 + 10

10. Convolution

Conv2d는 공간의 구조를 유지하면서 특징을 추출

model = nn.Sequential(
    # First convolution
    nn.Conv2d(IMG_CHS, 25, kernel_size, stride=1, padding=1),  # 25 x 28 x 28
    # nn.BatchNorm2d(25),
    # nn.ReLU(),
    nn.MaxPool2d(2, stride=2),

nn.Conv2d(IMG_CHS, 25, kernel_size, stride=1, padding=1)
파라미터 1: IMG_CHS -> 입력 이미지의 채널 수 [예] 흑백 1, 칼라 3
파라미터 2: 25 -> convolution(합성곱) 필터 개수
파라미터 3: kernel_size -> 커널(필터) 사이즈
파라미터 4: stride -> 행렬 곱셈 이동 수 (상하, 좌우)
파라미터 5: padding -> 사이즈 유지를 위한 입력 이미지의 가장자리에 추가되는 픽셀 수

11.

결과 = 현재필터 x 과거 필터 x 필터당 가중치 + 현재 필터 (b)
역 계산 = (결과 - 현재 필터(b)) / 과거 필터 / 필터당 가중치 = 현재 필터

profile
Hi, I am Lucy. Welcome to Moon in the Room. 🌝

0개의 댓글