深度学习1

ops/2024/11/25 14:38:43/

一、库的安装

1、cuda/cpu

        cuda 有最好,没有无需额外安装;cpu无需其他操作,直接进入下面步骤

        查看 nvidia 驱动版本:cmd里面,输入nvidia-smi 查看GPU驱动程序版本 CUDA Version位置(保证CUDA版本号<=GPU驱动程序版本 ):

2、torch

        官网:Previous PyTorch Versions | PyTorch 选择版本距离最新低于两个层次的,比如目前最新为2.5.0,选择的时候挑2.2.2及一下版本,不可太低。

        

 根据cuda、cpu、操作系统、虚拟环境  复制对应内容 ,例如:

conda install pytorch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 pytorch-cuda=12.1 -c pytorch -c nvidia

在对应虚拟环境中执行该语句安装(时间很长,不推荐

推荐方法:

1、在复制官网安装命令后:打开阿里云镜像源: pytorch-wheels-cu121安装包下载_开源镜像站-阿里云  选择对应版本的文件下载(cu表示cuda ,cp表示python版本)

2、下载使用idm等工具加速;

3、打开虚拟环境切换路径到下载文件的地址(直接将文件放到命令语句文件地址最快),执行

conda install 文件完整名称

4、文件安装完成后,执行上面复制的官网命令语句,省掉最后内容,直接安装

conda install pytorch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 pytorch-cuda=12.1

5、检查包

conda list

 若发现存在漏掉某个包,重新安装这个包即可(指定版本,不要更改)

        安装torch过程会安装cuda,无需重复安装

二、Tensor概念

        torch运算规程中将数据封装为tensor(张量)

        tensor与 numpy

一致:数据的多维矩阵运算;都需要数据内容同一种格式(整数、浮点数);可以互相转化;可以切片、索引、布尔等操作

差异:numpy不能使用gpu加速计算,tensor可以指定gpu计算,且多线程并线计算;tensor可以自动求导;tensor支持更多的数据类型(同种大类型的不同子类)

1、数据基础

        张量是一个多维数组,标量是0阶张量;向量是1阶张量;二维矩阵是2阶张量(通过方向等标签划分)。

1.1、浮点数类型

   torch.float16 或 torch.half:16位浮点数

   torch.float32 或 torch.float:32位浮点数(默认)

   torch.float64 或 torch.double:64位浮点数

1.2、整数类型

   torch.int8:8位整数

   torch.int16 或 torch.short:16位整数

   torch.int32 或 torch.int:32位整数(默认)

   torch.int64 或 torch.long:64位整数

1.3、布尔值

   torch.bool True/False

2、tensor创建

2.1、创建方式

        数据创建和形状创建;指定形状时,默认填充随机数据,使用列表和数组创建时,自动获取数据和形状。

数据创建:tensor(小写t) 
import torch 
import numpy as np# 使用标量创建张量
t1 = torch.tensor(7) # 创建0阶张量
print(t1,t1.shape)# numpy 创建张量
data1 = np.array([10,20,30,40]) # 创建一阶张量
data2 = np.array([[10,20,30,40],[10,20,30,40]]) # 创建二阶张量
t1=torch.tensor(data1)
print(t1,t1.shape)
t2=torch.tensor(data2)
print(t2,t2.shape)# 列表创建张量
data1 = [10,20,30] # 创建一阶张量
data2 = [[10,20,30],[10,20,30]] # 创建二阶张量
t1=torch.tensor(data1)
print(t1,t1.shape)
t2=torch.tensor(data2)
print(t2,t2.shape)
形状创建:Tensor(大写T)    
import torch 
import numpy as np# 使用标量创建张量
t1 = torch.Tensor(7) # 创建1阶张量
t2 = torch.Tensor(2,3) # 创建2阶张量
print(t1,t1.shape)
print(t2,t2.shape)

2.2、创建线性数据张量

arange、linspace (与numpy操作一致,等差数列)

logspace(start,stop,num,base=10) :与linspace类似,等比数列,默认10为底的幂计算。

import torch
# 创建数列的张量,等差、等比
x =torch.arange(0,10)  # 等差数列
print(x)
y = torch.linspace(0,10,11) # 等差数列
print(y)
z = torch.logspace(1,10,3, base=2)  # 等比数列
print(z)

2.3、创建随机张量

        manual_seed(num)     随机种子 ,数据随机,可重复

        initial_seed   获取随机种子

        rand(2,3) 创建形状为(2,3)的2阶张量、randn(2,3) 创建形状为(2,3)的标准正态分布数据、normal(1,1,(2,3))  创建均值为1,标准差为1,形状为(2,3) 的正态分布数据。

import torch
# 随机数创建张量
torch.manual_seed(666) # 随机种子
print(torch.initial_seed) 
t = torch.rand(2,3)  # 随机生成张量
print(t)
t1 = torch.randn(2,3)  # 标准正态分布的张量
print(t1)
t2 = torch.normal(1,1,(2,3))  # 标准正态分布的张量
print(t2)

2.4、创建01张量、指定值张量、单位矩阵张量

        01张量:与numpy一致,zeros和ones,增加zeros_like和ones_like,表示复制形状使用01填充内部数据。

        指定值张量:full((2,3),2)  创建形状为(2,3),数据全是2的张量;full_like(tensor,2),复制tensor的形状并用2填充数据创建张量

        单位矩阵张量:eye(1) ,一个参数表示n*n矩阵,两个表示n*m矩阵

import torch # 0数列的张量
x = torch.zeros(4,4)
print(x)
data = torch.tensor([10,20,30])
x2 = torch.zeros_like(data) # 复制data的形状,元素为0,不能是列表或数组
print(x2)# 1数列的张量
y = torch.ones(4,4)
print(y)
data = torch.tensor([10,20,30])
y2 = torch.ones_like(data) # 复制data的形状,元素为1,不能是列表或数组
print(y2)# 指定数填充张量
x = torch.full((3,2),666) # 指定形状和值
print(x)
y = torch.full_like(x,2) # 复制x的形状
print(y)# 创建单元格张量
x1 = torch.eye(2) # 创建 2*2矩阵张量
x2 = torch.eye(2,3) #  创建 2*3矩阵张量
print(x1,'\n',x2) 

3、tensor属性

        dtype和device 

dtype:数据内容的类型--第一点的数据基础

转化:创建时指定dtype = torch.int16

            tensor对象.type(torch.float等) 

            tensor对象.half()、double()、long()等

import torch # 类型转化
# 创建时指定
x = torch.tensor([10,20,30,40], dtype= torch.int8)
print(x.dtype)# 使用type转化
x1 = x.type(torch.float16) 
x2 = x.type(torch.int16) 
print(x1.dtype,x2.dtype)# 直接第哦啊用类型转化
print(x.half().dtype,x.double().dtype,x.float().dtype) # 直接转化等同于 torch.类型(x) 
print(x.short().dtype,x.int().dtype,x.long().dtype)#int8需要使用torch.dtype才行,不存在 x.int8()

device :表示运行设备

        torch.cuda.is_available() 表示是否连接到cuda,第一部分安装出现版本差异也就造成无法连接cuda。

转化:创建时指定 device = 'cpu\cuda'

           tensor.to('cpu\cuda')  

           tensor.cuda()

import torch
# 获取当前设备是否有cuda
res=torch.cuda.is_available()
print(res)
# 设备切换
x = torch.tensor([10,20,30], device='cuda')
print(x.device)
y = torch.tensor([10,20,30])
# 多个cuda需要指定序号,默认0
y1 = y.to("cuda") # 返回新的tensor对象
print(y1.device)
y2 = y.to('cuda:0' if res else 'cpu')
print(y2.device)
y3 = y.cuda()
print(y3.device)
y4 = y.cuda() if torch.cuda.is_available() else y
print(y4.device)

三、数据转化

1、numpy 与 tensor 的转化

tensor->numpy:tesnor对象.numpy() 浅拷贝,共用内存地址

                            tensor对象.numpy().copy() 深拷贝

numpy -> tensor:from_numpy(数组) 浅拷贝

                              tensor(数组) 深拷贝

# 将 tensor 转化成 numpy 
# 浅拷贝,共用一个内存地址
import torch
import numpy as np
x = torch.tensor([1,2,3])
print(x)
x_np = x.numpy()
print(x_np)
x_np[0] = 100 # 两个数据的第一个元素都变为100
print(x,x_np)
x[0] = 1000 # 两个数据的第一个元素都变为1000
print(x,x_np)# copy()深拷贝,不共用一个内存地址
x = torch.tensor([1,2,3])
x_np = x.numpy().copy()
print(type(x), type(x_np))
x_np[0] = 100 # 只有数组的第一个元素变成了一百
print(x,x_np)
x[0] = 1000 # 只有张量的第一个元素变成了一千
print(x,x_np)# 将 numpy 转化成 tensor 
# from_numpy 内存共享
x = np.array([1,2,3])
x_t = torch.from_numpy(x)
x[0] = 100
x_t[1] = 200
print(x)
print(x_t)# tensor 内存不共享
x = np.array([1,2,3])
x_t = torch.tensor(x)
x[0] = 100
x_t[1] = 200
print(x)
print(x_t)

2、图像与tensor转化

from torchvision import transforms

from PIL import Image

import cv2

import torch

步骤:1、使用 cv2.imread() 或 Image.open() 打开图片

           2、使用transfroms.ToTensor() 创建转化器对象

           3、使用转化器对象转化图片数据,得到tensor

import torch
from  torchvision import transforms
import cv2
from PIL import Image 
import numpy as np# 转化到tensor
path =r"./data/animal/cat/0b54dde5f5.jpg"
img1 = cv2.imread(path) # 使用cv2 读取图片
img2 = Image.open(path) # 使用 Image 读取图片
print(img1.shape,np.array(img2).shape)transfer = transforms.ToTensor()
img1_t = transfer(img1)
img2_t = transfer(img2)
print(img1_t.shape, img2_t.shape)# tensor转化到 图像
transfer = transforms.ToPILImage()
img_h1 = transfer(img1_t)
img_h2 = transfer(img2_t)
img_h1.show(img_h1)
img_h2.show(img_h2)


http://www.ppmy.cn/ops/136594.html

相关文章

Odoo :免费且开源的农牧行业ERP管理系统

文 / 开源智造Odoo亚太金牌服务 引言 提供农牧企业数字化、智能化、无人化产品服务及全产业链高度协同的一体化解决方案&#xff0c;提升企业智慧种养、成本领先、产业互联的核心竞争力。 行业典型痛点 一、成本管理粗放&#xff0c;效率低、管控弱 产品研发过程缺少体系化…

ApiChain 从迭代测试用例到项目回归测试 核心使用教程

项目地址&#xff1a;ApiChain 项目主页 环境变量 环境变量是在特定的开发环境&#xff08;开发、测试、uat等&#xff09;下&#xff0c;保存的一份数据集&#xff0c;环境变量是发送网络请求或者执行单测的一个重要数据源。环境变量根据作用范围可以分为全局环境变量、项目…

OAuth2资源服务器白名单接口带token被拦截

在资源服务器的配置中&#xff0c;添加了请求白名单&#xff0c;如下 Configuration EnableResourceServer public class ResourceServerConfig extends ResourceServerConfigurerAdapter {Autowiredprivate OAuth2Properties properties;Overridepublic void configure(HttpSe…

超高流量多级缓存架构设计!

文章内容已经收录在《面试进阶之路》&#xff0c;从原理出发&#xff0c;直击面试难点&#xff0c;实现更高维度的降维打击&#xff01; 文章目录 电商-多级缓存架构设计多级缓存架构介绍多级缓存请求流程负载均衡算法的选择轮询负载均衡一致性哈希负载均衡算法选择 应用层 Ngi…

C++设计模式之适配器模式与桥接模式,装饰器模式及代理模式相似点与不同点

适配器模式、桥接模式、装饰器模式和代理模式在形式上有一些相似之处&#xff0c;因为它们都涉及到对类的功能或接口的修改、增强或转换。然而&#xff0c;它们在动机和目的上有着显著的不同。以下是对这些模式相似点和不同点的清晰说明&#xff1a; 相似点&#xff1a; 结构…

ThinkPHP8使用workerman

应用场景说明&#xff1a;通过建立通信&#xff0c;不同用户进行消息推送或数据更新&#xff0c;因为本身需要作为服务端进行主动消息推送&#xff0c;因此使用Gateway方式&#xff0c;如果不需要的可以不采用这种形式&#xff0c;以下内容仅为参考&#xff0c;具体业务场景&am…

介绍一下strlwr(arr);(c基础)

hi , I am 36 适合对象c语言初学者 strlwr(arr)&#xff1b;函数是把arr数组变为小写字母 格式 #include<string.h> strlwr(arr); 返回值为arr 链接分享一下arr的意义(c基础)(必看)(牢记)-CSDN博客 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #incl…

【Linux】进程替换

进程替换 一、概念二、原理三、替换函数1. execl2. execlp3.execle4.execv5.execvp6.execvpe 四、实现一个简易的shell 一、概念 当我们fork()生成子进程后&#xff0c;子进程的代码与数据可以来自其他可执行程序。把磁盘上其他程序的数据以覆盖的形式给子进程。这样子进程就可…