1. Data 준비
2. 알고리즘(파라미터) 통과
3. Loss Function을 통해서 어떤 값을 계산
4. Loss 값을 최대화 또는 최소화 시키는 방향으로 파라미터 업데이트
5. 위 과정을 epoch 만큼 반복
AL, ML, DL의 차이?
ML의 일반적인 framework를 서술해보자!
NN 모델은 왜 practical하고 useful할까?
활성화함수가 하는 역할은 무엇인가?
--> 비선형성을 만들어 준다!!
다차원 배열 처리에 대해서 빠르고 효율적임
Matrix 연산, 벡터 내적
Indexing/Slicing, Condition
import torch # pytorch(tensor 생성) import torch.nn as nn # pytorch(네트워크 생성) import matplotlib.pyplot as plt # 시각화 from sklearn import datasets # 데이터셋 준비
print(torch.cuda.is_available()) # GPU 확인
n_pts = 500 # 생성 샘플 개수 X, y = datasets.make_circles(n_samples=n_pts, random_state=123, noise=0.2, factor=0.3) # 데이터 생성
x_data = torch.Tensor(X) # x 데이터 텐서에 넣기 y_data = torch.Tensor(y.reshape(500, 1)) # y 데이터 텐서에 넣기
def scatter_plot(): # 데이터 시각화로 확인 plt.scatter(X[y==0, 0], X[y==0, 1], color='red') plt.scatter(X[y==1, 0], X[y==1, 1], color='blue')
scatter_plot()
class Model(nn.Module): # class 형태로 네트워크 생성
def __init__(self, input_size, H1, output_size): # input,hidden, output layer node 수 super().__init__() self.linear1 = nn.Linear(input_size, H1) # layer1 정의 self.linear2 = nn.Linear(H1, output_size) # layer2 정의
def forward(self, x): # 모델 forward 구조 x = torch.sigmoid(self.linear1(x)) x = torch.sigmoid(self.linear2(x)) return x
def predict(self, x): return 1 if self.forward(x) >= 0.5 else 0
model = Model(2, 4, 1) print(list(model.parameters()))
criterion = nn.BCELoss() # binary cross entropy Loss optimizer = torch.optim.Adam(model.parameters(), lr=0.01) # Adam Optimizer
epochs = 1000 losses = []
for i in range(epochs): optimizer.zero_grad() # 1. 파라미터 gradient 초기화 y_pred = model(x_data) # y_pred = model.forward(x_data) loss = criterion(y_pred, y_data)
print("epochs: {}, loss: {}".format(i, loss.item()))
losses.append(loss.item()) loss.backward() # 2. gradient 계산 optimizer.step() # 3. 파라미터 업데이트