<
keras to pytorch
>
上一篇

Image-to-Image Translation with Conditional Adversarial Networks
下一篇

Module과 Package

케라스에서 파이토치로

처음 접할때 느끼는 차이점

필수 클래스

그래서 간단히 하나 만들어보자


# 모듈 임포트
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np

# 모델 생성
class FCLModel(nn.Module) :
    def __init__(self) :
        super(FCLModel, self).__init__()
        
        # FCL 2층 후 분류기
        self.linear_1 = nn.Linear(784, 128)
        self.linear_2 = nn.Linear(128, 128)
        self.out = nn.Linear(128, 10)

    # 여기에서 네트워크의 순서를 정의    
    def forward(self, x) :

        x = self.linear_1(x)
        x = nn.ReLU()(x)
        x = self.linear_2(x)
        x = nn.ReLU()(x)
        y = self.out(x)
        return y


# 실행부분 정의
def main() :

    # 모델생성
    model = FCLModel()

    # 손실모듈 생성 pytorch의 CrossEntropy는 log softmax를 포함
    criterion = nn.CrossEntropyLoss()

    # 옵티마이저 생성
    optimizer = optim.Adam(model.parameters(), lr=0.001)

    # 임시 랜덤 데이터 생성
    x_train = torch.randn((5, 784), dtype=torch.float32)
    y_train = torch.randint(10, size =(5,))

    y_pred = model(x_train)
    
    # loss 계산 (원핫이 아닌 그냥 레이블을 집어넣음)
    loss = criterion(y_pred, y_train)

    # 옵티마이저 초기화 (위치 수정했습니다 ㅠㅠ)
    optimizer.zero_grad()

    # 역전파 계산 (내부에 지정된 grad_fn 사용)
    loss.backward()

    # 옵티마이저 업데이트
    optimizer.step()

    # 그냥 놔두면 썰렁하니 출력
    print(loss)

DataLoader

Top
Foot