PyTorch

PyTorch

面试题

pytorch 计算图
pytorch 自动求导的原理?
pytorch detach()方法 clone()方法 load save方法

两大法宝

  1. dir 打卡工具箱 dir(torch.cuda)
  2. help 查看具体函数的使用方式 help(torch.cuda.is_available)

数据加载

Dataset

提供一种方式去获取数据及其label,以及数据集的大小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from torch.utils.data import Dataset
from PIL import Image # 图像操作(open、show)
import os #文件操作

# 继承Dataset类
class MyData(Dataset):
# 通过定义一个特殊的__init__方法,在创建实例的时候,把所需要的属性绑上去
# 和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self
# __init__方法的第一个参数永远是self,表示创建的实例本身
# 因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身
def __init__(self,root_dir,label_dir):
self.root_dir = root_dir
self.label_dir = label_dir
self.path = os.path.join(root_dir,label_dir)
self.img_path = os.listdir(self.path) #返回指定path路径文件夹中图片名称组成的列表

# 当实例对象做P[key]运算时,就会调用类中的__getitem__()方法
def __getitem__(self, idx):
img_name = self.img_path[idx]
img_item_path = os.path.join(root_dir,label_dir,img_name)
print(img_item_path)
img = Image.open(img_item_path)
img.show()
label = self.label_dir
return img, label

# 当使用len(p)时,就会调用类中的__len__()方法
def __len__(self):
return len(self.img_path)
# 有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去

root_dir = 'D:\ADNI_classify _v-3.0\ADCNMCI\\train'
label_dir = 'AD'
ad_dataset = MyData(root_dir,label_dir)
print(len(ad_dataset))

tensorboard

可视化训练过程的数据

  1. add_image()
  2. add_scalar
1
2
3
4
5
6
7
8
9
# 参数:title;y轴数值;x轴数值
writer.add_scalar("y=2x", 2*i, i)

# tag:是保存图的标题
# img_tensor:图片变量名,图片的类型要是torch.Tensor, numpy.array, or string这三种
# global_step:第几张图片
# dataformats=‘CHW’,默认CHW,tensor是CHW,numpy是HWC
writer.add_image(tag,img_tensor,global_step,dataformats='HWC')

Dataloader

为后面的网络提供不同的数据形式

numpy

tensor

PyTorch 是一个开源的深度学习框架,它提供了张量作为其核心数据结构。在 PyTorch 中,张量类似于 NumPy 中的数组,但是拥有额外的功能,特别是与 GPU 加速计算有关的功能。以下是 PyTorch 中张量的一些介绍:

  1. 创建张量: 你可以使用 torch.tensor() 函数创建张量,也可以使用一些特殊的函数如 torch.zeros()、torch.ones() 来创建特定大小的张量,还可以从 Python 列表或 NumPy 数组中创建张量。

  2. 张量属性: 张量有很多属性,比如形状(shape)、数据类型(dtype)、设备(device,表示张量所在的设备,如 CPU 或 GPU)、布局(layout,表示张量的存储方式,如连续存储或分块存储)等。

  3. 张量操作: PyTorch 提供了许多张量操作函数,包括数学运算、逻辑运算、索引和切片等。你可以对张量进行加法、乘法、指数运算等操作,也可以使用索引和切片来访问张量的特定元素或子集。

  4. 自动求导: PyTorch 的一个重要功能是自动求导,它可以自动计算张量的梯度。你可以通过 tensor.requires_grad=True 将张量设置为需要求导,然后进行计算,PyTorch 会自动构建计算图并计算梯度。

  5. 张量和神经网络: 在深度学习中,张量是神经网络的基本数据结构。神经网络的输入、输出和参数都表示为张量,而神经网络的前向传播和反向传播也是基于张量的运算实现的。

总的来说,PyTorch 的张量是一种灵活、强大的数据结构,它为深度学习提供了高效的数值计算和自动求导的功能。

tensor函数

  1. torchvision.transforms.ToTensor()
    在使用 transforms.ToTensor() 进行图片数据转换过程中会对图像的像素值进行正则化,即一般读取的图片像素值都是8 bit 的二进制,那么它的十进制的范围为 [0, 255],而正则化会对每个像素值除以255,也就是把像素值正则化成 [0.0, 1.0]的范围
    意义:将图片表示为数字化的数据,方便神经网络进行处理和学习

PyTorch
https://cs-lb.github.io/2024/04/24/深度学习/PyTorch/
作者
Liu Bo
发布于
2024年4月24日
许可协议