深度学习数据处理(一)

news2025/1/27 12:39:40

        在PyTorch中,torch.Tensor是存储和变换数据的主要工具。如果你之前用过NumPy,你会发现Tensor和NumPy的多维数组非常类似。然而,Tensor提供GPU计算和自动求梯度等更多功能,这些使Tensor更加适合深度学习。

        张量(tensor)是数学和物理学中的概念,它表示任意维度的数组或矩阵。在机器学习和人工智能领域,张量是存储和处理数据的基本数据结构。在深度学习中,张量是神经网络中传递和操作数据的基本单位。它可以是标量(0维张量)、向量(1维张量)、矩阵(2维张量)或更高维度的数组。张量不仅可以包含数字数据,还可以包含其他类型的数据,如字符串、图像等。通过张量,我们可以进行各种数学运算和变换,如加法、乘法、卷积等。深度学习框架如TensorFlow和PyTorch提供了丰富的张量操作函数和工具,使得处理和操作张量变得更加方便和高效。

创建Tensor

         在使用深度学习框架(如TensorFlow或PyTorch)时,可以使用相应的函数来创建张量。以下是创建张量的一些常见方法:

 

  1. 使用给定值创建张量:
    import tensorflow as tf
    
    # 创建一个标量(0维张量)
    scalar = tf.constant(5)
    
    # 创建一个向量(1维张量)
    vector = tf.constant([1, 2, 3])
    
    # 创建一个矩阵(2维张量)
    matrix = tf.constant([[1, 2, 3], [4, 5, 6]])
    
    # 创建一个3维张量
    tensor = tf.constant([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
    

  2. 使用随机值创建张量:
    import tensorflow as tf
    
    # 创建一个形状为(2, 3)的随机矩阵(2维张量)
    random_matrix = tf.random.normal(shape=(2, 3))
    
    # 创建一个形状为(3, 3)的随机矩阵(2维张量),数值范围在0到1之间
    random_uniform = tf.random.uniform(shape=(3, 3), minval=0, maxval=1)
    

Tensor官方API

                    

 操作

  1. 数学运算:

    • tf.add(x, y):逐元素相加。
    • tf.subtract(x, y):逐元素相减。
    • tf.multiply(x, y):逐元素相乘。
    • tf.divide(x, y):逐元素相除。
    • tf.square(x):逐元素求平方。
    • tf.sqrt(x):逐元素求平方根。
    • tf.exp(x):逐元素求指数。
    • tf.log(x):逐元素求自然对数。
  2. 形状操作:

    • tf.reshape(tensor, shape):重新调整张量的形状。
    • tf.transpose(tensor, perm=None):交换张量的维度顺序。
    • tf.expand_dims(input, axis=None):在指定轴上扩展维度。
    • tf.squeeze(input, axis=None):压缩维度为1的轴。
    • tf.concat(tensors, axis):沿指定轴连接张量。
  3. 矩阵操作:

    • tf.matmul(a, b):矩阵相乘。
    • tf.transpose(tensor, perm=None):矩阵转置。
    • tf.linalg.inv(tensor):矩阵求逆。
  4. 逻辑运算:

    • tf.equal(x, y):逐元素比较是否相等。
    • tf.not_equal(x, y):逐元素比较是否不相等。
    • tf.greater(x, y):逐元素比较是否大于。
    • tf.greater_equal(x, y):逐元素比较是否大于等于。
    • tf.less(x, y):逐元素比较是否小于。
    • tf.less_equal(x, y):逐元素比较是否小于等于。
  5. 神经网络相关操作:

    • tf.nn.relu(x):ReLU(整流线性单元)激活函数。
    • tf.nn.softmax(logits):计算 softmax 函数。
    • tf.nn.conv2d(input, filter, strides, padding):二维卷积操作。

  

广播机制

       广播(Broadcasting)是指在 TensorFlow 中,当两个张量在某些维度上的形状不匹配时,自动对其中一个或两个张量进行形状扩展,使它们的形状能够相互兼容,进而进行逐元素的操作。广播机制的目的是为了避免显式地复制数据,从而提高计算效率。以下是广播机制的规则:

  1. 如果两个张量在某个维度上的形状相等,或其中一个张量在该维度上的长度为1,则称它们在该维度上是可广播的。
  2. 当两个张量在某个维度上的形状不匹配时,可以通过对其中一个或两个张量在该维度上进行形状扩展,使它们的形状变得兼容,即满足广播机制的要求。
  3. 在广播过程中,会对形状较小的张量进行扩展,使其形状与形状较大的张量相匹配。扩展的方式是在形状较小的张量的形状前面添加维度长度为1的维度。
import tensorflow as tf

# 创建两个张量
a = tf.constant([[1, 2, 3]])
b = tf.constant([[4], [5], [6]])

# 形状不匹配,但是可以通过广播进行计算
# a 形状:(1, 3)
# b 形状:(3, 1)
# 广播后的形状:(3, 3)
result = a + b

print(result.numpy())
# 输出:
# [[5 6 7]
#  [6 7 8]
#  [7 8 9]]

 Tensor和NumPy相互转换

使用numpy()Tensor转换成NumPy数组:

a = torch.ones(5)
b = a.numpy()
print(a, b)

a += 1
print(a, b)
b += 1
print(a, b)

使用from_numpy()将NumPy数组转换成Tensor:

import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
print(a, b)

a += 1
print(a, b)
b += 1
print(a, b)

此外上面提到还有一个常用的方法就是直接用torch.tensor()将NumPy数组转换成Tensor,需要注意的是该方法总是会进行数据拷贝,返回的Tensor和原来的数据不再共享内存。

# 用torch.tensor()转换时不会共享内存
c = torch.tensor(a)
a += 1
print(a, c)

Tensor on GPU

用方法to()可以将Tensor在CPU和GPU(需要硬件支持)之间相互移动。

# 以下代码只有在PyTorch GPU版本上才会执行
if torch.cuda.is_available():
    device = torch.device("cuda")          # GPU
    y = torch.ones_like(x, device=device)  # 直接创建一个在GPU上的Tensor
    x = x.to(device)                       # 等价于 .to("cuda")
    z = x + y
    print(z)
    print(z.to("cpu", torch.double))       # to()还可以同时更改数据类型

总结

      TensorFlow 是一个功能强大的机器学习框架,具有广泛的应用和活跃的社区支持。在使用 TensorFlow 进行机器学习和深度学习开发时,需要掌握一些基本概念和技术,例如:

  1. 张量:TensorFlow 中的基本数据类型,它们是多维数组,可以表示各种类型的数据。

  2. 计算图:TensorFlow 的计算模型,它由一系列节点和边组成,每个节点代表一个操作,边代表张量的流动。

  3. 变量:TensorFlow 中的状态,它们是可以被训练的张量,可以存储模型的参数和其他状态信息。

  4. 会话:TensorFlow 执行计算图的环境,它可以将计算图部署到 CPU 或 GPU 上进行计算。

  5. 损失函数:衡量模型预测结果和实际结果之间的差异,从而指导模型的训练。

  6. 优化器:根据损失函数的梯度信息,更新模型参数的算法,例如随机梯度下降。

  7. Dropout、Batch Normalization 等正则化技术:减少模型过拟合的方法。

  8. 卷积神经网络(CNN)、循环神经网络(RNN)等深度学习模型:用于处理图像、语音、自然语言等任务。

  9. 数据预处理技术:包括标准化、归一化、数据增强等方法,用于提高模型的鲁棒性和泛化能力。

  10. 广播机制:在张量形状不匹配时,自动对其中一个或两个张量进行形状扩展,使它们的形状能够相互兼容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1329812.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux内核模块文件组成介绍

Linux驱动开发主要的工作就是编写模块,一个典型的Linux内核模块文件.ko 主要由以下几个部分组成。 模块加载函数(必须) 当通过insmod或modprobe命令加载内核模块时,模块的加载函数会自动被内核执行,完成本模块的相关初始化工作。 Linux内核模…

js显示实时时间

文章目录 一、效果二、思路三、最后 一、效果 用JS实现XXXX年XX月XX日 星期X XX时XX分XX秒 效果 效果 &#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>time</title><script t…

【数据结构】队列的使用|模拟实现|循环队列|双端队列|面试题

一、 队列(Queue) 1.1 概念 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO(First In First Out) 入队列&#xff1a;进行插入操作的一端称为队尾&#xff08;Tail/Rear&#xff09; 出队列…

nodejs微信小程序+python+PHP兴趣趣班预约管理系统设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

webpack学习-7.创建库

webpack学习-7.创建库 1.暴露库1.1概念1.2验证1.2.1 不导出方法1.2.2 导出方法 2.外部化 lodash3.外部化的限制4.最终步骤5.使用自己的库5.1坑 6.总结 1.暴露库 这个模块学习有点坑。看名字就是把自己写的个包传到npm&#xff0c;而且还要在项目中使用到它&#xff0c;支持各种…

LLM之RAG实战(八)| 使用Neo4j和LlamaIndex实现多模态RAG

人工智能和大型语言模型领域正在迅速发展。一年前&#xff0c;没有人使用LLM来提高生产力。时至今日&#xff0c;很难想象我们大多数人或多或少都在使用LLM提供服务&#xff0c;从个人助手到文生图场景。由于大量的研究和兴趣&#xff0c;LLM每天都在变得越来越好、越来越聪明。…

ztree选中回显到ztree树上

点击修改&#xff0c;让数据显示到树形结构上边 $(".updateSupplyBtn").click(function (){var ztreeIds $("#sortId").val(); if(ztreeIds.trim()!""){ var ztree $.fn.zTree.getZTreeObj("menuTree"); var ztreeId ztreeIds.s…

构建数字化金融生态系统:云原生的创新方法

内容来自演讲&#xff1a;曾祥龙 | DaoCloud | 解决方案架构师 摘要 本文探讨了金融企业在实施云原生体系时面临的挑战&#xff0c;包括复杂性、安全、数据持久化、服务网格使用和高可用容灾架构等。针对网络管理复杂性&#xff0c;文章提出了Spiderpool开源项目&#xff0c;…

使用OpenCV DNN模块进行人脸检测

内容的一部分来源于贾志刚的《opencv4应用开发、入门、进阶与工程化实践》。这本书我大概看了一下&#xff0c;也就后面几章比较感兴趣&#xff0c;但是内容很少&#xff0c;并没有想像的那种充实。不过学习还是要学习的。 在实际工程项目中&#xff0c;并不是说我们将神经网络…

MATLAB Mobile - 使用预训练网络对手机拍摄的图像进行分类

系列文章目录 前言 此示例说明如何使用深度学习对移动设备摄像头采集的图像进行分类。 在您的移动设备上安装和设置 MATLAB Mobile™。然后&#xff0c;从 MATLAB Mobile 的“设置”登录 MathWorks Cloud。 在您的设备上启动 MATLAB Mobile。 一、在您的设备上安装 MATLAB M…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)

在这篇文章中虽然实现了能够和多客户端建立连接&#xff0c;并且同时和多个客户端进行通信。 基于多反应堆的高并发服务器【C/C/Reactor】&#xff08;上&#xff09;-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135141316?spm1001.2014.3001.5501但是有…

linux 查看glibc的版本、查看所安装的软件的依赖

GLIBC是一个C标准库&#xff0c;很多C/C程序都会依赖它&#xff0c;在linux系统上安装一些软件&#xff08;库&#xff09;时&#xff0c;linux系统需要满足该软件&#xff08;库&#xff09;的所有依赖才行&#xff0c;否则&#xff0c;就会出现无法安装或使用的问题&#xff…

可视化开发

可视化开发 数据可视化 交互式可视化 文章目录 可视化开发前言一、可视化开发二、Python数据可视化大屏GIS图像智能识别处理软件开发三、可视化开发必备总结前言 可视化开发可以帮助开发者通过图形化界面和拖放操作来创建、编辑和测试应用程序。使用这些工具,开发者可以提高开…

(JAVA)-线程中的通信(生产者消费者模型)

在Java线程通信中&#xff0c;等待通知机制是最传统的方式&#xff0c;就是在一个线程进行了规定操作后&#xff0c;该线程就进入等待状态&#xff08;wait&#xff09;&#xff0c; 等待其它线程执行完它们的指定代码过后&#xff0c;再将之前等待的线程唤醒&#xff08;notif…

mmyolo导出模型

报错&#xff1a;python mmyolo/projects/easydeploy/tools/export_onnx.py configs/yolov7/tfj_yolov7_tiny_syncbn_fast_8x16b-300e_coco.py work_dirs/tfj_yolov7_tiny_syncbn_fast_8x16b-300e_coco/best_coco_bbox_mAP_epoch_10.pth --model-only --simplify 运行报错 No m…

springboot学习笔记(五)

MybatisPlus进阶 1.MybatisPlus一对多查询 2.分页查询 1.MybatisPlus一对多查询 场景&#xff1a;我有一个表&#xff0c;里面填写的是用户的个人信息&#xff08;姓名&#xff0c;生日&#xff0c;密码&#xff0c;用户ID&#xff09;。我还有一个表填写的订单信息&#x…

读算法霸权笔记01_数学杀伤性武器

1. 数学应用助推数据经济&#xff0c;但这些应用的建立是基于不可靠的人类所做的选择 1.1. 房地产危机&#xff0c;大型金融机构倒闭&#xff0c;失业率上升&#xff0c;在幕后运用着神奇公式的数学家们成为这些灾难的帮凶 1.2. 数学逐渐不再关注全球金融市场动态&#xff0c…

Flutter 三: Dart

1 数据类型 数字(number) int double 字符串转换成 num int.parse(“1”) double.parse(“1”);double 四舍五入保留两位小数 toStringAsFixed(2) 返回值为stringdouble 直接舍弃小数点后几位的数据 可使用字符串截取的方式 字符串(string) 单引号 双引号 三引号三引号 可以输…

微信小程序promise封装

一. 在utils文件夹内创建一个request.js 写以下封装的 wx.request() 方法 const baseURL https:// 域名 ; //公用总路径地址 export const request (params) > { //暴露出去一个函数&#xff0c;并且接收一个外部传入的参数let dataObj params.data || {}; //…

MsSQL中的索引到底长啥样,查找过程怎么进行

参考文章一 参考文章二 建表 mysql> create table user(-> id int(10) auto_increment,-> name varchar(30),-> age tinyint(4),-> primary key (id),-> index idx_age (age)-> )engineinnodb charsetutf8mb4;insert into user(name,age) values(张三,…