深度学习数据处理(一)

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python使用多线程解析超大日志文件

目录 一、引言 二、多线程基本概念 三、Python中的多线程实现 四、使用多线程解析超大日志文件 五、性能优化和注意事项 总结 一、引言 在处理大量数据时,单线程处理方式往往效率低下,而多线程技术可以有效地提高处理速度。Python提供了多种多线程…

算法模板之队列图文详解

🌈个人主页:聆风吟 🔥系列专栏:算法模板、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. ⛳️模拟队列1.1 🔔用数组模拟实现队列1.1.1 👻队列的定…

实习知识整理6:前后端利用ajax数据传输的四种方式

方式1&#xff1a;前端发送key/value(String字符串)&#xff0c;后台返回文本 前端&#xff1a; <input id"test1" type"button" value"前端发送key/value(String字符串)&#xff0c;后台返回文本"/> $(function() {$("#test1&quo…

LaTex详细安装及配置(Windows)

文章目录 引言LaTeX简介优势与应用领域 安装环境安装texlive下载texlive安装 编辑器安装texstudio下载texstudio安装 环境配置 使用第一个LaTex文档新建文件编程查看 效果 结语 引言 在当今信息技术高度发达的时代&#xff0c;文档的编辑和排版是我们日常工作和学习中不可或缺…

深入了解TypeChat

在过去的几个月里&#xff0c;我们看到了最新一波大型语言模型的热潮。虽然聊天助手是最直接的应用程序&#xff0c;但如何最好地将这些模型集成到现有的应用程序界面中仍是一个大问题。 换句话说&#xff0c;我们如何用自然语言界面增强传统UI ? 我们如何使用人工智能来接受…

ctfshow中web入门第web41

ctfshow中web入门第web41 ​​ 留下了|运算绕过的方法那么直接利用脚本即可。 先用or运算的php脚本生成需要的规则文件(.txt文件)。如下图直接把需要绕过的正则替换成题目的正则就好&#xff1a; ​​ 再用python脚本基于刚刚生成的txt文件跑出payload&#xff0c;如下图&…

9.独立看门狗IWDG窗口看门狗WWDG编码思路

前言&#xff1a; 看门狗是维护系统稳定性的一向技术&#xff0c;可以让代码跑飞及时复位&#xff0c;在产品中非常常用&#xff0c;俗话说&#xff0c;重启能解决90%的问题&#xff0c;作为产品来说&#xff0c;你总不能因为一次bug就让程序卡死不动了&#xff0c;肯定要试着重…

消息队列之关于如何实现延时队列

一、延时队列的应用 1.1 什么是延时队列&#xff1f; 顾名思义&#xff1a;首先它要具有队列的特性&#xff0c;再给它附加一个延迟消费队列消息的功能&#xff0c;也就是说可以指定队列中的消息在哪个时间点被消费。 延时队列在项目中的应用还是比较多的&#xff0c;尤其像…

2024年值得关注的十大TS项目

探索未来&#xff1a;用无/低代码工具和人工智能创新重塑2024年的十大TS项目 再过几天&#xff0c;2023年就要结束了&#xff0c;我们即将迎来2024年。2023年是人工智能技术快速发展的一年&#xff0c;人工智能应用激增。人工智能技术的飞速发展给我们的生活和工作带来了巨大的…

CreateProcess error=216, 该版本的 %1 与你运行的 Windows 版本不兼容。请查看计算机的系统信息,然后联系软件发布者。

第一个go程序就出错了&#xff0c;错误提示&#xff1a; Error running ‘go build hello.go’: Cannot run program “C:\Users\Administrator\AppData\Local\Temp___go_build_hello_go.exe” (in directory “G:\go\workspace”): CreateProcess error216, 该版本的 %1 与你运…

【React Native】第一个Android应用

第一个Android应用 环境TIP开发工具环境及版本要求建议官方建议 安装 Android Studio首次安装模板选择安装 Android SDK配置 ANDROID_HOME 环境变量把一些工具目录添加到环境变量 Path[可选参数] 指定版本或项目模板 运行使用 Android 模拟器编译并运行 React Native 应用修改项…

2023-强网杯-【强网先锋-ez_fmt】

文章目录 ez_fmt libc-2.31.so检查main思路exp 参考链接 ez_fmt libc-2.31.so 检查 没有地址随机化 main 简单粗暴的printf格式化字符串漏洞 思路 泄露地址&#xff0c;覆盖返回地址形成ROP链 printf执行时栈上存在__libc_start_main243的指令的地址&#xff0c;可以泄露…

C/C++ 基础函数

memcpy&#xff1a;C/C语言中的一个用于内存复制的函数&#xff0c;声明在 string.h 中&#xff08;C是 cstring&#xff09; void *memcpy(void *destin, void *source, unsigned n);作用是&#xff1a;以source指向的地址为起点&#xff0c;将连续的n个字节数据&#xff0c;…

全国(山东、安徽)职业技能大赛--信息安全管理与评估大赛题目+答案讲解

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

Python算法例25 落单的数Ⅲ

1. 问题描述 给出2n2个非负整数元素的数组&#xff0c;除其中两个数字之外&#xff0c;其他每个数字均出现两次&#xff0c;找到这两个数字。 2. 问题示例 给出[1&#xff0c;2&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;4&#xff0c;5&#xff0c;3]&#xff0c…

dubbo线程池为什么耗尽

文章概述 大家可能都遇到过DUBBO线程池打满这个问题&#xff0c;报错如下&#xff0c;本文我们就一起分析DUBBO线程池打满这个问题。 cause: org.apache.dubbo.remoting.RemotingException: Server side(10.0.0.100,20881) thread pool is exhausted, detail msg:Thread pool …

Python中json模块的使用与pyecharts绘图的基本介绍

文章目录 json模块json与Python数据的相互转化 pyecharts模块pyecharts基本操作基础折线图配置选项全局配置选项 json模块的数据处理折线图示例示例代码 json模块 json实际上是一种数据存储格式&#xff0c;是一种轻量级的数据交互格式&#xff0c;可以把他理解成一个特定格式…

模型微调入门介绍一

备注&#xff1a;模型微调系列的博客部分内容来源于极客时间大模型微调训练营素材&#xff0c;撰写模型微调一系列博客&#xff0c;主要是期望把训练营的内容内化成自己的知识&#xff0c;我自己写的这一系列博客除了采纳部分训练营的内容外&#xff0c;还会扩展细化某些具体细…

【贪心】单源最短路径Python实现

文章目录 [toc]问题描述Dijkstra算法Dijkstra算法应用示例时间复杂性Python实现 个人主页&#xff1a;丷从心 系列专栏&#xff1a;贪心算法 问题描述 给定一个带权有向图 G ( V , E ) G (V , E) G(V,E)&#xff0c;其中每条边的权是非负实数&#xff0c;给定 V V V中的一个…

Packet Tracer -使用 Ping 和 Traceroute测试 网络的连通性

地址分配表 目标 第 1 部分&#xff1a;测试和恢复 IPv4 连通性 第 2 部分&#xff1a;测试和恢复 IPv6 连通性 场景 本练习中存在连通性方面的问题。除了 收集和记录有关网络的信息&#xff0c;您还需要找出 问题&#xff0c;并实施可行的解决方案来恢复网络的连通性。 注意…