logo

딥러닝

딥러닝

pytorch 설치

!pip install torch
import torch
from torch import nn, optim

데이터셋 변환

train_dataset = torch.utils.data.TensorDataset(
    torch.Tensor(x_train.A),
    torch.Tensor(y_train.values)
)

데이터 로더

train_loader = torch.utils.data.DataLoader(
    train_dataset, batch_size=32, shuffle=True)

모델 정의

input_size = cv.max_features
num_classes = 1
model = nn.Sequential(
    nn.Linear(input_size, num_classes),
    nn.Sigmoid()
)

훈련 설정

criterion = nn.BCELoss()
optimizer = optim.SGD(model.parameters(), lr=1.0)

훈련

losses = []
epochs = 10
for epoch in range(epochs):
    for i, data in enumerate(train_loader):  # 배치의 데이터와 레이블에 대해 반복
        inputs, labels = data
        optimizer.zero_grad()    # 경사를 0으로 초기화
        outputs = model(inputs)  # 모델에 데이터를 입력으로 전달하고, 출력을 계산
        outputs = torch.squeeze(outputs)
        loss = criterion(outputs, labels)  # 출력값과 레이블 값을 사용하여 손실 계산
        loss.backward()   # 손실값을 미분하여 모델의 파라미터의 기울기 계산
        optimizer.step()  # 옵티마이저를 사용하여 모델의 가중치와 편향 값을 업데이트
        losses.append(loss.item())  # 손실값 누적

예측

x_test_pt = torch.Tensor(x_test.A)
prob_pt = model(x_test_pt)
prob_pt = torch.squeeze(prob_pt)
prob = prob_pt.detach().numpy()

문턱값에 따라 다르게 예측

threshold = 0.5 # 문턱값
y_pred = np.where(prob > threshold, 1, 0)

가중치

weight, bias = list(model.parameters())
word_weight = pd.DataFrame({
    '단어': cv.get_feature_names_out(),
    '가중치': weight.detach().numpy().flat
})
Previous
잠재 디리클레 할당(LDA)