07.15-07.20第29周已完成

0715

开始每天三小时学习

第一小时:补python基础。80-84课

递归函数:栈帧分析

嵌套函数:封装

nonlocal 用来声明外层的局部变量。

global 用来声明全局变量。

区别在于nonlocal没有global那么霸道

第二个小时:实战

pytorch基础-保存和加载模型(7)_save state dict-CSDN博客

Introduction to PyTorch — PyTorch Tutorials 2.3.0+cu121 documentation

模型存储和加载

保存参数可以:

torch.save(model.state_dict(), 'model_weights.pth')

要加载模型权重,需要先创建相同模型的实例,然后使用load_state_dict()方法加载参数。

#只保存参数,加载时要先实例化模型
model = models.vgg16(weights='IMAGENET1K_V1')
torch.save(model.state_dict(), 'model_weights.pth')

model = models.vgg16() # we do not specify ``weights``, i.e. create untrained model
model.load_state_dict(torch.load('model_weights.pth'))
model.eval()

#保存参数和结构

torch.save(model, 'model.pth')

model = torch.load('model.pth')

使用 PyTorch 进行深度学习-神经网络(部分)_pytorch loss.backward()针对整个网络参数-CSDN博客

LeNet

.view(-1)

torch.Tensor.view — PyTorch 2.3 documentation

-1:代表在该维度上自动计算结果。在其它参数已知的情况下自动补齐列向量长度。

可视化
def imshow(img):
    img = img / 2 + 0.5 # unnormalize
    npimg = img.numpy()
    plt.imshow(np.transpose(npimg, (1, 2, 0)))
  1. Unnormalization:由于在训练过程中,为了数值稳定性,图像可能会经过归一化处理(通常是将像素值从 0 到 1 或者 -1 到 1 范围内缩放)。通过除以2加0.5的操作,我们将它们还原回原始的像素值范围。

  2. 转换数据格式npimg = img.numpy() 将张量转换成NumPy数组,以便于matplotlib库的imshow函数使用。最后通过np.transpose将张量转置,使其按照(height, width, channels)的顺序排列,因为matplotlib期望颜色通道最后一个。

抽取样本

dataiter = iter(trainloader)
images, labels = next(dataiter)

dataiter = iter(trainloader) 这一行代码创建了一个迭代器 dataiter,它是基于 trainloader 数据加载器的对象,通常是一个 PyTorch 的 DataLoader 对象,用于逐批次地从训练数据集中获取数据。trainloader 中的数据被预处理并打包在一起,每次迭代返回的是一组图片(images)及其对应的标签(labels)。

next(dataiter) 是一个Python内置函数,当调用 dataiternext() 方法时,它会从当前的数据批中取出下一个元素。

这里会报错

    dataiter = iter(trainloader)
    images, labels = dataiter.next()

官网教程dataiter = iter(trainloader)报错的解决办法-CSDN博客

pytorch里inshow的图怎么让它不消失

plt.show()

0716

开始每天三小时学习

第一小时:补python基础。85-89课

递归函数:栈帧分析

开始学定义 类:我们把对象比作一个“饼干”就是制造这个饼干的“模具”。对象是类的具体实体,一般称为“类的实例”。

通过类定义数据类型的属性(数据)和方法(行为)

构造函数__init__(self):

#特殊的构造方法(函数),在其中定义属性 #self必须位于第一个参数
大概了解了:super(net, self).__init__()

继承了父类net,用父类的方法初始化子类的属性。

第二个小时:实战

深度学习pytorch实战一:LeNet图像分类篇且pytorch官方提供The CIFAR-10数据集分十类 - 古月居

在pycharm的configuration里选择parameter

--weights yolov5s.pt --data data/fire.yaml --workers 1 --batch-size 10

torch.max()
_, predicted = torch.max(outputs.data, 1)

用于沿着第二个维度(这里是第1维,因为对于单个样本来说,其长度通常是1),找出每个样本得分中的最大值及其索引。

correct += (predicted == labels).sum().item()

correct 变量用于累计预测正确的数量。predicted == labels 这部分是一个条件判断,如果预测的类别(predicted)等于实际的标签(labels),则返回的是一个布尔型张量,其中True的位置对应于预测正确的样本。然后,.sum() 函数将所有True加起来,得到正确预测的数量。

.item() 方法

用于从张量转换成标量,因为.sum() 返回的是一个整数类型的张量,我们需要获取具体的数值。

torch.manual_seed()

.empty_like().zeros_like()、 .ones_like().rand_like()方法。

Tensor Broadcasting

称为广播规则,是NumPy和许多其他深度学习库(如TensorFlow和PyTorch)处理数组运算的一种机制。当两个或更多数组进行数学运算时,如果它们的形状不完全匹配,NumPy会自动地扩展较小的数组(或单个元素)以适应较大的数组,从而保持操作的进行,而无需显式地进行填充。

广播规则如下:

  • 每个张量必须至少有一个维度 - 不能有空张量。

  • 比较两个张量的维度大小,从最后一个到第一个:

    • 每个维度必须相等,或者

    • 其中一个维度的大小必须为 1,或者

    • 其中一个张量不存在该维度

torch.matmul()

torch.cross()

torch.svd()

0717

开始每天三小时学习

第一小时:补python基础。90-94课

实例属性

实例方法

类属性

类方法

第二个小时:实战

unsqueeze()

import torch
lin = torch.nn.Linear(3, 2)
conv = torch.nn.Conv2d(1,2,5)
x = torch.rand(1, 3)
print('Input:')
print(x)

print('\n\nWeight and Bias parameters:')
for param in lin.parameters():
    print(param)

y = lin(x)
print('\n\nOutput:')
print(y)

input = torch.rand(1, 1, 32, 32)   # stand-in for a 32x32 black & white image

output = conv(input)
print('\n\nIn ConvWeight and Bias parameters:')
for param in conv.parameters():
    print(param)

print(output)

小小试了下

torch.nn.Linear(m,n)会创建一个[m,n]的权重矩阵和[n]的偏置矩阵:Input * [m,n] + [n] = output
torch.nn.Conv2d(ChannelInput,ChannelOutput,m)会创建一个[ChannelOutput,ChannelInput,m,m]的权重矩阵和[ChannelOutput]的偏置矩阵,可以理解为ChannelOutput个[ChannelInput,m,m]的卷积核和ChannelOutput个偏置。

Input: [ChannelInput, SizeInput,SizeInput]

Output: [ChannelOutput, SizeInput-m+1,SizeInput-m+1]

0718

玩,看万物渺小又伟大

0719

玩文明

0720

开始每天三小时学习

第一小时:补python基础。95-89课

__del__

__call__

私有属性和私有方法

  • 15
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值