网站大量收购独家精品文档,联系QQ:2885784924

从神经网络开始讲图像分类基础.docx

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

外卖人-小何 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档