[텍스트 분석] pytorch
설치
pip install torch
임포트
import torch
from torch import nn, optim
데이터셋 변환
train_dataset = torch.utils.data.TensorDataset(
torch.Tensor(x_train.A),
torch.unsqueeze(torch.Tensor(y_train.values), dim=1)
)
데이터 로더
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) # 모델에 데이터를 입력으로 전달하고, 출력을 계산
loss = criterion(outputs, labels) # 출력값과 레이블 값을 사용하여 손실 계산
loss.backward() # 손실값을 미분하여 모델의 파라미터의 기울기 계산
optimizer.step() # 옵티마이저를 사용하여 모델의 가중치와 편향 값을 업데이트
losses.append(loss.item()) # 손실값 누적
손실 감소의 시각화
import matplotlib.pyplot as plt
plt.plot(losses);
예측
x_test_pt = torch.Tensor(x_test.A)
prob = model(x_test_pt)
prob = torch.squeeze(prob)
평가
from torchmetrics.functional import accuracy
y_test_pt = torch.Tensor(y_test.values)
accuracy(prob, y_test_pt, task='binary')
가중치
weight, bias = list(model.parameters())
word_weight = pd.DataFrame({
'단어': cv.get_feature_names_out(),
'가중치': weight.detach().numpy().flat
})
다층신경망
hidden_size = 32
model = nn.Sequential(
nn.Linear(input_size, hidden_size),
nn.ReLU(),
nn.Linear(hidden_size, num_classes),
nn.Sigmoid()
)