PyTorch는 다차원 기능 입력을 위한 로지스틱 회귀를 구현합니다.

1. 시행과정

1. 데이터 준비

본 논문의 데이터는 문헌[1]에 있는 데이터셋을 사용하였으며, 데이터셋의 처음 8개 열은 특징, 마지막 1개 열은 레이블(0/1)이다. 이 모델은 pandas를 사용하여 데이터 세트를 처리합니다. 원래 데이터 세트에는 기능 이름이 없으며 첫 번째 줄에 추가해야 합니다. 그렇지 않으면 pandas는 첫 번째 줄의 데이터를 기능 이름으로 처리합니다. , 최종 분류에 영향을 미칩니다. 코드 쇼는 아래와 같습니다.

# 1、准备数据
import torch
import pandas as pd
import numpy as np
xy = pd.read_csv('G:/datasets/diabetes/diabetes.csv',dtype=np.float32)	# 文件路径
x_data = torch.from_numpy(xy.values[:,:-1])
y_data = torch.from_numpy(xy.values[:,[-1]])

2. 디자인 모델

본 논문은 literature[1]의 개념을 채택하고, 활성화 함수는 ReLU를 사용하고, 마지막 계층은 Sigmoid 함수를 사용하며, 코드는 다음과 같다.

class Model(torch.nn.Module):
    def __init__(self):
        super(Model,self).__init__()
        self.linear1 = torch.nn.Linear(8,6)
        self.linear2 = torch.nn.Linear(6,4)
        self.linear3 = torch.nn.Linear(4,1)
        self.activate = torch.nn.ReLU()
    
    def forward(self, x):
        x = self.activate(self.linear1(x))
        x = self.activate(self.linear2(x))
        x = torch.sigmoid(self.linear3(x))
        return x
model = Model()

다음 코드를 사용하여 모델과 데이터를 GPU에 로드합니다.

### 将模型和训练数据加载到GPU上
# 模型加载到GPU上
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model.to(device)
# 数据加载到GPU上
x = x_data.to(device)
y = y_data.to(device)

3. 손실 함수 및 옵티마이저 구성

# 3、构造损失函数和优化器
criterion = torch.nn.BCELoss(reduction='mean')
optimizer = torch.optim.SGD(model.parameters(),lr=0.1)

4. 교육 과정

epoch_list = []
loss_list = []
epochs = 10000
for epoch in range(epochs):
    # Forward
    y_pred = model(x)
    loss = criterion(y_pred, y)
    print(epoch, loss)

    epoch_list.append(epoch)
    loss_list.append(loss.data.item())

    # Backward
    optimizer.zero_grad()
    loss.backward()

    # Update
    optimizer.step()

5. 결과 표시

개별 레이어의 가중치와 편향을 확인하십시오.

model.linear1.weight,model.linear1.bias
model.linear2.weight,model.linear2.bias
model.linear3.weight,model.linear3.bias

반복 횟수에 따른 손실 값의 변화 곡선:

# 绘图展示
plt.plot(epoch_list,loss_list,'b')
plt.xlabel('epoch')
plt.ylabel('loss')
plt.grid()
plt.show()

여기에 이미지 설명 삽입최종 손실 및 정확도:

# 准确率
y_pred_label = torch.where(y_pred.data.cpu() >= 0.5,torch.tensor([1.0]),torch.tensor([0.0]))
acc = torch.eq(y_pred_label, y_data).sum().item()/y_data.size(0)

print("loss = ",loss.item(), "acc = ",acc)
loss =  0.4232381284236908 acc =  0.7931488801054019

2. 참고문헌

[1] https://www.bilibili.com/video/BV1Y7411d7Ys?p=7
[2] https://blog.csdn.net/bit452/article/details/109682078

추천

출처blog.csdn.net/weixin_43821559/article/details/123314829