首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

还差一步之学习神经网络

上次提到了AlphaGo算法就是蒙特卡洛树搜索+神经网络,不服输的阳傻为了战胜元宝开始了神经网络的自学之路。。。

本次教程中元宝将会介绍神经网络中最基本的一个模型LeNet。本次教程的目的并不是为了让大家深入的学习神经网络,而是给从没有接触过Pytorch环境以及神经网络的人提供一个上手的小例子。

代码可以从下面地方下载:

这个LeNet在后天的教程中将会成为五子棋AlphaGo算法中的神经网络部分。

接下来将会介绍:

如何安装Pytorch

数据集--MNIST

如何写一个神经网络

训练模型--mini-batch

如何安装pytorch

MNIST

MNINST是LeCun提供的一个手写数字数据集。Pytorch提供了下载以及使用MNIST的接口,但为了给大家看到机器学习的底层步骤,在这里元宝

只是用pytorch来下载数据集,然后把它转化成常用的numpy来手动来处理MNIST数据。

如何手写一个神经网络

LeNet由2个卷积层与3个全连接层组成,下面的代码copy自pytorch的官网教程。

通常来说在一个神经网络的class里,init函数中会定义这个神经网络用到的全部组件,比如conv1, conv2, fc1, fc2, fc3。 在forward函数中来定义网络结构比如这里是两层卷积,三层全连接。

训练模型

在机器学习中经常会用到mini-bach,它的意思是我们每次随机的取batch_size个数据一起训练。这样子局部的取平均可以加速我们的训练。下面是我手写的一个随机取batch_size个数据的过程。它通过函数随机的取得一个样本,并把它加入到中。每当我们有batch_size个数据,我们调用函数来训练这些数据。

注意到其中我们使用了一个函数,这个通知模型我们要开始训练了,在使用dropout和batch_normalization中这一步是关键的。由于LeNet中并没有dropout和batch_normalization所以这一步不是很关键,但这种书写方式是一种良好的Pytorch习惯。

接下来的函数会帮助我们训练一个batch的数据。

训练过程由四部分组成:

将模型中的导数清空。这是由于tensorflow和pytorch等深度学习框架使用自动求导造成的。在这些框架中会在backward是把导数存储下来,提供给后面的optimizer使用,所以我们的第一步就是把导数清空。

将数据整理成Pytorch的数据格式。脑残的Pytorch,在tensorflow中没有这一个步骤。注意到我们使用了一个函数:在这里除以255.0是因为我们要将原本【0,255】的数据进行归一化,reshape的目的是因为Pytorch使用的数据格式为NCHW。 N是指batch_size, C是指channel由于是黑白图片所以channel为1,H和W是图片的高和宽。

前向传播。

根据前向传播计算损失函数并求导更新参数。

检验模型

为了检验模型只要在验证数据集上跑一边就可以啦,很简单的。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180129G0SQ2700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券