07 Multiple Dimension Input (处理多维特征的输入)

本节内容是学习 刘二大人的《PyTorch深度学习实践》的 07 Multiple Dimension Input (处理多维特征的输入)。

上节内容:06逻辑斯蒂回归-CSDN博客

本节内容:

目录

一、Diabetes Dataset 

二、Multiple Dimension Logistic Regression Model 

三、Mini-Batch (N sample)

1. 化简分析公式

2. 代码

3.Example: Artificial Neural Network

四、写多维输入神经网络

1. Prepare dataset

2. Define Model

3. Construct Loss and Optimizer

4. Training Cycle

5. 结果


一、Diabetes Dataset 

前几节的内容里,我们主要是介绍了下面这两个数据集,一个是用作回归,一个是用作分类。

这两个数据集的差别实际上主要就在于我们这个输出值,对于回归来说,y 属于实数R,对于分类而言,y 是属于一个离散的集合。

接下来,我们看一个新的数据集:Diabetes Dataset  糖尿病数据集

这个数据集的 y 输出的结果只有0和1,所以这是一个分类任务。

每一行叫做 Sample,也就是样本(或叫做 记录)。

每一列叫做Feature,也就是特征 (或叫做 字段)。

在 sklearn 中也有一个糖尿病这样的一个数据集。

粉色划线处:路径地址

圈主的两个红色GZ文件解压后分别得到 X y 这两个工作表(X用记事本打开比较清晰)

回到刚才的数据集:我们将来是把这个数据都出来,把对应的这个输入特征部分,也就是X1到X8撞到矩阵[X]之中。

二、Multiple Dimension Logistic Regression Model 

上节内容里面:

在本节内容里面,有不止一个输入,而是X1到X8。

所以,x\rightarrow x^{(i)}\rightarrow \sum_{n=1}^{8}x_{n}^{(i)}  ,w\rightarrow w_{n} ,\hat{y}\rightarrow \hat{y}^{(i)}

其中, Logistic Function:\sigma (x)=\frac{1}{1+e^{-x}}

三、Mini-Batch (N sample)

1. 化简分析公式

继续化简分析公式:

我们将矩阵转化成向量化的运算之后,我们就可以利用并行计算的能力,比如说GPU的并行或者是CPU的并行能力来提高整个运算的速度。所以我们在很多运算里面,我们必须把它变成一个这个线性的这个变成向量化的计算,然后才能利用这些特性来提高它的运行速度。

2. 代码

class Model(torch.nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        self.linear = torch.nn.Linear(8, 1)
        self.sigmoid = torch.nn.Sigmoid()

    def forward(self, x):
        x = self.sigmoid(self.linear(x))
        return x


model = Model()

我们只需要把上节课的 Linear(1,1) 改成 Linear(8,1). 

如果是Linear(8, 2):

我们这样输出是2个维度,把八维空间将为二维空间,但只能有一个输出,所以我们后面可以再接入一个Linear (2, 1),这样就可以把二维将为一维。

3.Example: Artificial Neural Network

四、写多维输入神经网络

X1 到 X8 是糖尿病病人的一系列相应的一些指标,Y是指1年后病人的病情是否会加重。

我们用神经网络来解决多维输入和前面教的方法一样。

第一步:Prepare dataset   构建数据集

第二步:Design model using Class   设计模型 )

第三步:Construct loss and optimizer  构造损失函数和优化器

第四步:Training cycle  写训练周期

第五步:Prediction  预测结果

1. Prepare dataset

import numpy as np
import torch

xy = np.loadtxt('diabetes.csv'),delimiter=',',dtype=np.float32)
x_data = torch.from_numpy(xy[:,:-1])
y_data = torch.from_numpy(xy[:,[-1]])

2. Define Model

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.sigmoid = torch.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. Construct Loss and Optimizer

求一个小批量的BDE损失函数:

# 损失函数
criterion = torch.nn.MSELoss(size_average=True)
# 优化器
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)

4. Training Cycle

# 训练过程
for epoch in range(1000):
    y_pred = model(x_data)
    loss = criterion(y_pred, y_data)
    print(epoch, loss.ietm())
    optimizer.zero_grad()  # 梯度归零
    loss.backward()
    optimizer.step()  # 更新

5. 结果

特别补充一些激活函数:ReLU就是比较常用的激活函数。

如果要更改激活函数,只需要在  2. Define Model  中更改:

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()  # 将Sigmoid激活函数改为ReLU激活函数
        
    def forward(self,x):
        x = self.activate(self.linear1(x))
        x = self.activate(self.linear2(x))
        x = self.activate(self.linear3(x))  # 将sigmoid改为activate
        return x
    
model = Model()

下节内容:08 加载数据集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值