- 1、本文档共24页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
1.神经网络的训练步骤和循环
神经网络的训练步骤:
(1)定义神经网络的结构和前向传播的输出结果Network
(2)定义损失函数以及选择反向传播优化的算法loss_function/optimizer
(3)生成会话并在训练数据上反复运行反向传播优化算法Batchsize/Epochs
前向传播的作用:
输入数据经过多层神经元计算后得到一个预测输出值,一般代码定义的是前向传播。
反向传播:
把前向传播预测输出值和真实的值对比计算loss,通过loss和优化器反向更新神经元的权重,在代码中只需要实现loss和optim即可,自动化。
2.损失函数和优化器
损失函数:
用来计算神经网络每次迭代的前向计算结果与真实值的差距,从而指导下一步的训练向正确的方向进行。优化器用来优化神经网络权重,从而增加模型拟合度,降低loss。
常用的损失函数:
梯度下降(GradientDescent)
梯度下降(GradientDescent)是神经网络毕竟重要的部分,因为通常利用梯度来利用costfunction(成本函数)进行backpropagation(反向传播),不断地iteration、更新权重,偏置参数找到损失最低点,然后最终使模型达到更优的效果。
常见的优化器:
(1)SGD:
是最基础最常用的优化器,如果传进去的数据只采用一部分,就是SGD方法,然后一部分一部分的去学习,这样子可以更快的去达到学习的效果。
(2)Momentum
不仅仅考虑了当前步的学习效率,还是考虑了上一步的学习趋势,所以比SGD更加快速。
(3)Adam
计算m时有momentum下坡的属性,计算v时有adagrad阻力的属性,然后再更新参数时把m和v都考虑进去,实验证明,大多数时候,使用adam都能又快又好的达到目标、迅速收敛。
3.Mnist手写数据集项目实战(jupyternotebook上运行)
import?torch
import?torch.nn?as?nn
import?torch.nn.functional?as?F
import?torchvision
from?torchvision?import?transforms
from?PIL?import?Image
import?numpy?as?np
import?matplotlib.pyplot?as?plt
from?torch.utils.data?import?Dataset,?DataLoader
transformer?=?transforms.Compose([
????transforms.ToTensor()
])
train_dataset?=?torchvision.datasets.MNIST(/mnist,?train?=?True,?download?=?True,?transform?=?transformer)
val_dataset?=?torchvision.datasets.MNIST(/mnist,?train?=?False,?download?=?True,?transform?=?transformer)
train_dataloader?=?DataLoader(train_dataset,?batch_size?=?64,?shuffle?=?True)
val_dataloader?=?DataLoader(val_dataset,?batch_size?=?64,?shuffle?=?True)
image,?label?=?next(iter(train_dataloader))
image.shape
plt.figure(figsize?=?(16,?8))
for?i?in?range(8):
????img?=?image[i].numpy()
????img?=?np.squeeze(img)
????lb?=?label[i].numpy()
????plt.subplot(2,?4,?i?+?1)
????plt.title(lb)
plt.imshow(img)
运行效果截图:
#?模型构建法1:
#?class?IMnet(nn.Module):
#?????def?__init__(self):
#?????????super(IMnet,?self).__init__()
#?????????self.conv1?=?nn.Conv2d(1,?32,?kernel_size?=?3)
#?????????self.conv2?=?nn.Conv2d(32,?64,?kernel_size?=?3)
#?????????self.pool?=?nn.MaxPool2d(2,?2)
#???????
文档评论(0)