当前位置: 首页 > article >正文

深度学习1

一、库的安装

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.kler.cn/a/406723.html

相关文章:

  • GPTZero:高效识别AI生成文本,保障学术诚信与内容原创性
  • 学习笔记|MaxKB对接本地大模型时,选择Ollma还是vLLM?
  • Qt-多元素控件
  • VisionPro 机器视觉案例 之 彩色保险丝个数统计
  • 深度学习3
  • 模糊控制系统的设计(取材bilibili_蓝天的季洁)
  • 数据结构之树与二叉树
  • C语言:空指针详细解读
  • 实用功能,觊觎(Edge)浏览器的内置截(长)图功能
  • 《鸿蒙系统:开启智能新时代的璀璨之星》
  • MySQL中的CAST类型转换函数
  • docker 部署 kvm 图形化管理工具 WebVirtMgr
  • 论文翻译 | RECITATION-AUGMENTED LANGUAGE MODELS
  • Spark 之 Aggregate
  • 深入探索Apache JMeter:HashTree结构解析与应用
  • AWTK 最新动态:支持鸿蒙系统(HarmonyOS Next)
  • 游戏盾 :在线游戏的终极防护屏障
  • 返回流类型接口的错误信息处理
  • java基础概念37:正则表达式2-爬虫
  • Xilinx 7 系列 FPGA的各引脚外围电路接法
  • SMO算法-核方法支持向量机
  • HTML常用表格与标签
  • 经典 AEC 论文解读
  • 基础自动化系统的任务
  • HTMLCSS:3D立方体loading
  • Vue3-小兔鲜项目出现问题及其解决方法(未写完)