当前位置: 首页 > news >正文

动手学深度学习2025.1.23

一、预备知识

1.数据操作

(1)数据访问:

一个元素:[1,2] //行下标为1,列下标为2的元素

一行元素:[1,:] //行下标为1的所有元素

一列元素:[:,1] //列下标为1的所有元素

子区域:[1:3,1:] //行下标为[1,3),列下标为[1,+无穷)的所有元素

子区域:[::3,::2] //行下标跨度为3,列下标跨度为2的元素

(2)张量(tensor):

理解Tensorflow中的张量:从零维到四维-CSDN博客

一种多维数组,可以用来表示各种物理量和几何量。

张量连结:是一种将多个张量沿着某一维度合并的操作。

torch.cat()

torch.cat() 是 PyTorch 中用于张量拼接的主要函数,其语法如下:

torch.cat(tensors, dim=0)
  • tensors:一个包含多个张量的序列,这些张量需要在指定维度上具有相同的形状。

  • dim:指定拼接的维度。

  1. 一维张量拼接

    tensor_a = torch.tensor([1, 2, 3])
    tensor_b = torch.tensor([4, 5, 6])
    concatenated = torch.cat((tensor_a, tensor_b), dim=0)  # 结果为 [1, 2, 3, 4, 5, 6]

    输出形状为 (6,)

  2. 二维张量拼接

    tensor_1 = torch.tensor([[1, 2], [3, 4]])
    tensor_2 = torch.tensor([[5, 6], [7, 8]])
    concatenated_dim0 = torch.cat((tensor_1, tensor_2), dim=0)  # 沿第0维拼接
    concatenated_dim1 = torch.cat((tensor_1, tensor_2), dim=1)  # 沿第1维拼接

    输出形状分别为 (4, 2)(2, 4)

  3. 高维张量拼接

    tensor_3d_1 = torch.randn(2, 3, 4)
    tensor_3d_2 = torch.randn(2, 3, 4)
    concatenated_dim2 = torch.cat((tensor_3d_1, tensor_3d_2), dim=2)  # 沿第2维拼接

    输出形状为 (2, 3, 8)

    =>张量的初始形状和内容

    tensor_5 = torch.tensor([[[2, 3, 5]], [[9, 0, 2]]])
    tensor_6 = torch.tensor([[[4, 5, 9]], [[3, 6, 4]]])
    • 形状tensor_5tensor_6 的形状都是 (2, 1, 3)

    • 内容

      • tensor_5 包含两个矩阵:

        [[[2, 3, 5]],[[9, 0, 2]]]
      • tensor_6 包含两个矩阵:

        [[[4, 5, 9]],[[3, 6, 4]]]

    =>在不同维度上拼接的结果

    1. 沿 dim=2 拼接

    dim2 = torch.cat((tensor_5, tensor_6), dim=2)
    • 拼接维度dim=2 是每个矩阵的列方向(最内层的维度)。

    • 拼接过程

      • 第一个矩阵的第0行:

        • tensor_5[2, 3, 5]tensor_6[4, 5, 9] 拼接为 [2, 3, 5, 4, 5, 9]

      • 第二个矩阵的第0行:

        • tensor_5[9, 0, 2]tensor_6[3, 6, 4] 拼接为 [9, 0, 2, 3, 6, 4]

    • 结果

      tensor([[[2, 3, 5, 4, 5, 9]],
      ​[[9, 0, 2, 3, 6, 4]]])
    • 形状(2, 1, 6)

      • 第0维(矩阵数量):2。

      • 第1维(行数):1。

      • 第2维(列数):6(拼接后的列数)。

    1. 沿 dim=0 拼接

    dim0 = torch.cat((tensor_5, tensor_6), dim=0)
    • 拼接维度dim=0 是最外层的维度,表示矩阵的数量。

    • 拼接过程

      • tensor_5 的两个矩阵和 tensor_6 的两个矩阵依次排列。

    • 结果

      tensor([[[2, 3, 5]],
      ​[[9, 0, 2]],
      ​[[4, 5, 9]],
      ​[[3, 6, 4]]])
    • 形状(4, 1, 3)

      • 第0维(矩阵数量):4(拼接后的矩阵数量)。

      • 第1维(行数):1。

      • 第2维(列数):3。

    1. 沿 dim=1 拼接

    dim1 = torch.cat((tensor_5, tensor_6), dim=1)
    • 拼接维度dim=1 是每个矩阵的行方向。

    • 拼接过程

      • 第一个矩阵:

        • tensor_5 的第0行 [2, 3, 5]tensor_6 的第0行 [4, 5, 9] 拼接为:

          [[2, 3, 5],[4, 5, 9]]
      • 第二个矩阵:

        • tensor_5 的第0行 [9, 0, 2]tensor_6 的第0行 [3, 6, 4] 拼接为:

          [[9, 0, 2],[3, 6, 4]]
    • 结果

      tensor([[[2, 3, 5],[4, 5, 9]],
      ​[[9, 0, 2],[3, 6, 4]]])
    • 形状(2, 2, 3)

      • 第0维(矩阵数量):2。

      • 第1维(行数):2(拼接后的行数)。

      • 第2维(列数):3。

    =>多维拼接总结

    1. 拼接维度dim 参数决定了拼接的方向。

    2. 张量的形状:拼接时,除了拼接维度外,其他维度的大小必须一致。

    • dim=0:沿着最外层维度拼接,增加矩阵的数量。

    • dim=1:沿着行方向拼接,增加行数。

    • dim=2:沿着列方向拼接,增加列数。

    (3)节省内存

    尽量进行原地操作,节省内存开销

    before = id(X)
    X += Y
    id(X) == before
    1. id(X) 的含义

    id(X) 返回变量 X 所指向的对象的内存地址。如果 X 的内容被修改,但变量 X 仍然指向同一个对象,那么 id(X) 的值不会改变。

    2. 原地操作(In-place Operations)

    在 Python 中,某些操作会直接修改对象的内容,而不是创建一个新的对象。例如:

    • X += Y 是一个原地操作,它会直接修改 X 的内容,而不是创建一个新的对象。

    1. 原地操作X += Y 是原地操作,它直接修改了 X 的内容,而不是创建新的对象。

    2. id() 的稳定性:由于 X 的内存地址没有改变,id(X) 的值在操作前后保持一致。

    3. Python 的内存管理:Python 的内存管理机制允许某些操作直接修改对象的内容,而不是创建新的对象,这有助于节省内存和提高效率。

    如果使用非原地操作(例如 X = X + y),结果会有所不同:

    Python复制

    before = id(X)
    X = X + Y
    id(X) == before  # 这将返回 False

    在这种情况下, X = X + Y 会创建新的对象,并将 X 指向这个新对象。因此,id(X) 的值会发生变化。

    (3)Numpy数组

    NumPy(Numerical Python)数组是 Python 中用于高效数值计算的核心数据结构。它是 NumPy 库的基础,提供了多维数组对象(ndarray)和一系列操作这些数组的工具。

    A = X.numpy()
    B = torch.tensor(A)
    type(A), type(B)

2.数据预处理

将工作目录改为D盘的目录

os.getcwd()

'C:\Users\aospr'

target_dir = r"D:\深度学习\数据demo"

os.chdir(target_dir)

os.getcwd()

'D:\深度学习\数据demo'

解决将NaN填充成平均值的bug:

inputs = inputs.fillna(inputs.mean(numeric_only=True)) # 计算均值,只对数值列生效

相关文章:

动手学深度学习2025.1.23

一、预备知识 1.数据操作 (1)数据访问: 一个元素:[1,2] //行下标为1,列下标为2的元素 一行元素:[1,:] //行下标为1的所有元素 一列元素:[:,1] //列下标为1的所有元素 子区域:[…...

生存网络与mlr3proba

在R语言中,mlr3包是一个用于机器学习的强大工具包。它提供了一种简单且灵活的方式来执行超参数调整。 生存网络是一种用于生存分析的模型,常用在医学和生物学领域。生存分析是一种统计方法,用于研究事件发生的时间和相关因素对事件发生的影响。生存网络可以用来预测个体在给…...

C#与AI的共同发展

C#与人工智能(AI)的共同发展反映了编程语言随着技术进步而演变,以适应新的挑战和需要。自2000年微软推出C#以来,这门语言经历了多次迭代,不仅成为了.NET平台的主要编程语言之一,还逐渐成为构建各种类型应用程序的强大工具。随着时…...

2000-2020年各省第二产业增加值数据

2000-2020年各省第二产业增加值数据 1、时间:2000-2020年 2、来源:国家统计局、统计年鉴、各省年鉴 3、指标:行政区划代码、地区、年份、第二产业增加值 4、范围:31省 5、指标解释:第二产业增加值是指在一个国家或…...

【MySQL】 库的操作

欢迎拜访:雾里看山-CSDN博客 本篇主题:【MySQL】 库的操作 发布时间:2025.1.23 隶属专栏:MySQL 目录 库的创建语法使用 编码规则认识编码集查看数据库默认的编码集和校验集查看数据库支持的编码集和校验集指定编码创建数据库验证不…...

docker 启动镜像命令集合

安装rabbitmq 参考地址: https://blog.csdn.net/xxpxxpoo8/article/details/122935994 docker run -it -d --namerabbit-3.8 -v /d/docker/rabbitmq-stomp/conf:/etc/rabbitmq -p 5617:5617 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:2…...

微信小程序获取位置服务

wx.getLocation({type: gcj02,success(res) {wx.log(定位成功);},fail(err) {wx.log(定位失败, err);wx.showModal({content: 请打开手机和小程序中的定位服务,success: (modRes) > {if (modRes.confirm) {wx.openSetting({success(setRes) {if (setRes.authSetting[scope.u…...

Docker Load后存储的镜像及更改镜像存储目录的方法

Docker Load后存储的镜像及更改镜像存储目录的方法 Docker Load后存储的镜像更改镜像存储目录的方法脚本说明注意事项Docker作为一种开源的应用容器引擎,已经广泛应用于软件开发、测试和生产环境中。通过Docker,开发者可以将应用打包成镜像,轻松地进行分发和运行。而在某些场…...

Langchain本地知识库部署

本地部署(Docker + LangChain + FAISS) 1. 概述 本地部署 LangChain-Chatchat 可以为企业提供高效、安全、可控的 AI 知识库方案。本方案基于 Docker、LangChain 和 FAISS 进行本地化部署,适用于企业内部知识库问答、私有化 AI 应用等场景。 2. 技术选型 2.1 LangChain …...

java基础学习——jdbc基础知识详细介绍

引言 数据的存储 我们在开发 java 程序时,数据都是存储在内存中的,属于临时存储,当程序停止或重启时,内存中的数据就会丢失,我们为了解决数据的长期存储问题,有以下解决方案: 通过 IO流书记&…...

联想电脑怎么设置u盘启动_联想电脑设置u盘启动方法(支持新旧机型)

有很多网友问联想电脑怎么设置u盘启动,联想电脑设置u盘启动的方法有两种,一是通过bios进行设置。二是通过快捷方式启动进入u盘启动。但需要注意有两种引导模式是,一种是uefi引导,一种是传统的leacy引导,所以需要注意制…...

C# 解析 HTML 实战指南

在网页开发和数据处理的场景中,经常需要从 HTML 文档里提取有用的信息。C# 作为一门强大的编程语言,提供了丰富的工具和库来实现 HTML 的解析。这篇博客就带你深入了解如何使用 C# 高效地解析 HTML。 一、为什么要在 C# 中解析 HTML 在实际项目中&…...

光谱相机在智能冰箱的应用原理与优势

食品新鲜度检测 详细可点击查看汇能感知团队实验报告:高光谱成像技术检测食物新鲜度 检测原理:不同新鲜程度的食品,其化学成分和结构会有所不同,在光谱下的反射、吸收等特性也存在差异。例如新鲜肉类和蔬菜中的水分、蛋白质、叶…...

编写0号中断的处理程序

实验内容、程序清单及运行结果 编写0号中断的处理程序(课本实验12) 解: assume cs:code code segment start: mov ax,cs mov ds,ax mov si,offset do mov ax,0 mov es,ax mov di,200h mov cx,offset doend-offset do ;安装中断例…...

“““【运用 R 语言里的“predict”函数针对 Cox 模型展开新数据的预测以及推理。】“““

主题与背景 本文主要介绍了如何在R语言中使用predict函数对已拟合的Cox比例风险模型进行新数据的预测和推理。Cox模型是一种常用的生存分析方法,用于评估多个因素对事件发生时间的影响。文章通过具体的代码示例展示了如何使用predict函数的不同参数来获取生存概率和…...

群晖docker获取私有化镜像http: server gave HTTP response to HTTPS client].

群晖docker获取私有化镜像提示http: server gave HTTP response to HTTPS clien 问题描述 层级时间用户事件Information2023/07/08 12:47:45cxlogeAdd image from xx.xx.31.240:1923/go-gitea/gitea:1.19.3Error2023/07/08 12:47:48cxlogeFailed to pull image [Get "http…...

使用 C++ 在深度学习中的应用:如何通过 C++20 构建高效神经网络

深度学习已经成为现代人工智能的核心技术,在图像识别、自然语言处理、语音识别等多个领域广泛应用。尽管 Python 因其简便易用和强大的深度学习框架(如 TensorFlow 和 PyTorch)而在这一领域占据主导地位,但 C 作为一门高性能语言&…...

当 Facebook 窥探隐私:用户的数字权利如何捍卫?

随着社交平台的普及,Facebook 已经成为全球用户日常生活的一部分。然而,伴随而来的隐私问题也愈发严峻。近年来,Facebook 频频被曝出泄露用户数据、滥用个人信息等事件,令公众对其隐私保护措施产生质疑。在这个信息化时代&#xf…...

Spring MVC中HandlerInterceptor和Filter的区别

目录 一、处理阶段 二、功能范围 三、参数访问 四、配置方式 五、使用场景说明 在Spring MVC中,HandlerInterceptor和Filter都是用于拦截请求的重要组件,但它们在多个方面存在显著的差异。本文将详细解析这两种拦截机制的区别,并结合使用…...

Android多语言开发自动化生成工具

在做 Android 开发的过程中,经常会遇到多语言开发的场景,尤其在车载项目中,多语言开发更为常见。对应多语言开发,通常都是在中文版本的基础上开发其他国家语言,这里我们会拿到中-外语言对照表,这里的工作难…...

XML Group端口详解

在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 ​ 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...

云原生安全实战:API网关Envoy的鉴权与限流详解

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...

SQL进阶之旅 Day 22:批处理与游标优化

【SQL进阶之旅 Day 22】批处理与游标优化 文章简述(300字左右) 在数据库开发中,面对大量数据的处理任务时,单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”,深入探讨如何通过批量操作和游标技术提…...

ZYNQ学习记录FPGA(二)Verilog语言

一、Verilog简介 1.1 HDL(Hardware Description language) 在解释HDL之前,先来了解一下数字系统设计的流程:逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端,在这个过程中就需要用到HDL,正文…...