使用PyTorch处理多维特征输入的完美指南
💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢迎在文章下方留下你的评论和反馈。我期待着与你分享知识、互相学习和建立一个积极的社区。谢谢你的光临,让我们一起踏上这个知识之旅!
文章目录
- 🥦引言
- 🥦前期的回顾与准备
- 🥦代码实现
- 🥦总结
🥦引言
在机器学习和深度学习领域,我们经常会面对具有多维特征输入的问题。这种情况出现在各种应用中,包括图像识别、自然语言处理、时间序列分析等。PyTorch是一个强大的深度学习框架,它提供了丰富的工具和库,可以帮助我们有效地处理这些多维特征输入数据。在本篇博客中,我们将探讨如何使用PyTorch来处理多维特征输入数据。
🥦前期的回顾与准备
这里我们采用一组预测糖尿病的数据集,如下图

这里的每一行代表一个样本,同样的,每一列代表什么呢,代表一个特征,如下图。所以糖尿病的预测由下面这八个特征共同进行决定

按照过去的逻辑回归,应该是下图所示的,因为这是单特征值

但是现在由单特征值已经转变为多特征值了,所以我们需要对每个特征值进行处理,如下图

中间的特征值与权重的点乘可以从矩阵的形式进行表现

因为逻辑回归所以还有套一个Sigmoid函数,通常情况下我们将函数内的整体成为z(i)

注意: Sigmoid函数是一个按向量方式实现的
下面我们从矩阵相乘的形式进行展示,说明可以将一组方程合并为矩阵运算,可以想象为拼接哈。这样的目的是转化为并行运算,从而实现更快的运行速度。

所以从代码的角度去修改,我们只需要改变一下维度就行了
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()
这里的输入维度设置为8,就像上图中展示的x一样是N×8形式的矩阵,而 y ^ \hat{y} y^是一个N×1的矩阵。
这里我们将矩阵看做是一个空间变换的函数
我们可以从下图很好的展示多层神经网络的变换

从一开始的属于8维变为输出6维,再从输入的6维变为输出的4维,最后从输入的4维变为输出的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, 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()
这里我说明一下下面这条语句
- self.sigmoid = torch.nn.Sigmoid():这一行创建了一个 Sigmoid 激活函数的实例,用于在神经网络的正向传播中引入非线性。
后面的前向计算就是一层的输出是另一层输入进行传,最后将 y ^ \hat{y} y^返回
同时我们的损失函数也没有变化,更新函数也没有变化,采用交叉熵和梯度下降

刘二大人这里没有使用Mini-Batch进行批量,后续的学习应该会更新

🥦代码实现
import torch
import torch.nn as nn
import torch.optim as optim
from sklearn import datasets
from sklearn.model_selection import train_test_split
import numpy as np# 载入Diabetes数据集
diabetes = datasets.load_diabetes()# 将数据集拆分为特征和目标
X = diabetes.data # 特征
y = diabetes.target # 目标# 数据预处理
X = (X - np.mean(X, axis=0)) / np.std(X, axis=0) # 特征标准化# 拆分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 转换为PyTorch张量
X_train = torch.FloatTensor(X_train)
y_train = torch.FloatTensor(y_train).view(-1, 1) # 将目标变量转换为列向量
X_test = torch.FloatTensor(X_test)
y_test = torch.FloatTensor(y_test).view(-1, 1)# 构建包含多个线性层的神经网络模型
class DiabetesModel(nn.Module):def __init__(self, input_size):super(DiabetesModel, self).__init__()self.fc1 = nn.Linear(input_size, 64) # 第一个线性层self.fc2 = nn.Linear(64, 32) # 第二个线性层self.fc3 = nn.Linear(32, 1) # 最终输出线性层def forward(self, x):x = torch.relu(self.fc1(x)) # ReLU激活函数x = torch.relu(self.fc2(x))x = self.fc3(x)return x# 初始化模型
input_size = X_train.shape[1]
model = DiabetesModel(input_size)# 定义损失函数和优化器
criterion = nn.MSELoss() # 均方误差损失
optimizer = optim.SGD(model.parameters(), lr=0.01)# 训练模型
num_epochs = 1000
for epoch in range(num_epochs):# 前向传播outputs = model(X_train)loss = criterion(outputs, y_train)# 反向传播和优化optimizer.zero_grad()loss.backward()optimizer.step()if (epoch + 1) % 100 == 0:print(f'Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.item():.4f}')# 在测试集上进行预测
model.eval()
with torch.no_grad():y_pred = model(X_test)# 计算性能指标
mse = nn.MSELoss()(y_pred, y_test)
print(f"均方误差 (MSE): {mse.item():.4f}")
运行结果如下

感兴趣的同学可以使用不同的激活函数一一测试一下
比如我使用tanh函数测试后得到的均方误差就小了许多

此链接是GitHub上的大佬做的可视化函数https://dashee87.github.io/deep%20learning/visualising-activation-functions-in-neural-networks/
🥦总结
这就是使用PyTorch处理多维特征输入的基本流程。当然,实际应用中,你可能需要更复杂的神经网络结构,更大的数据集,以及更多的调优和正则化技巧。但这个指南可以帮助你入门如何处理多维特征输入的问题,并利用PyTorch构建强大的深度学习模型。希望这篇博客对你有所帮助!

挑战与创造都是很痛苦的,但是很充实。
相关文章:
使用PyTorch处理多维特征输入的完美指南
💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…...
萝卜刀玩具上架亚马逊CPC认证测试标准
含铅或含铅涂料儿童产品的要求 分阶段限制儿童产品所有部件的铅含量,要求在3年内将产品任何可接触部件的铅含量限制从不超过重量的600ppm(0.06%)降至不超过重量的100ppm(0.01%)。 铅含量限值(总铅含量占重…...
阶段六-Day03-MyBatis
一、框架介绍 1. 框架的作用 将许多项目封装起来,形成了框架 2. 框架的优缺点 1. 优点 1.1 更好用 框架都是对Java原生内容进行的封装,对于企业级项目开发来说,使用框架比使用原生Java更好用,写起来更简单。 1.2 更强大 框架封装过程…...
探索RPA流程自动化在不同行业的应用案例
随着数字化的推进,企业建设了大量的业务系统,跨系统的业务流程越发复杂,业务孤岛、 流程孤岛、数据孤岛也随之出现,产生了大量需要人工执行的重复性系统操作流程。而使用RPA能将员工从大量的、重复的、高耗时的工作中解放出来&…...
解决gpedit.msc命令无法打开的问题
【win11家庭版】解决gpedit.msc命令无法打开的问题 本地组策略编辑器 echo offpushd "%~dp0"dir /b %systemroot%\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >gp.txtdir /b %systemroot%\servicing\Packages\…...
一大突破!清华大学研制出首颗忆阻器存算一体芯片
这几天清华大学又火出圈了。但这次并不是因为招生抢人和饭堂,而是清华大学的芯片研发团队研制出全球首颗全系统集成的存算一体芯片。这是我国、乃至全世界对半导体行业的又一重大突破。 这个芯片由清华大学集成电路学院教授吴华强副教授高滨团队基于存算一体计算范…...
JUC的线程池架构
🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开心好久好久😎 📚系列专栏:Java全栈,…...
PostgreSQL limit 语法
PostgreSQL limit 语法 LIMIT 是 PostgreSQL 中用于限制查询结果数量的关键字。其语法如下: SELECT column1, column2, ... FROM table_name LIMIT number_of_rows;其中,SELECT 语句用于指定要查询的列和数据表,LIMIT 用于指定查询结果的行…...
CUDA C编程权威指南:2.1-CUDA编程模型
本文主要通过例子介绍了CUDA异构编程模型,需要说明的是Grid、Block和Thread都是逻辑结构,不是物理结构。实现例子代码参考文献[2],只需要把相应章节对应的CMakeLists.txt文件拷贝到CMake项目根目录下面即可运行。 1.Grid、Block和Thread间的…...
两条记录合并成一条记录
两条记录合并成一条记录 两条记录 val4,type_idlevel 和 val6,type_idtypeId 合并成一条记录 level4,typeId6 可以使用 条件聚合语句 CASE WHEN … 和 MAX 函数来实现。假设有以下 my_table 表: --------------------- | id | val | type_id | --------------…...
vue3 + typescript + vite + naive ui + tailwindcss + jsx 仿苹果桌面系统
基于 vue3.x typescript vite naive ui tailwindcss jsx vue-router pinia,项目使用 tsx 作为模版输出,全程没有使用vue提供的SFC, 仿macos桌面前端项目,开源免费模版,希望减少工作量和学习新技术,希…...
揭秘,用软件一秒识别纸质表格数字,找到你想要的一串数字
要将纸质表格的数字快速用软件识别并找出特定的一串数字,以下是三种常用的方案: 方案一:使用OCR软件识别和搜索功能 1. 扫描纸质表格并保存为图像或PDF格式。 2. 使用OCR(光学字符识别)软件,如金鸣表格文字…...
解析图片文件格式
图片文件幻数 关于JPEG格式 二进制形式打开文件,文件开始字节为FF D8,文件结束两字节为FF D9 JPEG 文件有两种不同的元数据格式:JFIF 和 EXIF。 JFIF 以 ff d8 ff e0 开头,EXIF 以 ff d8 ff e1 开头。 代码示例 private static…...
新的“HTTP/2 快速重置”零日攻击打破了 DDoS 记录
自 8 月份以来,一种名为“HTTP/2 快速重置”的新 DDoS(分布式拒绝服务)技术已被作为零日漏洞积极利用,其规模打破了之前的所有记录。 Amazon Web Services、Cloudflare 和 Google 今天联合发布了有关零日技术的消息,他…...
现代化战机之路:美国空军U-2侦察机基于Jenkins和k8s的CI/CD架构演进
▲ 点击上方"DevOps和k8s全栈技术"关注公众 华为北京研究所Q27大楼 随着技术的不断进步,军事领域也在积极采纳现代化工具来提高战备水平和效率。美国空军的U-2侦察机项目是一个鲜明的例子,它成功地借助Jenkins和Kubernetes(k8s&…...
Linux中常用的软件:Squid
在Linux系统中,有许多不同的代理软件可供选择。本文将比较两个常用的代理软件: Squid。我们将介绍它们的特点、使用场景和优缺点,帮助您选择适合自己需求的代理软件。 - 支持多种加密协议,包括AES、ChaCha20和RC4等,可…...
Ali MaxCompute SDK
ALI MC 文件读写 public abstract BufferedInputStream readResourceFileAsStream(String var1) throws IOException;LocalExecutionContext.java Overridepublic BufferedInputStream readResourceFileAsStream(String resourceName) throws IOException {try {return wareHou…...
解决element中table在页面切换时候表格底部出现空白
activated(){ this.$refs.table.doLayout() } activated()是Vue中一个很重要的生命周期函数,它是在组件大概率会被复用时调用的。当组件被复用时,原来的组件的数据和状态必须得到保留。activated()函数能够保持组件在别处被活化时的状态数据。 activat…...
Vue中对路由的进阶学习
路由进阶 文章目录 路由进阶1、路由的封装抽离2、声明式导航2.1、导航链接2.2、高亮类名2.3、跳转传参2.4、动态路由参数可选符 3、Vue路由--重定向4、Vue路由--4045、Vue路由–模式设置6、编程式导航6.1、基本跳转6.2、跳转传参 路由基础入门 1、路由的封装抽离 问题&#x…...
Vuex的同步存值与取值及异步请求
前言 1.概念 Vuex是一个用于管理Vue.js应用程序中状态的状态管理模式和库。Vue.js是一个流行的JavaScript框架,用于构建用户界面,而Vuex则专门用于管理应用程序的状态,以确保状态在整个应用程序中保持一致和可维护。 2.Vuex的特点…...
从L298到自举H桥:深入聊聊直流电机驱动方案的演进与选型心得
从L298到自举H桥:直流电机驱动方案的技术演进与工程实践 在机器人底盘、自动化产线和智能硬件开发中,直流电机驱动电路的设计往往决定着整个系统的性能天花板。十年前我们可能还在用L298这类经典驱动芯片,如今工程师们的工具箱里已经出现了IR…...
拆解RoboteX AVATAR机器人:4个电机如何驱动履带+摇臂?一份紧凑传动布局的保姆级图解
RoboteX AVATAR机器人传动系统深度解析:四电机协同驱动履带与摇臂的机械艺术 当第一次看到RoboteX AVATAR Tactical Robot在复杂地形中自如穿梭的视频时,很难不被它那看似简单却异常高效的移动方式所吸引。这款战术机器人的核心秘密,就藏在它…...
J-Link驱动签名被拦?手把手教你用WHQL签名驱动搞定Windows 11安全策略
J-Link驱动签名被拦?手把手教你用WHQL签名驱动搞定Windows 11安全策略 最近在帮团队调试一批新的STM32H7开发板时,遇到了一个令人头疼的问题:明明上周还能正常使用的J-Link调试器,在新的Windows 11企业版电脑上突然无法识别了。设…...
uniapp日期处理全攻略:获取某月首尾日、近七天日期等实用技巧
Uniapp日期处理实战:从基础格式化到高级业务场景解决方案 在移动应用开发中,日期处理几乎贯穿所有业务场景。无论是电商平台的限时抢购、医疗应用的预约挂号,还是企业系统的报表统计,精准高效的日期操作都是保障业务逻辑完整性的关…...
Wan2.2-I2V-A14B与数据库联动:自动化生成电商商品动态详情页视频
Wan2.2-I2V-A14B与数据库联动:自动化生成电商商品动态详情页视频 1. 电商视频制作的痛点与机遇 电商平台每天都有大量新品上架,传统的商品详情页视频制作方式面临巨大挑战。一个中型电商平台每月可能新增上千款商品,如果每款商品都需要人工…...
告别代码噩梦:用Awesome-Dify-Workflow零代码30分钟实现企业级登录系统
告别代码噩梦:用Awesome-Dify-Workflow零代码30分钟实现企业级登录系统 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程,自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Trending/…...
Windows 11安卓子系统实战:无需商店直装APK的终极指南
1. Windows 11安卓子系统核心概念解析 Windows 11安卓子系统(Windows Subsystem for Android,简称WSA)是微软推出的重磅功能,它让Windows系统首次实现了原生运行安卓应用的能力。这个功能本质上是在Windows内核层构建了一个轻量化…...
Nuitka打包Python脚本为.exe的完整避坑指南(含Selenium解决方案)
Nuitka打包Python脚本为.exe的完整避坑指南(含Selenium解决方案) 将Python脚本打包成独立的可执行文件是许多开发者面临的常见需求,尤其是当需要分发工具或应用给没有Python环境的用户时。Nuitka作为一款强大的Python编译器,能够将…...
深入解析Cache工作原理与多核一致性机制
深入理解Cache工作原理与技术实现1. 计算机体系中的Cache基础1.1 Cache存在的必要性现代计算机系统中,处理器性能与存储器访问性能之间存在显著差距。从历史发展数据来看,CPU计算性能每18个月翻一番(遵循摩尔定律),而D…...
量子行走:从理论到Python实现——3. 量子门、电路与编程基础
目录 3. 量子门、电路与编程基础 3.1 单量子比特门 3.1.1 泡利门与旋转门 3.1.2 哈达玛门与相位门 3.2 多量子比特门 3.2.1 受控门 3.2.2 纠缠门与SWAP操作 3.3 量子电路构建与优化 3.3.1 电路表示与DAG结构 3.3.2 变分电路 3. 量子门、电路与编程基础 量子计算体系的…...

