인공지능 공부/pytorch

(2022.07.01) Feed Forward Net

import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt


#device config
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')

#hyper parmameters
input_size = 784 # 28*28 
hidden_size = 100
num_classes = 10
num_epochs = 2
batch_size = 100
learning_rate = 0.001

#MNIST 
train_dataset = torchvision.datasets.MNIST(root="./data", train=True, 
    transform=transforms.ToTensor(), download=True)
    
test_dataset = torchvision.datasets.MNIST(root="./data", train=False, 
    transform=transforms.ToTensor(), download=True)


train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False)

class NeuralNet(nn.Module):
    def __init__(self, input_size, hidden_size, num_classes):
        super(NeuralNet, self).__init__()
        self.l1 = nn.Linear(input_size, hidden_size)
        self.relu = nn.ReLU()
        self.l2 = nn.Linear(hidden_size, num_classes)


    def forward(self, x):
        out = self.l1(x)
        out = self.relu(out)
        out = self.l2(out)
        return out 


model = NeuralNet(input_size, hidden_size, num_classes)

# loss and optimizer 
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

#trainig loop
n_total_steps = len(train_loader)
for epoch in range(num_epochs):
    for i, (images, labels) in enumerate(train_loader):
        # 100, 1, 28, 28
        # 100, 784
        images = images.reshape(-1, 28*28).to(device)
        labels = labels.to(device)

        # forward
        outputs = model(images)
        loss = criterion(outputs, labels)

        # backwards
        optimizer.zero_grad()
        loss.backwards()
        optimizer.step()

        if (i+1) % 100 == 0:
            print(f'epoch {epoch+1} / {num_epochs}, step {i+1} / {n_total_steps}, loss = {loss.item():.4f}')

# test 
with torch.no_grad():
    n_correct = 0
    n_smaples = 0
    for images, labels in test_loader:
        images = images.reshape(-1, 28*28).to(device)
        labels = labels.to(device)       
        outputs = model(images)

        # value, index
        _, predictions = torch.max(outpus, 1)

        n_samples += labels.shape[0]
        n_correct += (predictions == labels).sum().item()

    acc = 100.0 * n_correct / n_samples
    print(f'accuracy = {acc}')

'인공지능 공부 > pytorch' 카테고리의 다른 글

(2022.07.03) Brain Tumor MRI detection  (0) 2022.07.03
(2022.07.01) Pytorch Rice Classification  (0) 2022.07.01
(2022.07.01) CNN  (0) 2022.07.01
(2022.06.30) Dataset and Dataloader  (0) 2022.06.30
(2022.06.30) pytorch linear_regression  (0) 2022.06.30