人工智能深度学习-前置-Torch框架

news2024/11/24 22:23:42

PyTorch是一个基于Python的深度学习框架,它提供了一种灵活、高效、易于学习的方式来实现深度学习模型。PyTorch最初由Facebook开发,被广泛应用于计算机视觉、自然语言处理、语音识别等领域。

安装

建议创建一个新的conda虚拟环境来安装pytorch,避免弯弯绕绕

这里我们选择创建python版本为3.9的conda虚拟环境

conda create -n universal python=3.9

也可以直接在Anaconda里面直接创建。

检查CPU版本

在命令提示符内输入;

nvidia-smi

会显示我们CPU的版本以及CPU算力。

根据CPU版本去官网选择对应的Torch版本

https://pytorch.org/get-started/previous-versions/

复制官网的下载链接下载到对应的虚拟环境即可(需先切换到对应提前创建的虚拟环境),我在这里是选择下载的11.1的版本

下载文件较大,中途不能断网,断了就得重下了。

可能会出现的问题。

numpy版本不兼容,版本不宜过高

中途出现报错的话,就卸载掉原有numpy,重新下载指定版本的numpy。

Torch简介

PyTorch会将数据封装成张量(Tensor)进行计算,所谓张量就是元素为相同类型的多维矩阵。

张量可以在 GPU 上加速运行

类型:

PyTorch中有3种数据类型:浮点数、整数、布尔。其中,浮点数和整数又分为8位、16位、32位、64位,加起来共9种。

按维度看的话;

标量 是 0 阶张量,只有大小没有方向(温度,高度),如 a = torch.tensor(5)

向量 是 1 阶张量,具有大小和方向(加速度,力),如 b = torch.tensor([1, 2, 3])

2维矩阵 是 2 阶张量,线性变换(旋转矩阵,位移矩阵),,如 c = torch.tensor([[1, 2], [3, 4]])

        更高维度的张量,如3维、4维等,通常用于表示图像、视频数据等复杂结构。

1.创建tensor

1.1 torch.tensor

该API是为创建指定数据的张量的

参数:

dtype:数据类型

device:用于计算的设备,分为CPU和‘cuda’(GPU)

(1)可以直接丢数据进去创建,还可以创建标量

(2)也可以用随机数指定维度先创建numpy数组,再创建torch张量

(3)也可以直接创建列表,再转成torch张量

import torch
import numpy as np
x = torch.tensor([1,2,3,4],device='cuda')
x1 = torch.tensor(5)
x3 = np.random.randn(4,4)
x3 = torch.tensor(x3)
x4 = [324,234,234,234],[34,234,234,32]
x4 = torch.tensor(x4)

1.2 torch.Tensor

这个API可以根据维度创建,也可以指定数据(总体跟tensor功能差不多)

import torch
#输出结果不用科学计数法
torch.set_printoptions(sci_mode=False)
#创建的张量为随机浮点数的数组
x = torch.Tensor(3,4,3)
x2 = torch.tensor([10])
print(x)
print(x2.shape)

1.3 创建线性张量

使用torch.arange 和 torch.linspace 和torch.logspace创建线性张量:

import torch
torch.set_printoptions(sci_mode=False)
def test():
    r = torch.arange(1,21,2)
    # print(r)
    #创建一个等差数列
    g = torch.linspace(1,30,14)
    # print(g)
    #创建一个等比数列
    b = torch.logspace(3,10,10,base=3)
    print(b)

2.随机张量

2.1 随机数种子

随机数生成器是一种算法,用于生成一个看似随机的数列,但如果使用相同的种子进行初始化,生成器将产生相同的数列。(随机数种子)

设置 manual_seed( )
获取 torch.initial_seed( )

import torch
def test_random():
    #设置随机数种子
    torch.manual_seed(666)
    #获取随机数种子
    print(torch.initial_seed())

在 PyTorch 中,种子影响所有与随机性相关的操作,包括张量的随机初始化、数据的随机打乱、模型的参数初始化等。通过设置随机数种子,可以做到模型训练和实验结果在不同的运行中进行复现。

生成一组随机张量: torch.rand( )

生成一组随机张量,呈正太分布        torch.randn( ) 

import torch
def test_seed():
    #设置种子
    torch.manual_seed(666)
    #生成随机张量
    print(torch.rand(2,3))
    # 生成随机张量:标准正态分布
    print(torch.randn(4,4))

3.创建01张量

3.1 创建全0张量

torch.zeros 和 torch.zeros_like

import torch
def test_zero():
    #创建一个全0张量
    x = torch.zeros(4,4)
    print(x)
    #创建一个全1张量
    x1 = torch.ones((4,5))
    #用zeros_ones方法转成一个全0张量
    x2 = torch.zeros_like(x1)
    print(x2)

3.2 创建全1张量

torch.ones 和 torch.

ones_like

import torch
def test_one():
    #创建一个全1张量
    x = torch.ones(4,4)
    print(x)
    #创建一个全0张量
    x1 = torch.zeros((4,5))
    #用zeros_ones方法转成一个全1张量
    x2 = torch.ones_like(x1)
    print(x2)

4. 创建指定值张量

torch.fulltorch.full_like 创建全为指定值张量。

import torch
def test_full():
    #用full创建一个2维张量,全部用666填充
    x = torch.full((3,3),666)
    print(x)
    #用full_like方法将x内的666替换为999
    x1 = torch.full_like(x,999)
    print(x1)

5. 创建单位矩张量

也就是创建一个单位矩阵,不过是单位张量。

API:为torch.eye( ),括号内为整数

import torch
def test_eye():
   x = torch.eye(6)
   print(x)

Tensor常见属性

张量有device、dtype、shape等常见属性

1. 切换设备

第一种方法,定义一个三元表达式用于切换

 #把数据切换到GPU进行计算
    device = "cuda" if torch.cuda.is_available() else "cpu"

第二种方法,手动切换

data = data.cuda()
    print(data.device)

第三种,我认为最方便简单的

就是在创建张量时,把张量给定义到GPU上

 data = torch.tensor([1, 2, 3],device='cuda')

2. 类型转换

# 1. 使用type进行类型转换
    data = data.type(torch.float32)
    print(data.dtype)  # float32
    data = data.type(torch.float16)
    print(data.dtype)  # float16

    # 2. 使用类型方法
    data = data.float()
    print(data.dtype)  # float32
    data = data.half()
    print(data.dtype)  # float16
    data = data.double()
    print(data.dtype)  # float64
    data = data.long()
    print(data.dtype)  # int64

五、Tensor数据转换

张量转numpy

共享内存时(浅拷贝)

调用numpy()方法可以把Tensor转换为Numpy,此时内存是共享的。

def test():
    x = torch.tensor([1,2,3,4])
    x_numpy = x.numpy()
    x_numpy[0] = 20
    print(x_numpy)
    print(x)

更新下标[0]时,双方数据都有更改,说明此次转换是浅拷贝

不共享内存时(深拷贝)

使用copy( )方法

import torch
def test():
    x = torch.tensor([1,2,3,4])
    #使用copy()方法
    x_numpy = x.numpy().copy()
    x_numpy[0] = 20
    print(type(x))
    print(type(x_numpy))
    print(x_numpy)
    print(x)

Numpy转张量

共享内存时(浅拷贝)

使用from_numpy()方法,此时的内存是共享的

import torch
import numpy as np
def test006():
    # 1. numpy转张量
    data_numpy = np.array([[1, 2, 3], [4, 5, 6]])
    data_tensor = torch.from_numpy(data_numpy)
    print(type(data_tensor), type(data_numpy))

    # 2. 他们内存是共享的
    data_tensor[0, 0] = 100
    print(data_tensor, data_numpy)

不共享内存时(深拷贝)

直接用torch.tensor( ),是不共享内存的。

data_numpy = np.array([[1, 2, 3], [4, 5, 6]])
    data_tensor = torch.tensor(data_numpy)

六.Tensor与图像

6.1 图片转Tensor

调用这两个库;

from PIL import Image
from torchvision import transforms

图片转tosor的方法是

先读取图片

imgpath = r"./105429.jpg"
        # 1. 读取图片
        img = Image.open(imgpath)

然后实例化转换器(transfroms.ToTensor)。再将要转换得图片使用转换器转换

6.2 Tensor转图片

跟上面的方法差不多,只是转换器的参数是transfroms.ToPILImage()

  img_tensor = torch.randn(3, 224, 224)
    # 2. 创建一个transforms
    transform = transforms.ToPILImage()
    # 3. 转换为图片
    img = transform(img_tensor)
    img.show()
    # 4. 保存图片
    img.save("./test.jpg")

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

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

相关文章

vue3+ts el-tabel 搜索组件

爷爷页面 <template> <searchstyle"z-index: 9999":options"options"placeholder"请选择时间&#xff0c;或输入名称、单选、多个勾选、模糊查询"search"onSearch"></search> </template> <script lan…

Proteus 8.17的详细安装教程

通过百度网盘分享的文件&#xff1a;Proteus8.17(64bit&#xff09;.zip 链接&#xff1a;https://pan.baidu.com/s/1zu8ts1Idhgg9DGUHpAve7Q 提取码&#xff1a;8q8v 1.右击【Proteus8.17(64bit&#xff09;.zip】&#xff0c;选择【全部解压缩......】。 &#xff0c; 2.…

Django基础配置

一.前言 前面我们说完了前端基础&#xff0c;现在我们开始讲后端框架了&#xff0c;我们今天说的是django&#xff0c;当然今天主要还是和大家了解一下框架和django的基础配置 二.web框架 2.1 web框架初始 在我们学习web框架的时候&#xff0c;我们首先得了解到web框架的本…

Keepalived部署

Keepalived部署 安装配置单VIP模式配置master节点查看节点IP信息配置 keepalived.conf启动且加入开机自启查看是否生效 配置backup节点配置 keepalived.conf启动且加入开机自启查看是否生效 主备测试 多VIP配置 keepalived.conf查看IP 安装 dnf install -y keepalived配置 单…

Oracle JDK(通常简称为 JDK)和 OpenJDK区别

Java 的开发和运行时环境主要由两种实现主导&#xff1a;Oracle JDK&#xff08;通常简称为 JDK&#xff09;和 OpenJDK。尽管它们都基于同一个代码库&#xff0c;但在一些关键点上有所区别。以下是详细的对比&#xff1a; 1. 基础代码 Oracle JDK&#xff1a; 基于 OpenJD…

qt+opengl 三维物体加入摄像机

1 在前几期的文章中&#xff0c;我们已经实现了三维正方体的显示了&#xff0c;那我们来实现让物体的由远及近&#xff0c;和由近及远。这里我们需要了解一个概念摄像机。 1.1 摄像机定义&#xff1a;在世界空间中位置、观察方向、指向右侧向量、指向上方的向量。如下图所示: …

ASCB1系列APP操控末端回路智能微断 物联网断路器 远程控制开关 学校、工厂、农场、商业大楼等可用

安科瑞戴婷 Acrel-Fanny ASCB1系列智能微型断路器是安科瑞电气股份有限公司全新推出的智慧用电产品&#xff0c;产品由智能微型断路器与智能网关两部分组成&#xff0c;可用于对用电线路的关键电气因素&#xff0c;如电压、电流、功率、温度、漏电、能耗等进行实时监测&#x…

JMeter监听器与压测监控之 InfluxDB

1. 简介 在本文中&#xff0c;我们将介绍如何在 Kali Linux 上通过 Docker 安装 InfluxDB&#xff0c;并使用 JMeter 对其进行性能监控。InfluxDB 是一个高性能的时序数据库&#xff0c;而 JMeter 是一个开源的性能测试工具&#xff0c;可以用于对各种服务进行负载测试和性能监…

[安洵杯 2019]iamthinking-parse_url绕过thinkphp6.0反序列化

/www.zip下载源码 查看序列化点&#xff0c;index.php <?php namespace app\controller; use app\BaseController;class Index extends BaseController {public function index(){echo "<img src../test.jpg"."/>";$paylaod $_GET[payload];i…

解决CondaError: argument COMMAND: invalid choice: ‘activate‘

自上篇系统重装后&#xff0c;Anaconda重新导入后终端进入conda环境报错&#xff1a; conda-script.py: error: argument COMMAND: invalid choice: ‘activate’ C:\Windows\system32>conda activate xin usage: conda-script.py [-h] [--no-plugins] [-V] COMMAND ... …

【CSS3】Flex弹性布局

文章目录 前言一、基本概念1.容器和项目&#xff1a;2.主轴和交叉轴&#xff1a; 二、容器属性1.flex-direction&#xff1a;决定主轴的方向&#xff0c;即x轴还是y轴2.flex-wrap&#xff1a;定义项目的换行方式3.flex-flow&#xff1a;flex-direction属性和flex-wrap属性的简写…

简述C++map容器

pair键值对 std::pair在很多关联容器&#xff08;如std::map、std::multimap、std::set、std&#xff1a;multiset等&#xff09;中被广泛应用。以std::map为例&#xff0c;std::map是一个键值对的容器&#xff0c;其中每个元素都是一个std::pair&#xff0c;键用于唯一标识元…

刷题计划 day22回溯(一)【组合】【组合总和 III】【电话号码的字母组合】

⚡刷题计划day22 回溯&#xff08;一&#xff09;开始&#xff0c;此期开启回溯专题&#xff0c;敬请期待关注&#xff0c;可以点个免费的赞哦~ 往期可看专栏&#xff0c;关注不迷路&#xff0c; 您的支持是我的最大动力&#x1f339;~ 目录 回溯算法理论基础 回溯法解决的…

Qt桌面应用开发 第六天(鼠标事件 定时器事件 定时器类 事件分发器 事件过滤器)

目录 1.1鼠标进入和离开enterEvent\leaveEvent 1.2鼠标按下释放和移动mousePressEvent\mouseReleaseEvent\mouseMoveEvent 1.3定时器事件timerEvent 1.4定时器类QTimer 1.5事件分发器event 1.6事件过滤器eventFilter 1.1鼠标进入和离开enterEvent\leaveEvent 事件&#x…

【Linux清空显存占用】Linux 系统中清理 GPU 显存

操作指令 # 查看NVIDIA GPU状态和进程 nvidia-smi # 查找所有包含"python"的进程 ps -ef | grep python # 强制结束进程号为3023的进程 kill -9 3023截图演示 在 Linux 系统中清理 GPU 显存可以采用以下方法&#xff1a; 1. 终止特定进程&#xff08;常用方法&…

对撞双指针(七)三数之和

15. 三数之和 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组…

vue2-基础核心

vue简介 动态构建用户界面的渐进式 JavaScript 框架 vue的特点: 遵循MVVM模式 采用组件化模式&#xff0c;提高代码复用率&#xff0c;让代码更好维护 声明式编码&#xff0c;无需直接操作DOM&#xff0c;提高开发效率&#xff0c;编码简洁、体积小&#xff0c;运行效率高 本…

Prompting LLMs to Solve Complex Tasks: A Review

文章目录 题目简介任务分解未来方向结论 题目 促使 LLM 解决复杂任务&#xff1a; 综述 论文地址&#xff1a;https://www.intjit.org/cms/journal/volume/29/1/291_3.pdf 简介 大型语言模型 (LLM) 的最新趋势显而易见&#xff0c;这体现在大型科技公司的投资以及媒体和在线社…

反射、依赖注入

特性和依赖注入都是基于反射的&#xff0c;同时反射一般和接口配合着使用。 接口隔离原则 接口隔离原则&#xff1a;主张应该把客户端对一个类的需求分解成更小、更具体的接口&#xff0c;而不是提供一个包含所有功能的大接口。 接口中的需求是&#xff1a;乙方不能少给&am…

MT8768/MTK8768安卓核心板性能参数_联发科安卓智能模块开发方案

MT8768安卓核心板 是一款采用台积电12nm FinFET制程工艺的智能手机芯片。MT8768核心板不仅提供所有高级功能和出色体验&#xff0c;同时确保智能终端具备长电池寿命。该芯片提供了一个1600x720高清(20:9比例)分辨率显示屏&#xff0c;排除了清晰度和功耗之间的平衡问题。该芯片…