本节内容是学习 刘二大人的《PyTorch深度学习实践》的 07 Multiple Dimension Input (处理多维特征的输入)。
上节内容:06逻辑斯蒂回归-CSDN博客
本节内容:
目录
二、Multiple Dimension Logistic Regression Model
3.Example: Artificial Neural Network
3. Construct Loss and Optimizer
一、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。
所以, , ,
其中, Logistic Function:
三、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 加载数据集