二分类:糖尿病患病概率(多维输入X(N),一维输出P(y=1))

Source
import torch
import torch.nn.functional as F
import matplotlib.pylab as plt
import numpy as np
import torch.nn as nn

#1.从文件中读取数据集
xy=np.loadtxt('D:\迅雷下载\diabetes.csv.gz',delimiter=',',dtype=np.float32) #文件读取 文件名 间隔符 逗号隔开 类型32位浮点型
x_data=torch.from_numpy(xy[:,:-1]) #所有行 列数到倒数第2列
y_data=torch.from_numpy(xy[:,[-1]])

#2.搭建神经网络
class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__()
        self.linear1=nn.Linear(8,6)
        self.linear2=nn.Linear(6,4)
        self.linear3=nn.Linear(4,1)

    def forward(self,x):
        x = torch.sigmoid(self.linear1(x))
        x = torch.sigmoid(self.linear2(x))
        x = torch.sigmoid(self.linear3(x))
        return x
net=Net()

#3.构建优化器和损失函数
optimizer=torch.optim.SGD(net.parameters(),lr=0.1) #随机梯度下降
criterion=nn.BCELoss()#二分类交叉熵损失函数

#4.训练模型
for epoch in range(100):
    y_pred=net(x_data)
    loss=criterion(y_pred,y_data) #forward 算出loss 构建出计算图
    print(epoch,loss)

    optimizer.zero_grad() #backward 算出梯度,释放计算图
    loss.backward()

    optimizer.step()#update 进行梯度更新