【PyTorch】对比Torch和Numpy

news/2025/2/5 22:16:57/文章来源:https://www.cnblogs.com/o-O-oO/p/18700233

该部分主要通过对比Torch和Numpy基础知识,方便大家了解PyTorch。Numpy是处理数据的模块,处理各种矩阵的形式来多核加速运算。

Torch自称为神经网络界的Numpy,因为它能将torch产生的tensor(张量)放在 GPU 中加速运算(前提是你有合适的 GPU),就像Numpy会把array放在CPU中加速运算。所以神经网络的话,当然是用Torch的tensor形式数据最好,就像Tensorflow当中的tensor一样。

当然,我们对Numpy还是爱不释手的,因为我们太习惯numpy的形式了。不过torch看出来我们的喜爱,他把torch做的和numpy能很好的兼容。

下面来看如何自由地转换numpy array和torch tensor。

import torch
import numpy as np#定义
np_data = np.arange(6).reshape((2,3))
torch_data = torch.from_numpy(np_data)
print("numpy:\n", np_data)
print("torch:\n", torch_data)tensor2array = torch_data.numpy()
print("tensor2array:\n", tensor2array, "\n")

其运行结果如下所示:

接着介绍PyTorch的各种运算符号。

可以通过如下网站看到各种运算符号,方便大家学习。

https://pytorch.org/docs/stable/torch.html#math-operations

import torch
import numpy as np#abs
data = [-1, -2, 1, 2]
tensor = torch.FloatTensor(data)    #32bit
print("numpy:", np.abs(data))       #[1 2 1 2]
print("torch:", torch.abs(tensor))  #[1 2 1 2]print("numpy:", np.sin(data))
print("torch:", torch.sin(tensor))print("numpy:", np.mean(data))
print("torch:", torch.mean(tensor), "\n")

运算结果如下所示:

最后介绍矩阵运算。矩阵相乘在Numpy中可以使用np.matmul和dot实现,但Torch的dot会将矩阵展平,其输出结果为9。

import torch
import numpy as np#矩阵
data = [[1,2], [3,4]]
tensor = torch.FloatTensor(data)    #32bit floating point
data = np.array(data)
print("numpy:", data.dot(data))
print("torch:", torch.mm(tensor, tensor))A = torch.tensor([1, 1, 1])
B = torch.tensor([2, 3, 4])
print("torch:", torch.dot(A, B))
print("torch:", torch.mul(A, B))

输出结果如下图所示:

注意:pytorch0.3之后,tensor.dot()方法进行了更新,只能对1维的tensor进行点成运算

矩阵计算如下所示:

在深度学习中,我们通常需要训练一个模型来最小化损失函数。这个过程可以通过梯度下降等优化算法来实现。梯度是函数在某一点上的变化率,可以告诉我们如何调整模型的参数以使损失函数最小化。自动求导是一种计算梯度的技术,它允许我们在定义模型时不需要手动推导梯度计算公式。PyTorch 提供了自动求导的功能,使得梯度的计算变得非常简单和高效。
下面给出一段示例代码:

import torch# 创建一个变量
x = torch.tensor(1., requires_grad=True)# 执行一些操作
y = x ** 2# 反向传播
y.backward()# 输出结果
print(x.grad)  # 输出x相对于自身的梯度,即2*x

在这个例子中,我们首先创建了一个变量x,并设置了requires_grad=True以启用自动求导。然后我们计算了x的平方y,接着调用backward()方法进行反向传播,这将自动计算y相对于创建时所用操作(这里是乘法操作)的梯度,并将梯度结果存储在x.grad中。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十. Redis 事务和 “锁机制”—— 并发秒杀处理的详细说明

十. Redis 事务和 “锁机制”——> 并发秒杀处理的详细说明 @目录十. Redis 事务和 “锁机制”——> 并发秒杀处理的详细说明1. Redis 的事务是什么?2. Redis 事务三特性3. Redis 关于事务相关指令 Multi、Exec、discard和 “watch & unwatch”3.1 快速入门(演示…

使用Tauri框架打造的FPS透视

使用Tauri框架打造的FPS透视,使用javascript读内存绘制透视框使用Vue前端和Rust后端打造FPS透视 前端使用P5js进行canvas绘制 后端封装内存读取工具,前端快速编写代码无需重启调试 Vue前端与后端通讯获取内存数据并在前端渲染 作者声明 [仅供学习 请勿非法用途 从事非法用途出…

Mybatis 动态查询

where和if标签搭配 user表如下图所示 有时候,我们想在java程序中自定义查询条件,例如,我想查询user表,有时候我输入name=“狂神”,查询所有name为狂神的数据,有时候我输入pwd=‘123456’,想查询所有密码为123456的数据,有时候我想查询name为狂神同时密码为123456的数据…

一文搞懂企业架构与DDD的融合

在当今数字化时代,企业架构(EA)和领域驱动设计(DDD)成为了构建高效、灵活且可扩展软件系统的关键方法论。本文将深入探讨企业架构TOGAF框架与DDD的融合之道,分析如何通过这种结合实现从业务战略到技术实现的无缝对接。今天聊聊企业架构与DDD如何进行融合。一、企业架构TO…

【监控】ElastAlert 实现 ES 钉钉群日志告警

一、ElastAlert 概述 ElastAlert 是一个开源的警报框架,由 Yelp 开发,它可以从 Elasticsearch 中提取数据并根据预定义的规则生成警报。ElastAlert 可用于监控您的日志和时间序列数据,以便在发生异常、错误或其他有趣的模式时立即采取行动。ElastAlert 能够与许多通知服务(…

状压dp串讲

知识讲解 前置知识:位运算 (学过的可以跳过) 众所周知,电脑使用的是二进制,那么对二进制位进行的计算就叫做位运算。那么经典的位运算有以下几种:&(按位与)规律:除非两者均为 \(1\),否则其他情况结果均为 \(0\)。若两者为均唯一则答案为 \(1\)。 |(按位或)规律…

DeepSeek本地化部署

DeepSeek-R1本地化部署 在 Mac 上使用 Ollama 运行 DeepSeek-R1,并通过 Open-WebUI 提供 Web 端访问。 1. 安装 Ollama Ollama官方:https://ollama.com/ Ollama 是一个轻量级的 AI 推理框架,支持本地运行 LLM(大型语言模型)。首先,下载并安装 Ollama。 # brew安装ollama …

微服务 - 服务雪崩和限流

1. 服务雪崩 1.1 什么是服务雪崩? 在微服务中,假如一个或者多个服务出现故障,如果这时候,依赖的服务还在不断发起请求,或者重试,那么这些请求的压力会不断在下游堆积,导致下游服务的负载急剧增加。不断累计之下,可能会导致故障的进一步加剧,可能会导致级联式的失败,甚…

CTF-web-矛盾

1.打开链接,查看题目2.要求输入数字1但是又不允许输入数字,可输入1a,弱比较 “=”转化后即为13.即可获得flag

DRF 视图

视图概览 REST framework 提供了众多的通用视图基类与扩展类,以简化视图的编写。 视图的继承关系: 视图的方法与属性: Request 与 Response 1. Request REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST framework提供的扩展了HttpReques…

MySQL训练营-如何判断SQL的主要消耗阶段

慢查询分析思路确认是锁还是执行消耗对于执行消耗,分析执行过程基础知识回顾 InnoDB 聚簇索引结构 CREATE TABLE `t1` (`id` int NOT NULL AUTO_INCREMENT,`a` int DEFAULT NULL,`b` int DEFAULT NULL,`c` int DEFAULT NULL,PRIMARY KEY (`id`),KEY `a` (`a`),KEY `bc` (`b`,c…