资讯专栏INFORMATION COLUMN

Pytorch深度学习——处理多维度特征的输入(B站刘二大人P7学习笔记)

Kaede / 3057人阅读

摘要:注在数据库中的表,每一行表示一个记录,每一列表示一个字段而在深度学习的数据集中,每一行表示一个分类,每一列表示一个特征。

目录

1 模型的改变

1.1 采用Mini-Batch(N samples)的形式

2 代码的改变

2.1 构造一个多层的神经网络

2.2 代码的改变

2.2.1  数据集

2.2.2  定义多层次的神经网络函数

2.2.3  损失函数和优化器

2.2.4 训练函数

2.2.5 完整代码


      本节课以糖尿病病人的数据集为例展开,如图所示是糖尿病病人的数据集,其中X1~X8表示病人8项特征的详细数据,Y表示未来一年内糖尿病病人的病情是否会加重。而我们需要做的事情就是:根据数据集中的数据,利用深度学习,让机器能够自己判断Y的取值(1表示未来一年糖尿病会加重,0表示未来一年糖尿病不会加重)。

      X1~X8的值构成一个八维矩阵,Y构成一个一维矩阵,就完成输入的数据集。

      注:在数据库中的表,每一行表示一个记录,每一列表示一个字段;而在深度学习的数据集中,每一行表示一个分类,每一列表示一个特征。


1 模型的改变

       在之前的学习中,因为一个样本里只有一个特征,所以只用这单个特征值乘以权重在加上偏置量,输入Sigmoid函数中,即可得到一个0到1之间的数值;

       但在本节课,一个样本里有八个特征,但计算的最终结果需要是一个实数,所以将样本中的每一个特征值都都和一个权重相乘再求和,再加一个偏置量 ,最后整体再录入到sigmoid函数中,获得  值。

1.1 采用Mini-Batch(N samples)的形式

       采用Mini-Batch的形式可以将方程运算转换矩阵的运算。

       为什么要把方程运算转换成矩阵运算?

       把方程运算转换成矩阵这种向量化的运算之后,可以利用计算机GPU/CPU的并行运算的能力来提高整个运算的速度。

 模型的改变:

       Pytorch提供的Sigmoid函数是一个按照向量内每个元素计算的函数(Sigmoid function is in an element-wise dashion.)


2 代码的改变

2.1 构造一个多层的神经网络

       神经网络层次叠加的过程,就是维度不断下降的过程。如下图所示,就是多层神经网络不断嵌套的过程:

        神经网络的本质:就是寻找一种最优的非线性的空间变换函数。而这种非线性的空间变换函数是通过多个线性变换层,通过找到最优的权重,组合起来的模拟的一种非线性的变化。

        为什么选择Sigmoid函数,因为激活函数(Sigmoid函数)可以将线性变换增加一些非线性的因子,这样我们就可以拟合一些非线性的变换。(如果每一层的神经网络只是不断的叠加线性函数的话,最终的函数还会只是一个线性函数。)

(神经网络并不是学习能力越强越好,学习能力太强,会学习数据集中的一些噪声,并不利于优化模型)

2.2 代码的改变

本例中并没有采用Mini-Batch的方法,依然采用的是full-batch。

2.2.1  数据集

将糖尿病数据集为解压文件放在与代码同目录下,如下图:

数据集下载地址:链接:百度网盘 请输入提取码   提取码:vlfd

 具体代码如下:

xy = np.loadtxt("diabetes.csv.gz", delimiter=",", dtype=np.float32)# 取前8列x_data = torch.from_numpy(xy[:, :-1])# 取最后1列y_data = torch.from_numpy(xy[:, [-1]])

2.2.2  定义多层次的神经网络函数

代码如下:

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, 2)        self.linear4 = torch.nn.Linear(2, 1)        self.sigmoid = torch.nn.Sigmoid()    def forward(self, x):        # 注意所有输入参数都使用x        x = self.sigmoid(self.linear1(x))        x = self.sigmoid(self.linear2(x))        x = self.sigmoid(self.linear3(x))        x = self.sigmoid(self.linear4(x))        return xmodel = Model()

2.2.3  损失函数和优化器

损失函数如下:

      损失函数依然采用交叉熵公式,但是需要取均值,所有reduction=‘mean’,课堂中老师讲的size_average=True 已经弃用。具体代码如下:

criterion = torch.nn.BCELoss(reduction="mean")optimizer = torch.optim.SGD(model.parameters(), lr=0.1)

2.2.4 训练函数

具体代码如下:

for epoch in range(1000000):    y_pred = model(x_data)    loss = criterion(y_pred, y_data)    print(epoch, loss.item())    # 反馈    optimizer.zero_grad()    loss.backward()    optimizer.step()

2.2.5 完整代码

import numpy as npimport torchimport matplotlib.pyplot as pltxy = np.loadtxt("diabetes.csv.gz", delimiter=",", dtype=np.float32)# 取前8列x_data = torch.from_numpy(xy[:, :-1])# 取最后1列y_data = torch.from_numpy(xy[:, [-1]])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, 2)        self.linear4 = torch.nn.Linear(2, 1)        self.sigmoid = torch.nn.Sigmoid()    def forward(self, x):        # 注意所有输入参数都使用x        x = self.sigmoid(self.linear1(x))        x = self.sigmoid(self.linear2(x))        x = self.sigmoid(self.linear3(x))        x = self.sigmoid(self.linear4(x))        return xmodel = Model()criterion = torch.nn.BCELoss(reduction="mean")optimizer = torch.optim.SGD(model.parameters(), lr=0.1)for epoch in range(1000000):    y_pred = model(x_data)    loss = criterion(y_pred, y_data)    print(epoch, loss.item())    # 反馈    optimizer.zero_grad()    loss.backward()    optimizer.step()

部分运行截图如下:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/123508.html

相关文章

  • 从零开始PyTorch项目:YOLO v3目标检测实现

    摘要:全卷积神经网络仅使用卷积层,这就使其成为全卷积神经网络。输入图像中包含了真值对象框中心的网格会作为负责预测对象的单元格。在图像中,它是被标记为红色的单元格,其中包含了真值框的中心被标记为黄色。在过去几个月中,我一直在实验室中研究提升目标检测的方法。在这之中我获得的较大启发就是意识到:学习目标检测的较佳方法就是自己动手实现这些算法,而这正是本教程引导你去做的。 在本教程中,我们将使用 P...

    sourcenode 评论0 收藏0
  • 15个Python库,让你学习数据科学更轻松

    摘要:在本节中,我们将看到一些最流行和最常用的库,用于机器学习和深度学习是用于数据挖掘,分析和机器学习的最流行的库。愿码提示网址是一个基于的框架,用于使用多个或进行有效的机器学习和深度学习。 showImg(https://segmentfault.com/img/remote/1460000018961827?w=999&h=562); 来源 | 愿码(ChainDesk.CN)内容编辑...

    W4n9Hu1 评论0 收藏0
  • 从框架优缺点说起,这是一份TensorFlow入门极简教程

    摘要:第一个主流产品级深度学习库,于年由启动。在年月日宣布,的开发将终止。张量中最基本的单位是常量变量和占位符。占位符并没有初始值,它只会分配必要的内存。是一个字典,在字典中需要给出每一个用到的占位符的取值。 为什么选择 TensorFlow?在本文中,我们将对比当前最流行的深度学习框架(包括 Caffe、Theano、PyTorch、TensorFlow 和 Keras),帮助你为应用选择最合适...

    AlphaWatch 评论0 收藏0
  • TensorFlow和PyTorch相继发布最新版本,有什么变化?

    摘要:统计分布库的初始版本。允许将边界传递到最优化接口。从版本开始,这样的模型将接受导出时指定的密钥。更新示例以使用,并移动到中。此外,此更改增加了设备列表中的主要以支持指定。广播语义密切跟随式广播。 Tensorflow主要特征和改进在Tensorflow库中添加封装评估量。所添加的评估量列表如下:1. 深度神经网络分类器(DNN Classifier)2. 深度神经网络回归量(DNN Regr...

    Jrain 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<