机器学习笔记(4)Pytorch学习

机器学习笔记(4)Pytorch学习

笔记(3)代码的遇到的一些问题和以及相关知识的进一步学习

读取数据

1.Dataset类
用images和labels来定义自己的数据集类,之后送入dataloader中
可以看这个博客,讲的很详细
https://blog.csdn.net/VictoriaW/article/details/72356453?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

2.torchvision 包
PyTorch中专门用来处理图像的库,包含四个大类datasets,models,transforms,utils
2.1datasets
用来加载一些经典的数据集,即这些数据集可以不用1中的方法来自己定义,可以直接利用datasets来加载。

dataset_train = datasets.MNIST(
	root='./MNIST', 	#加载数据集的目录
    train=True,			#是否为训练集
    transform=None,		#是否进行图像预处理
    download=True)		#是否下载数据

2.2transforms
用来图像预处理
transforms.ToTensor():用来将像素值范围归到[0,1]
transforms.Normalize(mean,std):用来将像素值归到[-1,1]
transforms.Resize():图像缩放
transforms.Compose([]):组合多个预处理方法
2.3models
用来加载一些经典的模型

import torchvision.models as models
VGG1 = models.VGG()			       #q权重随机模型
VGG2 = models.VGG(pretrained=True) #预训练模型

3.torch.utils.data.DataLoader 生成训练所需batch数据的类。
batch的数量是指计算一次loss,输入的样本个数

train_loader = torch.utils.data.DataLoader(
    dataset_train,               #你的数据集
    batch_size=batch_size,  	 #训练时每批的大小
    shuffle=True,)				 #是否随机打乱

损失函数

1.遇到的问题:
1.1
笔记3中使用 nn.CrossEntropyLoss()作为损失函数,使用它时网络结构最后一层输出不需要softmax了,因为他整合了nn.logSoftmax()和nn.NLLLoss()。
并且它在计算每一batch时会自动求平均。所以计算这一epoch的损失函数需要乘上lable.size(0)或者batch_size,最后的总误差要除以len(datatrain)。
2.2
对于激活函数relu,nn.ReLU作为一个层结构,必须添加到nn.Module容器中才能使用,而F.ReLU则作为一个函数调用,看上去作为一个函数调用更方便更简洁

2.网络参数更新

optimizer.zero_grad()
loss.backward()
optimizer.step()

在每一个batch中,需要根据LOSS反向传播的梯度信息来更新网络参数,经常要用到以上三个函数。
首先清零梯度信息,这一batch参数的更新只跟这一batch的梯度有关,所以要先清除上一batch的梯度信息。
之后损失函数反向传播来计算梯度。
最后利用优化器(常用的有ADAM,SGD等)结合learning rate来更新网络参数

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值