파이토치 신경망 기본 구성
class Net(nn.module):
def __init__(self):
'''
# 신경망 구성요소 정의
'''
def forward(self,input):
'''
# 신경망의 동작 정의
'''
파이토치 데이터셋 기본 구성
class Dataset():
def __init__(self):
'''
필요한 데이터 불러오기
'''
def __len__(self):
'''
데이터의 갯수 반환
'''
def __getitem__(self,i):
'''
i번째 입력 데이터와 i번째 정답을 반환
'''
return data[i],label[i]
파이토치 데이터셋 기본 구성
# 데이터로더로부터 데이터와 정답을 받아옴
for data,label in Dataloader():
# 모델의 예측값 계산
prediction = model(data)
# 손실 함수를 이용해 오차 계산
loss = LossFunction(prediction,label)
# 오차 역전파
loss.backward()
# 신경망 가중치 수정
optimizer.step()
보스턴 데이터셋의 특징 출력
from sklearn.datasets import load_boston
# 경고 무시
import warnings
warnings.filterwarnings('ignore')
dataset = load_boston() # 데이터셋을 불러옴
print(dataset.keys()) # 데이터셋의 키(요소들의 이름)를 출력
데이터 구성 요소 확인
import pandas as pd
from sklearn.datasets import load_boston
dataset = load_boston()
dataFrame = pd.DataFrame(dataset["data"]) # ❶ 데이터셋의 데이터 불러오기
dataFrame.columns = dataset["feature_names"] # ❷ 특징의 이름 불러오기
dataFrame["target"] = dataset["target"] # ❸ 데이터 프레임에 정답을 추가
print(dataFrame.head()) # ➍ 데이터프레임을 요약해서 출력
선형회귀를 위한 MLP 모델의 설계
import torch
import torch.nn as nn
from torch.optim.adam import Adam
# ❶ 모델 정의
model = nn.Sequential(
nn.Linear(13, 100),
nn.ReLU(),
nn.Linear(100, 1)
)
X = dataFrame.iloc[:, :13].values # ❷ 정답을 제외한 특징을 X에 입력
Y = dataFrame["target"].values # 데이터프레임의 target의 값을 추출
batch_size = 100
learning_rate = 0.001
# ❸ 가중치를 수정하기 위한 최적화 정의
optim = Adam(model.parameters(), lr=learning_rate)
# 에포크 반복
for epoch in range(200):
# 배치 반복
for i in range(len(X)//batch_size):
start = i*batch_size # ➍ 배치 크기에 맞게 인덱스를 지정
end = start + batch_size
# 파이토치 실수형 텐서로 변환
x = torch.FloatTensor(X[start:end])
y = torch.FloatTensor(Y[start:end])
optim.zero_grad() # ❺ 가중치의 기울기를 0으로 초기화
preds = model(x) # ❻ 모델의 예측값 계산
loss = nn.MSELoss()(preds, y) # ❼ MSE 손실 계산
loss.backward()
optim.step()
if epoch % 20 == 0:
print(f"epoch{epoch} loss:{loss.item()}")
prediction = model(torch.FloatTensor(X[0, :13]))
real = Y[0]
print(f"prediction:{prediction.item()} real:{real}")
🫠 배치 : 전체 데이터를 나눠서 학습하는 단위
- 사전적 정의 : 딥러닝 모델의 가중치를 업데이트 시킬때 사용되는 데이터의 묶음 단위
- 컴퓨터의 메모리는 한정적이기 때문에 모든 데이터를 한번에 처리 불가
→ 전체 데이터를 나눠서 학습함!🫠 에포크 : 배치 크기 만큼 학습해서 전체 데이터 모두를 학습
- 사전적 정의 : 배치 크기 단위로 전체 데이터 모두를 학습하는 단위
- 배치크기로 n번 학습해 전체 데이터를 1번 학습 완료! = 1에포크
🫠 이터레이션 : 1에포크를 완성시키는 데 필요한 배치의 반복 횟수
이터레이션(반복 횟수) 배치(한번 학습 데이터하는 양) = 1에포크(전체 데이터 학습 완료!)*