【PyTorch深度学习实践】06_多维特征输入(以逻辑斯蒂回归为例)

文章目录

    • 1. 多维数据
    • 2. 多维数据在逻辑回归中的计算过程
    • 3. 代码改变及其含义
    • 4. 完整代码

1. 多维数据

每一行为一个样本(sample),数据库里一行称为一个Record。
【PyTorch深度学习实践】06_多维特征输入(以逻辑斯蒂回归为例)_第1张图片
每一列为一个特征(feature),数据库里叫字段。
【PyTorch深度学习实践】06_多维特征输入(以逻辑斯蒂回归为例)_第2张图片

2. 多维数据在逻辑回归中的计算过程

【PyTorch深度学习实践】06_多维特征输入(以逻辑斯蒂回归为例)_第3张图片

【PyTorch深度学习实践】06_多维特征输入(以逻辑斯蒂回归为例)_第4张图片

偏置(bias)——b,通过广播机制变成向量与前面的矩阵进行运算。

3. 代码改变及其含义

【PyTorch深度学习实践】06_多维特征输入(以逻辑斯蒂回归为例)_第5张图片
【PyTorch深度学习实践】06_多维特征输入(以逻辑斯蒂回归为例)_第6张图片
【PyTorch深度学习实践】06_多维特征输入(以逻辑斯蒂回归为例)_第7张图片
训练过程
【PyTorch深度学习实践】06_多维特征输入(以逻辑斯蒂回归为例)_第8张图片
【PyTorch深度学习实践】06_多维特征输入(以逻辑斯蒂回归为例)_第9张图片

4. 完整代码

import numpy as np
import matplotlib.pyplot as plt
import torch

# 1.准备数据集,可以拷贝一份放到工程文件夹里
# 文件名是csv或者gz都可以,都可以解析。delimiter是分隔符。指定读取的数据类型,一般不用double,习惯使用32为浮点数。
# gz是在linux下常用的压缩方式
xy = np.loadtxt('diabetes.csv.gz', delimiter=',', dtype=np.float32)
# 用from_numpy可以创建tensor
x_data = torch.from_numpy(xy[:, :-1])   # 用切片,最后一列不要
y_data = torch.from_numpy(xy[:, [-1]])  # 要的是-1这列(最后一列),加[]表明拿出来的是矩阵(列向量),不然是向量(行向量)。

# 2.设计模型
class Model(torch.nn.Module):
    def __init__(self):
        super().__init__()
        # 三个线性模型
        self.linear1 = torch.nn.Linear(8,6)
        self.linear2 = torch.nn.Linear(6,4)
        self.linear3 = torch.nn.Linear(4,1)
        self.sigmoid = torch.nn.Sigmoid()   # 可以构造Sigmoid,nn下的Sigmoid是一个模块,不是单纯的函数

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

model = Model()

# 3.损失函数和优化器
# 还是二分类,直接用BCE损失即可
criterion = torch.nn.BCELoss(size_average=True)
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)

epoch_list = []
loss_list = []

# 4.训练过程
for epoch in range(100):
    # 前馈
    y_pred = model(x_data)
    loss = criterion(y_pred, y_data)
    print(epoch, loss.item())

    # 反馈
    optimizer.zero_grad()
    loss.backward()

    # 更新
    optimizer.step()

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

plt.plot(epoch_list, loss_list)
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()

loss-epoch图像
【PyTorch深度学习实践】06_多维特征输入(以逻辑斯蒂回归为例)_第10张图片

另:需要不同的激活函数只需要修改这一行就可以
【PyTorch深度学习实践】06_多维特征输入(以逻辑斯蒂回归为例)_第11张图片

你可能感兴趣的:(#,Pytorch,深度学习,pytorch,回归)