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

PyTorch深度学习实践——对维度的认识 在本节的博客中将叙述,如何使用PyTorch实现线性回归以及整理对于输入输出维度的相关认识,总结如下: 输入输出维度 在之前发布的博客《PyTorch深度学习实践——反向传播》中谈到了自己对于一个模型输入的维度认识:不同的维度类似于不同的属性,从不同的方向上来描述一个模型,使得模型愈加的丰满具体。 但这种理解太过于抽象,没有实际的理论依据,自己在没有引入向量和矩阵的相关概念来讨论维度也显得非常不严谨而且让人容易混淆,因此在使用PyTorch实现线性回归时... 阅读详情
AI摘要

本文介绍了如何使用深度学习处理糖尿病患者数据,通过构建一个多层神经网络,从8个特征预测病情发展趋势。重点讲解了模型从单特征到多特征的转变,以及如何利用Mini-Batch加速运算,并提供了相关代码实例和训练过程。

目录

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函数中,获得 \widehat{y}(i) 值。

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 x

model = 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 np
import torch
import matplotlib.pyplot as plt

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]])


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 x


model = 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()

部分运行截图如下:

【pytorch笔记】损失函数nll_loss 本文主要讲解在使用pytorch中对损失函数`nll_loss`的一些理解与思考。 阅读详情

相关推荐

深度学习-处理多维度特征的输入 -Multiple Dimension Input-自用笔记6

深度学习-处理多维度特征的输入 -Multiple Dimension Input-自用笔记6 多维度特征的数据集 每一行代表一个样本,每一列代表一重要特征Feature 一个样本特征多个的计算图如图所示 多个样本多个特征的计算图如图所示 模型采用一层线性函数self.linear = torch.nn.Linear(8, 1),函数的输入的特征维度为8,输出的维度为1,如下图 若线性层函数采用输入的特征维度为8,输出的维度为2,如下图: 若线性层函数采用输入的特征维度为8,输出的维度为6,如

qq_42764492的博客 7564

多维特征输入,多层神经网络学习

首先对多维特征进行解释: 如有一个y,他的值由8个x(x1,x2,x3~~)决定,那么x就有8个维度。 我们的linear所作的事就是y=wx+b,其中每一个量都是向量,因此可以处理多维度数据。 如x有8个维度,y有一个维度,那么可以写成self.linear=torch.nn.Linear(8,1) 内部过程就是: y(N*1),x(N*8)(表示y一维,x8维,总共有N个数据),那么w就是(8*1),矩阵乘法就成了 那么w一定要(8*1)吗?当然不,可...

LI_XIAO_XING的博客 2633

Pytorch深度学习实践第七讲 处理多维特征的输入

Pytorch深度学习实践第六讲 B站 刘二大人 传送门 处理多维特征的输入 本节用的是糖尿病数据集,老师放的百度云课件中有数据集压缩包,自行下载。 链接:[https://pan.baidu.com/s/1vZ27gKp8Pl-qICn_p2PaSw](https://pan.baidu.com/s/1vZ27gKp8Pl-qICn_p2PaSw) 提取码:cxe4 import numpy as np import torch import matplotlib.pyplot as plt #-

weixin_46047643的博客 466

神经网络和深度学习-处理多维特征的输入

神经网络和深度学习-处理多维特征的输入

Ricardo_PING的Blog 2221

龙良曲pytorch基础课程学习笔记

什么是Pytorch? PyTorch 是一个基于 Python 的科学计算包,主要定位两类人群: NumPy 的替代品,可以利用 GPU 的性能进行计算 深度学习研究平台拥有足够的灵活性和速度 开始学习 tensor对象 在 TensorFlow 中,数据不是以整数,浮点数或者字符串形式存在的,而是被封装在一个叫做 tensor 的对象中。Tensor是张量的意思,张量包含了0到任意维度的量...

kexiaoleqq的博客 4047

带你一文透彻学习【PyTorch深度学习实践】分篇——逻辑回归、处理多维特征的输入

本篇是【PyTorch深度学习实践】系列文章,这次介绍逻辑回归以及如何处理多维特征的输入。在逻辑回归中,由普通的线性回归模型到二分类模型,为何要增添sigmoid函数,阅读本篇,你会有一个自己的理解;同时,损失函数的变化,即有MSE均方误差损失函数到BCELoss二分类损失函数,是如何过渡的,你也会有一个自己的理解。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 549

《PyTorch深度学习实践》 课堂笔记 Lesson7 神经网络多维特征输入的原理推导与实现

文章目录1.实现过程1.1源代码1.2训练结果 1.实现过程 1.1源代码 # -*- coding:utf-8 -8- """ Author: Leung Date: 2021--08--04 """ import numpy as np import torch import matplotlib.pyplot as plt # 导入数据 xy = np.loadtxt('diabetes.csv.gz', delimiter=',', dtype=np.float32) # 以逗号作为分隔符,.

LeungSr的博客 883

Cadence SKILL 语言实战指南:从函数列表到高效自动化脚本

本文是Cadence SKILL语言实战指南,旨在帮助芯片设计工程师从掌握核心函数列表出发,高效构建自动化脚本。文章详细解析了数据处理、数据库访问、流程控制及错误处理四类关键函数,并通过版图层批量修改与参数化单元生成两大实战场景,演示如何将函数组合成解决实际问题的自动化方案,从而显著提升Virtuoso环境下的工作效率。

beta5的博客 705

Pytorch深度学习——用Mini-Batch训练数据(B站刘二大人P8学习笔记)

先前我们学习的内容一种情况是采用Full-Batch来训练数据,还有一种情况是在随机梯度下降中,只去其中一个数据来计算梯度,这种情况可以使我我们很好的解决训练数据时遇到的鞍点问题,但是会导致时间过长。所以,接下来我们要学习的是采用Mini-Batch的方法来训练数据,这种方式可以均衡性能和训练时间上的需求。 Epoch Batch-Size Iteration shuffle 是否打乱顺序

Learning_AI的博客 7411

【MATLAB+VScode】VScode调试MATLAB代码的终极指南

本文详细介绍了在VScode中调试MATLAB代码的完整方案。通过配置MATLAB Engine for Python作为桥梁,实现在VScode中设置断点、单步执行、查看变量等交互式调试功能,有效结合了VScode的现代化编辑体验与MATLAB的强大计算内核,显著提升开发效率。

weixin_29161719的博客 412

逆向实战:Soul聊天协议加密与Frida绕过检测

本文详细解析了Soul聊天协议逆向分析的全过程,重点介绍了如何利用Frida绕过应用的反调试检测机制。通过静态分析定位关键SO库,并编写Frida脚本动态Hook线程创建函数,成功实现对抗。文章还进一步追踪了基于DES算法的加密流程,并探讨了协议数据结构的解析方法,为移动应用安全研究提供了实战参考。

2w3e4r5t6y的博客 1133

PyTorch深度学习实践概论笔记7-处理多维特征的输入

单维:输入x是一个实数 多维输入:x有多个不同的特征,预测对应的分类 对于回归问题:输出值y是一个实数 对于分类问题:输出y属于一个离散的集合 Diabetes Dataset 对于上面这个数据集,在机器学习中每一行叫做一个样本,每一列叫做一个特征。在数据库中,每一行叫做一个记录,每一列叫做一个字段。 Multiple Dimension Logistic Regression Model 在机器学习里面,拿到数据表之后,把内容分成两部分,一部分作为输入x,另一部分作为输入y...

csdn_xmj的博客 2406

小白的MatSWMM使用心路(二)——用matlab修改INP文件参数/使用matlab查找txt内容并修改多行内容

说是修改inp,但是里面的内容大部分还是讲怎么修改txt的……(?)。包含如何找到需要的参数(关键字)位置,以及修改那个位置的txt这样的内容。希望能帮助大家吧……Matlab你要多出好用的功能啊!

weixin_44276743的博客 4530

pytorch深度学习入门 第7讲(处理多维度特征的输入)

在神经网络中,我们的目标是将一个多维空间非线性地映射到一个1维空间,为了使我们的模型更加复杂,可以将模型进行多次线性变换,并在每个linear后边加一个sigmoid激活函数引入非线性。注意:这里并没有做mini-batch的操作,而是把所有数据都放到model了,后面会讲如何做mini-batch操作。这里训练1000,loss还是很大,应该是要训练更多epoch,所以这里先不写测试了,麻烦。对于每个样本xi->yi的计算过程如上图,x的每个特征都要乘以一个w。还是以二分类问题为例,输入转换为多个维度。

xml的博客 439

用群辉NAS打造影视墙(Jellyfin篇)

之前的文章提到过,用群辉NAS组建影视播放系统可以采用官方提供的Video Station套件,不过影视信息配比较差,响应速度也欠佳,今天我们就聊聊别的套件。在影音媒体方面,常见的还有Emby、Plex、Jellyfin。本文主讲Jellfin的原因是它胜在免费,而且功能比较齐全,完全够用。详细信息可以参考Jellyfin的官网:https://jellyfin.org/

dgnankai的专栏 7323

9、眼底图像智能分析:糖尿病视网膜病变的自动化识别与分级系统

本博客介绍了一种基于深度学习的糖尿病视网膜病变(DR)自动化识别与分级系统。该系统通过视网膜图像的预处理、数据增强、集成模型的构建与优化,实现了对DR的高效识别与分级。识别系统采用二分类任务,准确率达到97.67%,而分级系统通过四分类策略取得了95.2%的准确率。系统在基层社区和医院中具有广泛的应用前景,为DR的早期筛查和精准诊断提供了有效工具。

pea55的博客 144

Pytorch深度学习笔记(八)处理多维度特征的输入

一个八维数据集:数据集,每一行称为一个样本,每一列称为一个特征。回归模型的更改:n维的输入向量x和n维的权重w的转置作内积 + 广播处理的偏移量b,得到的1维的预测值,再使用logistic函数进行映射。使用对输入维度和输出维度进行调整。如下图所示,可以使8个维度的输入张量映射到1个维度的输出张量。可以从n维的输入直接映射到1维的输出,也可以分多层一步一步的进行映射,例如:从8维映射到6维,再从6维映射到4维,再从4维映射到2维,再从2维映射到2维。

qq_45981086的博客 1997

Python爬虫零基础入门【第九章:实战项目教学·第17节】内容指纹去重:URL 变体/重复正文的识别!

我长期专注 Python 爬虫工程化实战,主理专栏 👉 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 824

pytorch 深度学习实践 第7讲 处理多维特征输入

本文从logistic 回归模型来讲解了多维特征输入的处理,具体内容包括多维logistic的模型讲解,生成多层神经网络的简单原理和过程,以及最后的代码实现。

晓木木的博客 827

基于形状的模板匹配之候选点选择

基于形状的匹配匹配,顶层金字塔提取候选点

manuoo的专栏 2767

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

PyTorch深度学习实践 第7讲 处理多维特征的输入

扩展一下:一层--->多层 首尾相连,构成多层。

weixin_45963712的博客 209

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

刘二大人《PyTorch深度学习实践》笔记 + 作业

课程链接 1. Overview 人类智能(Human Intelligence) 推理 infer 预测(prediction):实体——抽象概念 而 machine learning 就是把推理的大脑变成算法 How to develop learing system? 基于规则的算法(人工智能程序):依赖于规则,需要非常专业的背景知识来制定规则,构建知识库。如果是很复杂的目标,是很难把规则做通的,肯定会漏一些,导致算法有缺陷。规则只会越来越多,越来越庞大,直到人类无法维护。注意,基于规则的并不是

qq_39804263的博客 7573

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【PyTorch深度学习实践】-- 多维度的输入

PyTorch深度学习实践

qq_46656857的博客 1184

【刘二大人】《PyTorch深度学习实践》——逻辑斯蒂回归--处理多维特征的输入--代码(自用)

【刘二大人】《PyTorch深度学习实践》——逻辑斯蒂回归--处理多维特征的输入--代码(自用)

m0_63829662的博客 38

【神经网络】多维特征回归模型

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

weixin_44708254的博客 793

【PyTorch】深度学习实践之多维度输入Multiple Dimension Input

多维度输入Multiple Dimension Input

zoetu 2054
上一篇: ACM练习——三整数排序,从键盘输入三个整数x,y和z,按从大到小的顺序输出它们的值。(Python)
下一篇: Pytorch深度学习——不同激活函数处理多维特征的输入(B站刘二大人P7作业)
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习CV的研一小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值