tensor = torch.ones(4, 4)
print(f"First row: {tensor[0]}")
print(f"First column: {tensor[:, 0]}")
print(f"Last column: {tensor[..., -1]}")
tensor[:,1] = 0
print(tensor)
출력값
First row: tensor([1., 1., 1., 1.])
First column: tensor([1., 1., 1., 1.])
Last column: tensor([1., 1., 1., 1.])
tensor([[1., 0., 1., 1.],
[1., 0., 1., 1.],
[1., 0., 1., 1.],
[1., 0., 1., 1.]])
import torch
x = torch.ones(5) # input tensor
y = torch.zeros(3) # expected output
w = torch.randn(5, 3, requires_grad=True)
b = torch.randn(3, requires_grad=True)
z = torch.matmul(x, w)+b
loss = torch.nn.functional.binary_cross_entropy_with_logits(z, y)

1. 입력 데이터
x = torch.ones(5)
- x = [1, 1, 1, 1, 1]
2. 정답 데이터
y = torch.zeros(3)
- y = [0, 0, 0]
3. 학습을 통해 맞춰나가야할 가중치(weight)
w = torch.randn(5, 3, requires_grad=True)
- 5행 3열 행렬 (입력 5개일 때 출력 3개로)
- randn:평균이 0이고 표준편차가 1인 정규분포에서 랜덤한 숫자 뽑음
- requires_grad=True : Autograd(자동미분) 실행, 나중에 역전파로 w 학습을 하기 위해 미분(기울기)값 기록함
4. 학습을 통해 맞춰나가야할 편향(bias)
b = torch.randn(3, requires_grad=True)
- 1행 3열 행렬
- randn:평균이 0이고 표준편차가 1인 정규분포에서 랜덤한 숫자 뽑음
- requires_grad=True : Autograd(자동미분) 실행, 나중에 역전파로 b 학습을 하기 위해 미분(기울기)값 기록함
5. 곱하기 더하기 연산
z = torch.matmul(x, w)+b
- 입력(x)에 가중치 w를 곱하고 편향 b를 더함(z = wx + b)
6. 오차 계산
loss = torch.nn.functional.binary_cross_entropy_with_logits(z, y)
- 예측값 z와 정답 y가 얼마나 차이나는지 계산
- CE는 Cross Entropy를 말함, 다른 오차 함수로는 MSE가 있음
즉, requires_grad=True 이 설정으로 Autograd 적용함
import torch
from torch.utils.data import Dataset
from torchvision import datasets
from torchvision.transforms import ToTensor
import matplotlib.pyplot as plt
training_data = datasets.FashionMNIST(
root="data",
train=True,
download=True,
transform=ToTensor()
)
test_data = datasets.FashionMNIST(
root="data",
train=False,
download=True,
transform=ToTensor()
)
__init__, __len__, __getitem__import os
import pandas as pd
from torchvision.io import read_image
class CustomImageDataset(Dataset):
def __init__(self, annotations_file, img_dir, transform=None, target_transform=None):
self.img_labels = pd.read_csv(annotations_file, names=['file_name', 'label'])
self.img_dir = img_dir
self.transform = transform
self.target_transform = target_transform
def __len__(self):
return len(self.img_labels)
def __getitem__(self, idx):
img_path = os.path.join(self.img_dir, self.img_labels.iloc[idx, 0])
image = read_image(img_path)
label = self.img_labels.iloc[idx, 1]
if self.transform:
image = self.transform(image)
if self.target_transform:
label = self.target_transform(label)
return image, label
from torch.utils.data import DataLoader
train_dataloader = DataLoader(training_data, batch_size=64, shuffle=True)
test_dataloader = DataLoader(test_data, batch_size=64, shuffle=True)
참고