🔖 REVIEW
from torch.utils.data import Dataset, DataLoader
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
딥러닝에서 사용하는 배열 용어
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.)
C x H x W
C: color channel (흑백:1, 칼라:3)
H: height
W: width
x_0_tensor.size()
*****************
torch.Size([1, 28, 28])
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)
None? 요소개수를 알아서 계산해서 넣어라
None = -1
방법 1
batch_test_matrix = test_matrix[None, :]
batch_test_matrix
방법 2
batch_test_matrix = test_matrix.unsqueeze(0)
batch_test_matrix
nn.Flatten()(batch_test_matrix)
layers = [
nn.Flatten()
]
layers
출력값:
[Flatten(start_dim=1, end_dim=-1)]
입력되는 1차원
end_dim은 자동으로 결정
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
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)
)
연산을 해야지만 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
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 -> 사이즈 유지를 위한 입력 이미지의 가장자리에 추가되는 픽셀 수
결과 = 현재필터 x 과거 필터 x 필터당 가중치 + 현재 필터 (b)
역 계산 = (결과 - 현재 필터(b)) / 과거 필터 / 필터당 가중치 = 현재 필터