【PyTorch Tensor】PyTorch Tensor编程教学:基础与实战

PyTorch是一个开源的机器学习库,它提供了强大的张量计算(Tensor computation)能力和动态计算图(Dynamic computation graph),使得深度学习模型的构建和训练变得更加灵活和直观。在本文中,我们将通过一些基础的例子来学习PyTorch中的Tensor编程。
官网网站中文学习网站:中文pytorch 教程学习网站

1. PyTorch中的Tensor

Tensor是PyTorch中的基本数据结构,它可以看作是一个高维数组或矩阵。与NumPy的ndarray类似,Tensor也支持多种数值运算。但是,与ndarray不同的是,Tensor可以在GPU上运行,这使得计算速度大大提升。

1.1 创建Tensor

首先,让我们来学习如何创建一个Tensor。PyTorch提供了多种方式来创建Tensor,例如,从Python列表或NumPy数组创建。

import torch
# 从Python列表创建Tensor
tensor_from_list = torch.tensor([1, 2, 3, 4])
# 从NumPy数组创建Tensor
import numpy as np
numpy_array = np.array([1, 2, 3, 4])
tensor_from_numpy = torch.from_numpy(numpy_array)
# 创建一个全零的Tensor
zero_tensor = torch.zeros(4)
# 创建一个全一的Tensor
one_tensor = torch.ones(4)
# 创建一个形状为(2, 3)的未初始化的Tensor
uninitialized_tensor = torch.empty(2, 3)
# 创建一个形状为(2, 3)且值在[0, 1)区间均匀分布的Tensor
uniform_tensor = torch.rand(2, 3)
# 创建一个形状为(2, 3)且值服从标准正态分布的Tensor
normal_tensor = torch.randn(2, 3)
# 默认数据类型 32位浮点数
a=torch.Tensor([[1,2,3],[4,5,6],[7,8,9]])
print(a)
print(a.type())# 指定数据类型64位浮点数
b=torch.DoubleTensor([[1,2,3],[4,5,6],[7,8,9]])
print(b)
print(b.type())# 指定数据类型16位整型
c=torch.ShortTensor([[1,2,3],[4,5,6],[7,8,9]])
print(c)
print(c.type())# 指定数据类型32位整型
d=torch.IntTensor([[1,2,3],[4,5,6],[7,8,9]])
print(d)
print(d.type())# 指定数据类型64位整型
e=torch.LongTensor([[1,2,3],[4,5,6],[7,8,9]])
print(e)
print(e.type())

运行结果:

tensor([[1., 2., 3.],[4., 5., 6.],[7., 8., 9.]])
torch.FloatTensor
tensor([[1., 2., 3.],[4., 5., 6.],[7., 8., 9.]], dtype=torch.float64)
torch.DoubleTensor
tensor([[1, 2, 3],[4, 5, 6],[7, 8, 9]], dtype=torch.int16)
torch.ShortTensor
tensor([[1, 2, 3],[4, 5, 6],[7, 8, 9]], dtype=torch.int32)
torch.IntTensor
tensor([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
torch.LongTensor

1.2 Tensor的基本属性

每个Tensor都有一些基本的属性,如形状(shape)、数据类型(dtype)和设备(device)。

# 查看Tensor的形状
print(tensor_from_list.shape)
# 查看Tensor的数据类型
print(tensor_from_list.dtype)
# 查看Tensor所在的设备
print(tensor_from_list.device)

1.3 Tensor的运算

PyTorch支持丰富的Tensor运算,包括算术运算、矩阵运算、索引和切片等。

# 算术运算
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])
add_result = a + b
sub_result = a - b
mul_result = a * b
div_result = a / b
# 矩阵运算
mat1 = torch.tensor([[1, 2], [3, 4]])
mat2 = torch.tensor([[5, 6], [7, 8]])
matmul_result = torch.matmul(mat1, mat2)
# 索引和切片
tensor = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
first_row = tensor[0]
first_column = tensor[:, 0]
last_element = tensor[-1, -1]
矩阵乘法运行结果
tensor([[19, 22],[43, 50]])

二维矩阵乘法是一种基本的线性代数运算,用于计算两个矩阵相乘的结果。矩阵乘法遵循特定的规则,其中矩阵A和矩阵B的乘积矩阵C可以通过以下方式计算:
C i j = ∑ k = 1 m A i k × B k j C_{ij} = \sum_{k=1}^{m} A_{ik} \times B_{kj} Cij=k=1mAik×Bkj
其中, C C C是结果矩阵, A A A B B B是乘积矩阵的输入矩阵, i i i j j j是矩阵C的行和列索引, k k k是矩阵A和矩阵B的列索引。
下面是一个简单的例子来说明二维矩阵乘法的计算过程:
假设我们有两个矩阵:
A = [ 1 2 3 4 ] A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ \end{bmatrix} A=[1324]

B = [ 5 6 7 8 ] B = \begin{bmatrix} 5 & 6 \\ 7 & 8 \\ \end{bmatrix} B=[5768]
我们想要计算矩阵A和矩阵B的乘积矩阵C。
首先,我们按照上述公式计算每个元素 C i j C_{ij} Cij
C 11 = A 11 × B 11 + A 12 × B 21 = 1 × 5 + 2 × 7 = 5 + 14 = 19 C_{11} = A_{11} \times B_{11} + A_{12} \times B_{21} = 1 \times 5 + 2 \times 7 = 5 + 14 = 19 C11=A11×B11+A12×B21=1×5+2×7=5+14=19
C 12 = A 11 × B 12 + A 12 × B 22 = 1 × 6 + 2 × 8 = 6 + 16 = 22 C_{12} = A_{11} \times B_{12} + A_{12} \times B_{22} = 1 \times 6 + 2 \times 8 = 6 + 16 = 22 C12=A11×B12+A12×B22=1×6+2×8=6+16=22
C 21 = A 21 × B 11 + A 22 × B 21 = 3 × 5 + 4 × 7 = 15 + 28 = 43 C_{21} = A_{21} \times B_{11} + A_{22} \times B_{21} = 3 \times 5 + 4 \times 7 = 15 + 28 = 43 C21=A21×B11+A22×B21=3×5+4×7=15+28=43
C 22 = A 21 × B 12 + A 22 × B 22 = 3 × 6 + 4 × 8 = 18 + 32 = 50 C_{22} = A_{21} \times B_{12} + A_{22} \times B_{22} = 3 \times 6 + 4 \times 8 = 18 + 32 = 50 C22=A21×B12+A22×B22=3×6+4×8=18+32=50
因此,矩阵A和矩阵B的乘积矩阵C为:
C = [ 19 22 43 50 ] C = \begin{bmatrix} 19 & 22 \\ 43 & 50 \\ \end{bmatrix} C=[19432250]
在这个例子中,我们首先将矩阵A的第一行与矩阵B的第一列相乘,然后将结果与矩阵B的第二列相乘,最后将这两个结果相加得到矩阵C的第一行第一列的值。我们重复这个过程,计算出矩阵C的所有元素。

# 拼接两个tensor
mat3 = torch.cat([mat1,mat2], 0)
print(mat3)
print(mat3.dtype)

2. 实战:使用Tensor构建线性模型

现在,让我们使用Tensor来构建一个简单的线性模型:y = wx + b。我们将创建一些随机的数据作为输入和权重,然后计算模型的输出。

# 创建随机的输入数据
x = torch.randn(10)
# 创建随机的权重和偏置
w = torch.randn(1)
b = torch.randn(1)
# 计算模型的输出
y = w * x + b

在本文中,我们介绍了PyTorch中Tensor的基本概念和操作。通过这些基础知识和实战例子,您应该能够开始使用PyTorch进行更复杂的深度学习模型构建和训练。记住,实践是最好的学习方式,所以不要害怕犯错,大胆尝试吧!

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

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

相关文章

rabbitmq消息处理模式

在 RabbitMQ 中,消费者的消息处理模式可以分为两种:pull 模式和 push 模式⁵。 Pull 模式:消费者主动从消息中间件中拉取消息。这种模式下,每次接收消息都需要拉取一下队列的信息,由于是拉取的,实用性较差&…

使用hping3网络工具构造TCP/IP数据包和进行DDos攻击

1 概述 hping3是一个强大的命令行工具,用于生成、发送和解析TCP/IP协议的数据包。它是开源的网络安全工具,由Salvatore Sanfilippo开发,主要应用于网络审计、安全测试和故障排查等领域。hping3不仅可以作为普通的网络连通性检测工具&#xf…

【蓝桥杯第十三届省赛B】(部分详解)

九进制转十进制 #include <iostream> #include<math.h> using namespace std; int main() {cout << 2*pow(9,3)0*pow(9,2)2*pow(9,1)2*pow(9,0) << endl;return 0; }顺子日期 #include <iostream> using namespace std; int main() {// 请在此…

ROS2从入门到精通1-2:详解ROS2服务通信机制与自定义服务

目录 0 专栏介绍1 服务通信模型2 服务模型实现(C)3 服务模型实现(Python)4 自定义服务5 话题、服务通信的异同 0 专栏介绍 本专栏旨在通过对ROS2的系统学习&#xff0c;掌握ROS2底层基本分布式原理&#xff0c;并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。…

智慧公厕是什么?智慧公厕的主要功能、特点?

智慧公厕&#xff0c;顾名思义&#xff0c;是指应用了智能科技的公共厕所&#xff0c;旨在提供更加便捷、舒适、智能化的卫生服务。相比传统的公厕&#xff0c;智慧公厕不仅拥有更加智能化的设备&#xff0c;还配备了远程监控与管理系统&#xff0c;以及节能环保技术&#xff0…

如何选择优质的外贸网站建设公司?

在当今数字化时代&#xff0c;外贸行业越来越重视在线渠道的发展&#xff0c;而外贸网站建设作为企业对外联系的重要窗口&#xff0c;扮演着至关重要的角色。选择一家优质的外贸网站建设公司&#xff0c;不仅能帮助企业提升品牌形象&#xff0c;还能有效扩大海外市场。那么&…

微信小程序【从入门到精通】——服务器的数据交互

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

OpenCV中的模块:三维显示-VIZ

曾经基于PCL 做过不少点云相关的开发,其中借助VTK进行点云显示。后来基于OpenCV进行三维重建,遇到了点云显示的问题。当时采取的方法是将点云保存下来,然后借助CloudCompare等查看效果。如果能够将VIZ编译进来,预计会提升开发速度。本文章将简要介绍其中Ubuntu和windows下的…

【实战教程】Spring Boot项目集成华为openGauss数据库的关键步骤与注意事项

引言&#xff1a; 随着国产数据库技术的崛起&#xff0c;华为openGauss凭借其高性能、安全可靠及易用性成为了众多开发者的首选方案。本篇技术文章将聚焦于如何在Spring Boot项目中成功集成华为openGauss数据库&#xff0c;并揭示其中的一些关键步骤与注意事项&#xff0c;助您…

Python爬虫之异步爬虫

异步爬虫 一、协程的基本原理 1、案例 案例网站&#xff1a;https://www.httpbin.org/delay/5、这个服务器强制等待了5秒时间才返回响应 测试&#xff1a;用requests写一个遍历程序&#xff0c;遍历100次案例网站&#xff1a; import requests import logging import time…

linux C:变量、运算符

linux C 文章目录 变量运算符 一、变量 [存储类型] 数据类型 标识符 值 标识符&#xff1a;由数字、字母、下划线组成的序列&#xff0c;不能以数字开头。 数据类型&#xff1a;基本数据类型构造类型 存储类型&#xff1a;auto static…

Linux(CentOS7)配置系统服务以及开机自启动

目录 前言 两种方式 /etc/systemd/system/ 进入 /etc/systemd/system/ 文件夹 创建 nginx.service 文件 重新加载 systemd 配置文件 ​编辑 配置开机自启 /etc/init.d/ 进入 /etc/init.d/ 文件夹 创建 mysql 文件 编写脚本内容 添加/删除系统服务 配置开机自启 …

大前端-postcss安装使用指南

PostCSS 是一款强大的 CSS 处理工具&#xff0c;可以用来自动添加浏览器前缀、代码合并、代码压缩等&#xff0c;提升代码的可读性&#xff0c;并支持使用最新的 CSS 语法。以下是一份简化的 PostCSS 安装使用指南&#xff1a; 一、安装 PostCSS 在你的项目目录中&#xff0c…

【MySQL笔记】SELECT COUNT(*) 的时候,加不加where条件有差别吗?

文章目录 前言实验结论 前言 这部分很多帖子都只在问题里罗列下&#xff0c;好像也没详细解答 其实就是跟InnoDB优先走二级索引的优化有关&#xff0c;前面也提到了”优化的前提是查询语句中不包含where条件和group by条件“ 还不太了解这个优化的朋友可以看上一篇帖子 实验 …

数据结构与算法(2)链表的初始化,插入,打印和删除——C语言实现

目录&#xff1a; 1.头文件 2.单链表的定义 3.菜单栏的设置 4.单链表的初始化 5.添加元素 6.打印元素 7.插入元素 8.删除元素 9.主函数 1.头文件 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h>typedef int El…

为什么好的产品经理极度稀缺?

目录 简介 对于个体 对于企业 作者简介 简介 要回答这个问题&#xff0c;一是要界定是谁提出的这个问题。 如果是企业负责人提问的。 这个问题的本质更多的是出在了企业的内部流程和管理上。 说明企业对产品经理的定位多数是有问题的或者是不清晰的。 而且内部也缺乏明…

学习计划.

每周打cf&#xff0c;每天保持刷一到两道题目&#xff0c;完成实验室安排的任务 第六周 Java集合&#xff0c;JavaFx 第七周 范型、异常处理 第八周 MySQL数据库和JDBC编程、多线程 第九周 网络编程、观看视频学习如何写项目 并尝试开始Java项目 第十周 完成项目

JAVA面试大全之微服务篇

目录 1、Spring Cloud 1.1、什么是微服务?谈谈你对微服务的理解? 1.2、什么是Spring Cloud? 1.3、springcloud中的组件有那些? 1.4、具体说说SpringCloud主要项目

编曲知识13:弦乐技法应用 合成器应用 声场摆位

弦乐技法 技法分类 Sustain(长音)类: Legato、Port、Gliss、Tremolo、Trills Staccato(短音)类: Staccato、Pizzicato、Spiccato Legato:连奏 Port:滑音 Gliss:慢速滑音 Tremolo:震音 Trills:颤音 Staccato:顿弓 Pizzicato:拨奏 Spiccato:跳弓 长音类技法 主…

如何调整Node内存限制

Node为什么会出现内存溢出&#xff0c;如何优化&#xff1f;如何调整Node内存限制&#xff1f; 一、内存限制以及溢出原因 Node.js默认的内存限制 Node.js默认的内存限制取决于你的操作系统和Node.js的版本。在大多数情况下&#xff0c;Node.js默认的内存限制应该是1.4GB&#…