2023년 12월 3일 일요일

Python Django Quick-start

Django Quick-start

Django는 파이썬에서 사용할 수 있는 강력하고 유연한 웹 프레임워크입니다. Django를 설치하고 간단한 예제 프로젝트를 만드는 단계를 아래에 설명하겠습니다.

Django 설치

가상 환경 생성 및 활성화 (선택사항)

가상 환경을 사용하면 프로젝트별로 독립적인 파이썬 환경을 만들 수 있어, 여러 프로젝트에서 서로 다른 패키지 버전을 관리하기가 편리합니다.

python -m venv myvenv
  source myvenv/bin/activate  # Linux나 MacOS에서
  myvenv\Scripts\activate  # Windows에서

파이썬에 내장된 venv 모듈을 사용하여 새로운 가상 환경을 생성하고, 해당 환경을 활성화합니다. 활성화 후에는 해당 가상 환경 내에서 패키지 설치 및 관리가 이루어집니다.

Django 설치

pip를 사용하여 Django를 설치합니다.

pip install django

pip는 파이썬의 패키지 관리자로, 파이썬 라이브러리를 쉽게 설치하고 관리할 수 있게 해줍니다.

간단한 Django 프로젝트 생성

프로젝트 생성

django-admin 도구를 사용하여 새 프로젝트를 생성합니다.

django-admin startproject myproject
   cd myproject

Django 프로젝트의 기본 구조를 생성합니다. 프로젝트는 사이트의 전체 응용 프로그램을 포함합니다.django-admin 명령어를 사용해 새 프로젝트를 생성합니다. 이 명령어는 Django 프로젝트의 기본 폴더 구조와 파일을 설정합니다.

애플리케이션 생성

Django 프로젝트 내에서, 특정 기능을 담당하는 애플리케이션을 생성할 수 있습니다.

python manage.py startapp myapp

Django에서 애플리케이션은 프로젝트의 구성 요소로, 일련의 기능을 그룹화합니다. manage.py 스크립트와 startapp 명령어를 사용하여 새 애플리케이션을 생성합니다.

모델 정의

myapp/models.py 파일을 열고 간단한 모델을 정의합니다. 예를 들어, 간단한 Post 모델을 만들어봅시다.

from django.db import models

   class Post(models.Model):
       title = models.CharField(max_length=100)
       content = models.TextField()

       def __str__(self):
           return self.title

여기서는 데이터베이스 구조를 정의합니다. Django에서 모델은 데이터베이스의 테이블에 해당하며, 각 필드는 테이블의 컬럼입니다. models.py 파일에 클래스로 모델을 정의합니다. 이 클래스는 django.db.models.Model을 상속받아 Django ORM을 통해 데이터베이스와 상호작용합니다.

모델을 Admin 사이트에 등록

myapp/admin.py 파일을 열고 Post 모델을 등록합니다.

from django.contrib import admin
  from .models import Post

  admin.site.register(Post)

생성한 모델을 Django의 관리자 사이트에서 관리할 수 있도록 합니다. admin.py 파일에 모델을 등록합니다. 이렇게 하면 Django의 관리자 인터페이스에서 모델을 추가, 수정, 삭제할 수 있습니다.

데이터베이스 마이그레이션

모델 변경 사항을 데이터베이스에 적용하기 위해 마이그레이션을 실행합니다.

python manage.py makemigrations
  python manage.py migrate

모델의 변경사항을 데이터베이스에 적용합니다. makemigrations 명령어로 모델 변경 사항에 대한 마이그레이션 파일을 생성하고, migrate 명령어로 이를 데이터베이스에 적용합니다.

개발 서버 실행

Django의 내장 개발 서버를 실행합니다.

python manage.py runserver

이제 브라우저에서 http://127.0.0.1:8000/로 접속하면 Django 개발 서버가 실행 중인 것을 볼 수 있습니다.

runserver 명령어를 사용하여 개발 서버를 시작합니다. 이 서버는 개발 중에 애플리케이션을 테스트하기 위한 것입니다

Admin 사이트 접속

Django는 기본적으로 관리자 사이트를 제공합니다. 관리자 계정을 만들어 접속해봅시다.

python manage.py createsuperuser

관리자 계정을 만든 후, http://127.0.0.1:8000/admin로 접속하여 로그인할 수 있습니다. 여기서 Post 모델을 관리할 수 있습니다.

이러한 단계를 통해 기본적인 Django 프로젝트를 설정하고, 간단한 모델을 만들어 Admin 사이트에서 관리할 수 있게 되었습니다. Django는 이보다 훨씬 다양하고 복잡한 기능을 제공하므로, 웹 애플리케이션의 요구사항에 맞게 추가적인 개발을 진행할 수 있습니다.



2023년 12월 2일 토요일

Pytorch 설치 및 간단한 예제

 

Pytorch 설치 및 간단한 예제

PyTorch는 딥 러닝 모델을 구축하고 학습하기 위한 인기 있는 라이브러리입니다. 여기 간단한 PyTorch 예제를 테스트 해봅니다. 이 예제에서는 기본적인 신경망을 구성하고, 간단한 데이터셋에 대해 이 신경망을 학습시키는 과정을 보여줍니다.

예제: 기본적인 신경망 학습

1. 필요한 라이브러리 임포트

import torch
import torch.nn as nn
import torch.optim as optim

여기서는 PyTorch 관련 주요 라이브러리를 임포트합니다.

  • torch: PyTorch의 기본 모듈로, 텐서 연산 및 기타 기본 기능을 제공합니다.
  • torch.nn: 신경망을 구축하는 데 필요한 모듈 및 클래스를 제공합니다.
  • torch.optim: 최적화 알고리즘(예: SGD, Adam)을 포함하고 있으며, 이를 통해 모델의 가중치를 업데이트합니다.

2. 신경망 모델 정의

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        # 입력층, 은닉층, 출력층 정의
        self.fc1 = nn.Linear(3, 3)  # 3개 입력 노드에서 3개 은닉 노드로
        self.fc2 = nn.Linear(3, 1)  # 3개 은닉 노드에서 1개 출력 노드로

    def forward(self, x):
        x = torch.relu(self.fc1(x))  # ReLU 활성화 함수 적용
        x = self.fc2(x)
        return x

# 모델 인스턴스 생성
net = Net()

사용자 정의 신경망 모델을 정의합니다. nn.Module을 상속받아서 모델을 정의하며, __init__ 메서드에서 모델의 레이어를 정의하고 forward 메서드에서 데이터가 모델을 통과할 때 수행할 계산을 정의합니다.

3. 손실 함수와 최적화 기법 선택

criterion = nn.MSELoss()  # 평균 제곱 오차 손실 함수
optimizer = optim.SGD(net.parameters(), lr=0.01)  # 확률적 경사 하강법 최적화
  • criterion: 모델의 출력과 실제 타겟 간의 차이를 계산하는 손실 함수를 정의합니다. 여기서는 평균 제곱 오차(MSE)를 사용합니다.
  • optimizer: 모델의 가중치를 업데이트하는 방법을 정의합니다. 여기서는 확률적 경사 하강법(SGD)과 학습률(Learning rate) 0.01을 사용합니다.

4. 학습 데이터 준비

# 간단한 예시 데이터셋
inputs = torch.tensor([[1.0, 2.0, 3.0], [1.0, 2.0, 3.0], [1.0, 2.0, 3.0]])
targets = torch.tensor([[1.0], [2.0], [3.0]])

이 단계에서는 학습에 사용할 입력 데이터(inputs)와 해당 타겟 레이블(targets)을 정의합니다. 이 데이터는 모델을 훈련시키는 데 사용됩니다.

5. 학습 과정

for epoch in range(500):  # 에포크 수 설정
    optimizer.zero_grad()   # 그래디언트 버퍼 초기화
    outputs = net(inputs)   # 입력에 대한 예측값 계산
    loss = criterion(outputs, targets)  # 손실 계산
    loss.backward()  # 역전파 수행
    optimizer.step()  # 가중치 업데이트

    if (epoch+1) % 50 == 0:  # 매 50 에포크마다 손실 출력
        print(f'Epoch [{epoch+1}/500], Loss: {loss.item():.4f}')

이 부분은 모델을 학습시키는 과정입니다. 각 에포크마다 다음의 단계를 수행합니다:

  • optimizer.zero_grad(): 이전 에포크에서 계산된 그래디언트를 초기화합니다.
  • outputs = net(inputs): 현재 모델을 사용하여 입력 데이터에 대한 예측을 수행합니다.
  • loss = criterion(outputs, targets): 손실 함수를 사용하여 예측과 실제 타겟 간의 손실을 계산합니다.
  • loss.backward(): 손실에 대한 그래디언트를 계산하기 위해 역전파를 수행합니다.
  • optimizer.step(): 계산된 그래디언트를 사용하여 모델의 가중치를 업데이트합니다.

추가로 에포크(epoch)의 의미는 머신 러닝, 특히 신경망 학습에서 전체 학습 데이터셋이 모델을 통과하는 한 번의 완전한 사이클을 의미합니다. 각 에포크에서 모델은 데이터셋의 모든 샘플을 한 번씩 처리하고, 이를 통해 가중치를 업데이트합니다. 모델의 성능을 향상시키기 위해 여러 에포크를 거치며 학습을 반복합니다.

이 예제는 PyTorch를 사용하여 간단한 신경망을 구성하고, 작은 데이터셋에 대해 신경망을 학습시키는 기본적인 프로세스를 보여줍니다. 실제로 복잡한 데이터셋과 문제에 적용할 때는 더 많은 레이어, 다양한 데이터 전처리 방법, 복잡한 최적화 알고리즘 등이 사용될 수 있습니다.