Day24_【深度学习(3)—PyTorch使用—张量的创建和类型转换】

一、创建张量

1.张量基本创建方式

  • torch.tensor 根据指定数据创建张量  (最重要)
  • torch.Tensor 根据形状创建张量, 其也可用来创建指定数据的张量
  • torch.IntTensor、torch.FloatTensor、torch.DoubleTensor 创建指定类型的张量

1.1 torch.tensor

# 方式一:创建张量 torch.tensor
def create_tensor():# 1.创建标量张量data1 = torch.tensor(3)# print(data1.ndim) # 维度:0# print(data1)# print(data1.shape)# print(data1.dtype)# 2.创建一维向量张量data2 = torch.tensor([2, 3, 4])  # 几个数字shape就是几 torch.Size([3]) torch.int64# print(data2,data2.shape,data2.dtype)# print(data2.ndim) # 维度:1# 3.创建二维向量张量data3 = torch.tensor([[2, 3, 4], [6, 7, 8]])  # 2个样本,每个样本三个特征 torch.Size([2, 3]) torch.int64# print(data3,data3.shape,data3.dtype)# print(data3.ndim) # 维度:2
if __name__ == '__main__':create_tensor()

1.2 torch.Tensor

# 方式二:创建张量 torch.Tensor
def create_Tensor():# ctrl+p:参数提示# 根据形状# data=torch.Tensor(2,3)# data=torch.tensor(2,3) #报错# data=torch.Tensor(3)# 根据数值data = torch.Tensor([3, 4])# print(data)
if __name__ == '__main__':create_Tensor()

1.3 torch.IntTensor、torch.FloatTensor、torch.DoubleTensor

# 方式三:创建张量 torch.IntTensor
def create_IntTensor():# 根据形状创建# data=torch.IntTensor(3,4)# 根据数值创建data = torch.IntTensor([3, 4])# 尝试小数# data=torch.IntTensor([3.2,4.3]) #会省略小数点后# data=torch.FloatTensor([3.2,4.3]) #tensor([3.2000, 4.3000]) torch.float32# data=torch.DoubleTensor([3.2,4.3]) #tensor([3.2000, 4.3000], dtype=torch.float64) torch.float64print(data, data.dtype)
if __name__ == '__main__':create_IntTensor()

2.创建线性和随机张量

  • torch.arange 和 torch.linspace 创建线性张量
  • torch.random.init_seed 和 torch.random.manual_seed 随机种子设置
  • torch.randn 创建随机张量

2.1 torch.arange 和 torch.linspace

  1. arange(start,end,step) start默认0,step默认1,表示步长,包左不包右 包含0不包含10

  2. linspace(start,end,steps) 包左且包右,steps取多少个值

# 创建线性张量
def create_arange_linspace_tensor():arange_data=torch.arange(0,10,1)print(arange_data,arange_data.dtype) #tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) torch.int64lin_data=torch.linspace(0,10,5)print(lin_data,lin_data.dtype) #tensor([ 0.0000,  2.5000,  5.0000,  7.5000, 10.0000]) torch.float32
if __name__ == '__main__':create_arange_linspace_tensor()

2.2 torch.random.init_seed 和 torch.random.manual_seed

  • torch.initial_seed()
  • torch.random.initial_seed() # 与上一行一样写法
  •  torch.manual_seed(100)
  •  torch.random.manual_seed(100)  # 与上一行一样写法
# 创建随机张量
def create_random_tensor():# 创建两行三列的随机种子data=torch.randn(2,3)# 查看随机数种子# print('随机数种子:', torch.initial_seed()) #值一直在变# print('随机数种子:', torch.random.initial_seed()) # 与上一行一样写法# 手动随机数种子设置torch.manual_seed(100)# torch.random.manual_seed(100)  # 与上一行一样写法data = torch.randn(2, 3)print(data,data.dtype)
if __name__ == '__main__':create_random_tensor()

3.创建0-1张量

  • torch.ones 和 torch.ones_like 创建全1张量
  • torch.zeros 和 torch.zeros_like 创建全0张量 (重要)
  • torch.full 和 torch.full_like 创建全为指定值张量

这里的like是模仿数据的形状进行创建,而不是模仿值

def create_ones_zeros_full_tensor():# 1.1 创建指定形状全1张量# data = torch.ones(2, 3)# print(data,data.shape,data.size()) # torch.Size([2, 3]) torch.Size([2, 3]),pytorch中shape属性和size()方法是一样的# 1.2 根据张量形状创建全1张量# data = torch.ones_like(data)# print(data)# 2.1 创建指定形状全0张量# data=torch.zeros(2,3)# print(data,data.dtype)# 2.2 根据张量形状创建全0张量# data=torch.zeros_like(data)# print(data,data.dtype)# 3.1 创建指定形状指定值的张量data = torch.full([2, 3], 10)print(data) #tensor([[10, 10, 10],[10, 10, 10]])# 3.2 根据张量形状创建指定值的张量data = torch.full_like(data, 20)print(data) #tensor([[20, 20, 20],[20, 20, 20]])if __name__ == '__main__':create_ones_zeros_full_tensor()

二、张量的类型转换

1. 张量之间的类型转换

  • data.type(torch.DoubleTensor)
  • data.double() (重点)
# 张量元素类型转换
def type_transform_tensor():data=torch.full([2, 3], 10)print(data,data.dtype) # torch.int64# 方式一# data1=data.type(torch.DoubleTensor)# print(data1,data1.dtype) # torch.float64# 方式二data2=data.double()print(data2,data2.dtype) #torch.float64
if __name__ == '__main__':type_transform_tensor()

2. 张量与numpy之间的类型转换

tensor转numpy

  •  方式一:通过numpy()转换为numpy,影响data_tensor的值,但可以通过data_numpy=data_tensor.numpy().copy(),深拷贝解决
  •  方式二:通过np.array()转换为numpy,不影响data_tensor的值,默认不共享内存 
import numpy as np
import torchdef tensor_to_numpy():# 1.tensor转numpydata_tensor=torch.tensor([1,2,3,4,5])print(data_tensor) # tensor([1, 2, 3, 4, 5])# 方式一:通过numpy()转换为numpy,影响data_tensor的值,但可以通过data_numpy=data_tensor.numpy().copy(),深拷贝解决data_numpy=data_tensor.numpy()print(data_numpy) # [1 2 3 4 5]# 修改numpy的值data_numpy[0]=200print(data_numpy) #[200   2   3   4   5]print(data_tensor) #tensor([200,   2,   3,   4,   5])# 方式二:通过np.array()转换为numpy,不影响data_tensor的值# data_numpy = np.array(data_tensor)# print("data_numpy-->", data_numpy) # [1 2 3 4 5]# data_numpy[0] = 200# print("data_numpy-->", data_numpy) # [200   2   3   4   5]# print('data_tensor-->', data_tensor) # tensor([1, 2, 3, 4, 5])

numpy转tensor

  • 方式一:torch.from_numpy 默认共享内存,使用 copy 函数避免共享,解决 data_tensor = torch.from_numpy(data_numpy.copy())
  •  方式2:torch.tensor 默认不共享内存 
def numpy_to_tensor():# 2.numpy转tensor# 准备一个numpy数据data_numpy=np.array([2,3,4])# print(data_numpy,data_numpy.dtype) # [2 3 4] int64# 方式一:torch.from_numpy 默认共享内存,使用 copy 函数避免共享,解决 data_tensor = torch.from_numpy(data_numpy.copy())# data_tensor = torch.from_numpy(data_numpy)# # print(data_tensor,data_tensor.dtype) # tensor([2, 3, 4]) torch.int64# # 修改tensor的值,发现会影响numpy# data_tensor[0]=200# print(data_tensor,data_tensor.dtype) # tensor([200,   3,   4]) torch.int64# print(data_numpy,data_numpy.dtype) # [200   3   4] int64# 方式2:torch.tensor 默认不共享内存 data_tensor=torch.tensor(data_numpy)data_tensor[0]=200print(data_tensor) # tensor([200,   3,   4])print(data_numpy) # [2 3 4]
if __name__ == '__main__':numpy_to_tensor()

3.标量张量和数字转换(重要)

data_tensor.item()

def scalar_tensor_to_number():# 标量转number# data_tensor=torch.tensor(3)# 一维向量转numberdata_tensor = torch.tensor([3]) # 一个数字 (1,)# 二维矩阵转number# data_tensor = torch.tensor([[3]]) # 一行一列(1,1)print(data_tensor) # tensor(3) tensor([3]) tensor([[3]])data1=data_tensor.item()print(data1) # 3
if __name__ == '__main__':scalar_tensor_to_number()

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

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

相关文章

3-12〔OSCP ◈ 研记〕❘ WEB应用攻击▸利用XSS提权

郑重声明: 本文所有安全知识与技术,仅用于探讨、研究及学习,严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任,本人不承担任何责任。 如需转载,请注明出处且不得用于商业盈利。 …

AI 大模型赋能智慧矿山:从政策到落地的全栈解决方案

矿山行业作为能源与工业原料的核心供给端,长期面临 “安全生产压力大、人工效率低、技术落地难” 等痛点。随着 AI 大模型与工业互联网技术的深度融合,智慧矿山已从 “政策引导” 迈入 “规模化落地” 阶段。本文基于 AI 大模型智慧矿山行业解决方案&…

Node.js 项目依赖包管理

h5打开以查看 一、核心理念:从“能用就行”到“精细化管理” 一个规范的依赖管理体系的目标是: 可复现:在任何机器、任何时间都能安装完全一致的依赖,保证构建结果一致。 清晰可控:明确知道每个依赖为何存在&#x…

洛谷P1835素数密度 详解

题目如下:这里面有部分代码比较有意思:1,为何开始先遍历,最终值小于50000?因为题目要求的右边与左边差小于 10^6 ,所以最多有10^3个素数,所以保存里面的素数数量大于1000,而50000的化…

突破限制:FileCodeBox远程文件分享新体验

文章目录【视频教程】1.Docker部署2.简单使用演示3. 安装cpolar内网穿透4. 配置公网地址5. 配置固定公网地址在隐私日益重要的今天,FileCodeBox与cpolar的协同为文件传输提供了安全高效的解决方案。通过消除公网IP限制和隐私顾虑,让每个人都能掌控自己的…

以太网链路聚合实验

一、实验目的掌握使用手动模式配置链路聚合的方法掌握使用静态 LACP 模式配置链路聚合的方法掌握控制静态 LACP 模式下活动链路的方法掌握静态 LACP 的部分特性的配置二、实验环境安装有eNSP模拟器的PC一台,要求PC能联网。三、实验拓扑LSW1与LSW2均为S3700交换机。L…

autMan安装教程

一、安装命令 如果你系统没安装docker,请看往期教程 以下为通用命令 docker run -d --name autman --restart always -p 8080:8080 -p 8081:8081 -v /root/autman:/autMan --log-opt max-size10m --log-opt max-file3 hdbjlizhe/autman:latest解释一下以上命令&…

【无人机】自检arming参数调整选项

检查项目 (英文名)中文含义检查内容四旋翼建议 (新手 → 老手)理由说明All所有检查启用下面所有的检查项目。✅ 强烈建议勾选这是最安全的设置,确保所有关键系统正常。Barometer气压计检查气压计是否健康、数据是否稳定。✅ 必须勾选用于定高模式,数据异…

数字图像处理(1)OpenCV C++ Opencv Python显示图像和视频

Open CV C显示图像#include <iostream> #include <opencv2/opencv.hpp> using namespace cv;//包含cv命名空间 int main() {//imread(path)&#xff1a;从给定路径读取一张图片&#xff0c;储存为Mat变量对象Mat img imread("images/love.jpg");//named…

【芯片设计-信号完整性 SI 学习 1.2.2 -- 时序裕量(Margin)】

文章目录1. 什么是时序裕量&#xff08;Margin&#xff09;1. 背景&#xff1a;为什么需要数字接口时序分析2. 时钟周期方程3. Setup 裕量 (tMARGIN_SETUP)4. Hold 裕量 (tMARGIN_HOLD)5. 设计注意事项6. 实际应用场景2. 时序裕量的来源3. 测试方法(1) 眼图测试 (Eye Diagram)(…

AOP 切面日志详细

在业务方法上打注解package com.lib.service;Service public class BookService {LogExecution(description "查询图书")public Book query(int id) {return repo.findById(id);}LogExecution(description "借阅图书")public void borrow(int id) {// 模…

使用paddlepaddle-Gpu库时的一个小bug!

起初安装的是 paddlepaddle 2.6.1版本。 用的是Taskflow的快速分词以及ner快速识别&#xff1a;​​​​​​​seg_accurate Taskflow("word_segmentation", mode"fast") ner Taskflow("ner", mode"fast")但是使用不了Gpu。想使用Gp…

量子能量泵:一种基于并联电池与电容阵的动态直接升压架构

量子能量泵&#xff1a;一种基于并联电池与电容阵的动态直接升压架构 摘要 本文提出了一种革命性的高效电源解决方案&#xff0c;通过创新性地采用并联电池组与串联高压电容阵相结合的架构&#xff0c;彻底解决了低电压、大功率应用中的升压效率瓶颈与电池一致性难题。该方案摒…

【Linux网络】网络基础概念——带你打开网络的大门

1. 计算机网络背景 文章目录1. 计算机网络背景网络发展2. 初识协议2.1 协议分层软件分层的好处2.2 OSI七层模型2.3 TCP/IP五层(或四层)模型网络发展 独立模式 独立模式是计算机网络发展的最初阶段&#xff0c;主要特点如下&#xff1a; 单机工作环境&#xff1a; 每台计算机完…

简单介绍一下Clickhouse及其引擎

一、ClickHouse 的优缺点一、ClickHouse 的优点 ✅ 1. 极致的查询性能 列式存储&#xff1a;只读取查询涉及的列&#xff0c;大幅减少 IO。数据压缩&#xff1a;常见压缩率 5~10 倍&#xff0c;减少存储和带宽消耗。向量化执行&#xff1a;按批次&#xff08;block&#xff09;…

【卷积神经网络详解与实例】8——经典CNN之VGG

1 开发背景 VGGNet是牛津大学视觉几何组(Visual Geometry Group)提出的模型&#xff0c;该模型在2014ImageNet图像分类与定位挑战赛 ILSVRC-2014中取得在分类任务第二&#xff0c;定位任务第一的优异成绩。其核心贡献在于系统性地探索了网络深度对性能的影响&#xff0c;并证明…

【分享】中小学教材课本 PDF 资源获取指南

很多人都不知道&#xff0c;其实官方提供的中小学教材课本 PDF 文档是完全免费且正版的&#xff0c;无需使用扫描版&#xff0c;清晰度和质量都非常高。 这些资源就藏在国家中小学智慧教育平台&#xff08;basic.smartedu.cn&#xff09;上。这个平台涵盖了从小学到高中的各个…

js趣味游戏 贪吃蛇

以下是关于JavaScript趣味游戏的系统性整理&#xff0c;涵盖经典案例、开发工具、教程资源及创意方向&#xff0c;助您快速掌握JS游戏开发的核心逻辑&#xff1a;一、经典JS趣味游戏案例贪吃蛇&#xff08;Snake Game&#xff09;核心机制&#xff1a;键盘控制蛇的移动方向&…

【Redis#11】Redis 在 C++ 客户端下的安装使用流程(一条龙服务)

一、安装使用 --Ubuntu 下启用 1. 前置依赖 - hiredis hiredis 是一个用 C 语言实现的 Redis 客户端库&#xff0c;redis-plus-plus 库基于 hiredis 实现。在开始之前&#xff0c;请确保已安装 libhiredis-dev&#xff0c;可以通过以下命令安装&#xff1a; sudo apt install l…

kibana+elasticsearch console查询示例

kibana console查询入口如下 http://localhost:5601/app/dev_tools#/console/shell 1 整体查询 获取index为newbook的所有数据 GET newbook/_search 2 通用查询 获取index为newbook的数据中&#xff0c;bookname包含“西游”的所有数据。 GET newbook/_search { "query&q…