python学习11-Pytorch张量与数据处理1

news2024/9/22 4:13:00

ndarray

首先,我们介绍n维数组,也称为张量(tensor)
使用过Python中NumPy计算包的读者会对本部分很熟悉。
无论使用哪个深度学习框架,它的张量类(在MXNet中为ndarray,
在PyTorch和TensorFlow中为Tensor)都与Numpy的ndarray类似。
但深度学习框架又比Numpy的ndarray多一些重要功能:
首先,GPU很好地支持加速计算,而NumPy仅支持CPU计算;
其次,张量类支持自动微分。
这些功能使得张量类更适合深度学习。

(首先,我们导入torch。请注意,虽然它被称为PyTorch,但是代码中使用torch而不是pytorch。)

import torch

[ 张量表示一个由数值组成的数组,这个数组可能有多个维度]。
具有一个轴的张量对应数学上的向量(vector);
具有两个轴的张量对应数学上的矩阵(matrix);
具有两个轴以上的张量没有特殊的数学名称。

首先,我们可以使用 arange 创建一个行向量 x。这个行向量包含以0开始的前12个整数,它们默认创建为整数。也可指定创建类型为浮点数。张量中的每个值都称为张量的 元素(element)。例如,张量 x 中有 12 个元素。除非额外指定,新的张量将存储在内存中,并采用基于CPU的计算。

x = torch.arange(12)
x
#  tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

可以通过张量的shape属性来访问张量(沿每个轴的长度)的形状

x.shape
# 12

要想改变一个张量的形状而不改变元素数量和元素值,可以调用reshape函数。
例如,可以把张量x从形状为(12,)的行向量转换为形状为(3,4)的矩阵。
这个新的张量包含与转换前相同的值,但是它被看成一个3行4列的矩阵。
要重点说明一下,虽然张量的形状发生了改变,但其元素值并没有变。
注意,通过改变张量的形状,张量的大小不会改变。

X = x.reshape(3, 4)
X
"""
tensor([[ 0,  1,  2,  3],
            [ 4,  5,  6,  7],
            [ 8,  9, 10, 11]])
"""

我们不需要通过手动指定每个维度来改变形状。
也就是说,如果我们的目标形状是(高度,宽度),
那么在知道宽度后,高度会被自动计算得出,不必我们自己做除法。
在上面的例子中,为了获得一个3行的矩阵,我们手动指定了它有3行和4列。
幸运的是,我们可以通过-1来调用此自动计算出维度的功能。
即我们可以用x.reshape(-1,4)或x.reshape(3,-1)来取代x.reshape(3,4)。

有时,我们希望[使用全0、全1、其他常量,或者从特定分布中随机采样的数字来初始化矩阵。
我们可以创建一个形状为(2,3,4)的张量,其中所有元素都设置为0。代码如下:

torch.zeros((2, 3, 4))
"""
 tensor([[[0., 0., 0., 0.],
             [0., 0., 0., 0.],
             [0., 0., 0., 0.]],
            [[0., 0., 0., 0.],
             [0., 0., 0., 0.],
             [0., 0., 0., 0.]]])
"""

同样,我们可以创建一个形状为(2,3,4)的张量,其中所有元素都设置为1。代码如下:

torch.ones((2, 3, 4))
"""
tensor([[[1., 1., 1., 1.],
             [1., 1., 1., 1.],
             [1., 1., 1., 1.]],
            [[1., 1., 1., 1.],
             [1., 1., 1., 1.],
             [1., 1., 1., 1.]]])
"""

有时我们想通过从某个特定的概率分布中随机采样来得到张量中每个元素的值。
例如,当我们构造数组来作为神经网络中的参数时,我们通常会随机初始化参数的值。
以下代码创建一个形状为(3,4)的张量。
其中的每个元素都从均值为0、标准差为1的标准高斯分布(正态分布)中随机采样。

torch.randn(3, 4)
"""
 tensor([[ 0.7277, -1.3848, -0.2607,  0.9701],
            [-2.3290, -0.3754,  0.2457,  0.0760],
            [-1.2832, -0.3600, -0.3321,  0.8184]])
"""

我们还可以[通过提供包含数值的Python列表(或嵌套列表),来为所需张量中的每个元素赋予确定值]。
在这里,最外层的列表对应于轴0,内层的列表对应于轴1。

torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
"""
 tensor([[2, 1, 4, 3],
            [1, 2, 3, 4],
            [4, 3, 2, 1]])
"""

超详细 LaTex数学公式

LaTex表达式是一种简单的、常见的一种数学公式表达形式,在很多地方都有出现,相信正在看博客的你会深有体会,LaTex表达式不难,甚至说很简单,但是对于没有没有接触过得小伙伴来说,会非常费脑,复杂的表达式到底该如何书写呢?

LaTex表达式一般分为两类:

一类是嵌入到文章中间的: log ⁡ 21 x y \log_{21} {xy} log21xy

另一类是单独成行的表达式:
log ⁡ 21 x y \log_{21} {xy} log21xy

所有的LaTex的书写形式都是在 $$...$$ 之中,只不过对于嵌入在文章中间而言 是单对的$...$,而单独成行的LaTex表达式是双对的 $$...$$

公式加粗、更改颜色、添加序号

对公式加粗需要用 \bm{ …… }加之包含其中即可

$\bm{ .... }$

更改公式字母颜色:
如果只更改个别字母,那个后面的需要用黑色再改下

\color{red}\color{green}\color{back}

\color{green}。。。。。\color{back}。。。。

给公式添加序号:在公式最后添加 \tag{…}

$$ ... \tag1$$
$$ ... \tag{1.1}$$        # 多位序号记得用{}扩起来

1、希腊字母
书写表达式,少不了使用希腊字母,但是LaTex 的希腊字母是什么呢?
在这里插入图片描述
在这里插入图片描述
2、运算符 & 空格
普通字符在数学公式中含义一样,除了 # $$ % & ~ _ ^ \ { } 若要在数学环境中表示这些符号# $$ % & _ { },需要分别表示为# $ % & _ { },即在个字符前加上\ 。

在这里插入图片描述
3、上下标
对于上标使用 下划线表示“ _ ” ;对于上标使用 “ ^ ”表示。比如

$x_i^2$

的LaTex表达式为 $$x_i^2$$

LaTex表达式中的上下标可以叠加的,就比如

 ${x^y}^z$ 

的LaTex表达式为 x y z {x^y}^z xyz 或者 x y z x^{y^z} xyz

在此需要注意的是:LaTex表达式默认的是 “ _ ” “ ^ ” 之后的一位才是上下标的内容,对于超过一个字母的上下标需要使用 { } 将它括起来,比如

$x_{2i}^{2+b}$

的LaTex表达式为 x 2 i 2 + b x_{2i}^{2+b} x2i2+b
在这里插入图片描述
4、log
log ⁡ \loglog的表达式会稍微简单点, log ⁡ \log log 就是它的LaTex表达式,同样的对于需要下标的同样使用下划线表示 “ _ ” , 对于多个字符组成的需要添加 { } 将其包括。

在这里插入图片描述
5、括号
LaTex表达式中的 ( ) 、 [ ] 均可以正常使用,但是对于 { } 需要使用转义字符使用,即使用 “{” 和 “}” 表示 { }

在这里插入图片描述

f(x)=\begin{cases} x = \cos(t) \\y = \sin(t) \\ z = \frac xy \end{cases}

f ( x ) = { x = cos ⁡ ( t ) y = sin ⁡ ( t ) z = x y f(x)=\begin{cases} x = \cos(t) \\y = \sin(t) \\ z = \frac xy \end{cases} f(x)= x=cos(t)y=sin(t)z=yx

f(x)=\begin{cases} 0& \text{x=0}\\1& \text{x!=0} \end{cases}

对于个别符号,如 ()、[]等,如果想要变大,可以在 这些符号前面添加即可

\Biggl   \biggl   \Bigl   \bigl   左符号
\Biggr   \biggr   \Bigr   \bigr   右符号

6、矩阵
0 1 1 0 \begin{matrix} 0 & 1 \\ 1 & 0 \end{matrix} 0110

\begin{matrix} 0 & 1 \\ 1 & 0 \end{matrix}

$$\begin{pmatrix} 0 & -i \ i & 0 \end{pmatrix}\$$

\begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix}\\

[ 0 − 1 1 0 ] \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} [0110]

\begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix}

{ 1 0 0 − 1 } \begin{Bmatrix} 1 & 0 \\ 0 & -1 \end{Bmatrix} {1001}

\begin{Bmatrix} 1 & 0 \\ 0 & -1 \end{Bmatrix}

∣ a b c d ∣ \begin{vmatrix} a & b \\ c & d \end{vmatrix} acbd

\begin{vmatrix} a & b \\ c & d \end{vmatrix}

7、求和与积分

在这里插入图片描述
8、开方
在这里插入图片描述
9、分数

在这里插入图片描述
10、特殊函数
在这里插入图片描述
11、导数、极限、积分
在这里插入图片描述
12、积分
积分中,需要注意的是,在多重积分内 dx 和 dy 之间 使用一个斜杠加一个逗号 , 来增大稍许间距。同样,在两个积分号之间使用一个斜杠加一个感叹号 ! 来减小稍许间距。使之更美观。

\int_a^b f(x) dx 

∫ a b f ( x ) d x \int_a^b f(x) dx abf(x)dx

\int_0^{+\infty} x^n e^{-x} dx = n! 

∫ 0 + ∞ x n e − x d x = n ! \int_0^{+\infty} x^n e^{-x} dx = n! 0+xnexdx=n!

\int_{x^2 + y^2 \leq R^2}   f(x,y) dx dy = 
\int_{\theta=0}^{2\pi}    \int_{r=0}^R    f(r\cos\theta,r\sin\theta) r dr d\theta

∫ x 2 + y 2 ≤ R 2 f ( x , y ) d x d y = ∫ θ = 0 2 π ∫ r = 0 R f ( r cos ⁡ θ , r sin ⁡ θ ) r d r d θ \int_{x^2 + y^2 \leq R^2} f(x,y) dx dy = \int_{\theta=0}^{2\pi} \int_{r=0}^R f(r\cos\theta,r\sin\theta) r dr d\theta x2+y2R2f(x,y)dxdy=θ=02πr=0Rf(rcosθ,rsinθ)rdrdθ

13、字体

在这里插入图片描述

pythorch实现手写数字识别模型

pip install torchvision

#导入torchvision,用于处理图像和视频,转换成张量
from torchvision.transforms import ToTensor
import torchvision
import torch
import torch.nn as nn

# 加载数据集pytorch本身提供了经典的手写数据集
#加载训练集
train_ds = torchvision.datasets.MNIST(
    'data/',
    #指定加载训练集
    train=True,
    #将图像、numpy转换成pytorch张量
    transform=ToTensor(),
    download=True
)

#加载测试的数据集
test_ds = torchvision.datasets.MNIST(
    'data/',
    #指定加载训练集
    train=False,
    #将图像、numpy转换成pytorch张量
    transform=ToTensor(),
    download=True
)

#指定训练数据加载器
train_dl = torch.utils.data.DataLoader(
    train_ds,
    batch_size=64,
    #提高模型的泛华能力
    shuffle=True
)

test_dl = torch.utils.data.DataLoader(
    test_ds,
    batch_size=256,
    #提高模型的泛华能力
    shuffle=True
)

imgs,labels = next(iter(train_dl))

img = imgs[0]

import matplotlib.pyplot as plt
plt.imshow(img)

在这里插入图片描述

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

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

相关文章

数据集 CrowdPose 多人姿态估计 深度学习 >> DataBall

数据集 CrowdPose 多人姿态估计 深度学习 CrowdPose 数据集 这是一个用于探讨在拥挤场景中的多人姿态估计的图像数据集。该数据集包括 2 万张图像和标注有 14 个关键点的 8 万个人体姿势,其中测试集包括 8,000 张图像。 article{li2018crowdpose, title{CrowdPose…

mysql-PXC实现高可用

mysql8.0使用PXC实现高可用 什么是 PXC PXC 是一套 MySQL 高可用集群解决方案,与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,他们相互的关系是…

数据预处理与协同过滤推荐算法——从数据清洗到个性化电影推荐

推荐系统在现代应用中占据了重要地位,尤其在电影、音乐等个性化内容推荐中广泛使用。本文将介绍如何使用数据预处理、特征工程以及多种推荐算法(包括协同过滤、基于内容的推荐、混合推荐等)来实现电影推荐系统。通过Pandas、Scikit-learn、Te…

研1日记5

x torch.tensor(x),numpy 转tensor 三维矩阵相加 screen -S pid 进入之前创建好的screen transpose()只能一次操作两个维度;permute()可以一次操作多维数据,且必须传入所有维度数, transpose()中的dim没有数的大小区分;permut…

Redis 分布式锁:线程安全在分布式环境中的解决方案

Redis 分布式锁:线程安全在分布式环境中的解决方案 一 . 分布式锁二 . 分布式锁的实现策略2.1 引入 setnx2.2 引入过期时间2.3 引入校验 ID2.4 引入 lua 脚本2.5 引入看门狗2.6 引入 redlock 算法 Hello , 大家好 , 这个专栏给大家带来的是 Redis 系列 ! 本篇文章给…

Flutter 中的低功耗蓝牙概述

随着智能设备数量的增加,控制这些设备的需求也在增加。对于多种使用情况,期望设备在需要进行控制的同时连接到互联网会受到很大限制,因此是不可行的。在这些情况下,使用低功耗蓝牙(也称为 Bluetooth LE 或 BLE&#xf…

[yolov5] --- yolov5入门实战「土堆视频」

1 项目介绍及环境配置 下载yolov5 tags 5.0源码,https://github.com/ultralytics/yolov5/tree/v5.0,解压 Pycharm 中创建conda虚拟环境 激活conda虚拟环境 根据作者提供的requirements.txt文件,pip install -r requirements.txt 如果作者没有…

【Spring Boot】 SpringBoot自动装配-Condition

目录 一、前言二、 定义2.1 Conditional2.2 Condition2.2.1 ConditionContext 三、 使用说明3.1 创建项目3.1.1 导入依赖3.1.2 添加配置信息3.1.3 创建User类3.1.4 创建条件实现类3.1.5 修改启动类 3.2 测试3.2.1 当user.enablefalse3.2.2 当user.enabletrue 3.3 小结 四、改进…

如何实现加密功能

文章目录 1. 概念介绍2. 方法与功能2.1 基本用法2.2 加密算法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"FlutterCacheManager组件"相关的内容,本章回中将介绍一个加密工具包.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 加密主要…

基于YOLO8的图片实例分割系统

文章目录 在线体验快速开始一、项目介绍篇1.1 YOLO81.2 ultralytics1.3 模块介绍1.3.1 scan_task1.3.2 scan_taskflow.py1.3.3 segment_app.py 二、核心代码介绍篇2.1 segment_app.py2.2 scan_taskflow.py 三、结语 代码资源:计算机视觉领域YOLO8技术的图片实例分割…

0x05 tomcat AJP文件包含漏洞(CVE-2020-1938)复现(脚本最终没有验证成功)

参考: 13-3 tomcat AJP文件包含漏洞(CVE-2020-1938)_omcat ajp文件包含漏洞 payload-CSDN博客 一、fofa 搜索使用该服务器的网站 网络空间测绘,网络空间安全搜索引擎,网络空间搜索引擎,安全态势感知 - F…

linux编译器——gcc/g++

1.gcc linux上先要安装, sudo yum install gcc gcc --version 可以查看当前的版本 ,我们默认安装的是4.8.5的版本,比较低, gcc test.c -stdc99 可以使他支持更高版本的c标准 -o 可以殖指明生成文件的名字,可以自己…

什么是Web服务器集群?

Web服务器集群是指将多台服务器组成一个集群,通过负载均衡将客户端请求分发到这些服务器上进行处理,从而提高网站的性能和可用性。每台服务器都运行着相同的应用程序和数据,并且能够相互通信和协调工作。 1.为什么需要Web服务器集群 随着互联…

0基础学习爬虫系列:网页内容爬取

1.背景 今天我们来实现,监控网站最新数据爬虫。 在信息爆炸的年代,能够有一个爬虫帮你,将你感兴趣的最新消息推送给你,能够帮你节约非常多时间,同时确保不会miss重要信息。 爬虫应用场景: 应用场景主要功…

Transformer从零详细解读

Transformer从零详细解读 一、从全局角度概况Transformer ​ 我们把TRM想象为一个黑盒,我们的任务是一个翻译任务,那么我们的输入是中文的“我爱你”,输入经过TRM得到的结果为英文的“I LOVE YOU” ​ 接下来我们对TRM进行细化,…

【Linux】萌新看过来!一篇文章带你走进Linux世界

🚀个人主页:奋斗的小羊 🚀所属专栏:Linux 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 前言💥1、初识Linux💥1.1 什么是操作系统?💥1.2 各种操作…

分享一个基于微信小程序的医院挂号就诊一体化平台uniapp医院辅助挂号应用小程序设计(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

SpringBoot学习(9)(springboot自动配置原理)(源码分析、面试题)

目录 一、引言 二、为啥学习自动配置原理? 三、自动配置 (1)基本概述 (2)学习回顾 四、自动配置——源码分析 (1)回顾学习 (2)回到源码学习 (1)注…

文件系统 文件描述符fd 重定向原理 缓冲区

文章目录 基础的文件操作文件的系统调用接口位图向文件中写入标记位选项总结&#xff1a;open的返回值文件描述符fdfd012与硬件的关系read && stat 重定向dup2 缓冲区的理解经典的例子 基础的文件操作 引子&#xff1a; #include <stdio.h>int main() {FILE* f…

[Linux]:环境变量与进程地址空间

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. 环境变量 1.1 概念 **环境变量(environment variables)**一般是指在操作…