当前位置: 首页 > 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 开发的过程中,经常会遇到多语言开发的场景,尤其在车载项目中,多语言开发更为常见。对应多语言开发,通常都是在中文版本的基础上开发其他国家语言,这里我们会拿到中-外语言对照表,这里的工作难…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

线程同步:确保多线程程序的安全与高效!

全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

OpenLayers 分屏对比(地图联动)

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...