专栏首页光城(guangcity)cs231n之Assignment2全连接网络上

cs231n之Assignment2全连接网络上

cs231n之Assignment2全连接网络上

——光城

0.说在前面

在上次作业中,已经实现了两层神经网络,但是有些问题,比如程序不够模块化,耦合度不高等问题,所以本节引出神经网络的层与层结构。本节主要实现一种模块化的神经网络架构,将各个功能封装为一个对象,包括全连接层对象,仿射层,Relu层等,在各层对象的前向传播函数中,将由上一层传来的数据和本层的相关参数,经过本层的激活函数,生成输出值,并将在后面反向传播需要的额外参数,进行缓存处理,将根据后面层次的提取与缓存值计算本层各参数的梯度,从而实现反向传播。

1.仿射层

仿射层前向传播

目标:

- 计算实现一个仿射层的前向传播

输入:

- x: (N, d_1, ..., d_k)

- w: (D, M)

- b: (M,)

返回:

- out: (N, M)

- cache: (x, w, b)

实现

仿射层反向传播

目标:

计算仿射层的后向传播

输入:

- dout: (N, M)

- cache:

x: (N, d_1, ... d_k)

w: (D, M)

b: (M,)

返回:

- dx: (N, d1, ..., d_k)

- dw: (D, M)

- db: (M,)

实现:

首先获得上面前向传播的输出值与cache,紧接着计算反向传播。

cache解开得到前面仿射层的前向传播参数,接着计算梯度即可!

实现

2.RELU层

Relu层前向传播

目标:

计算Relu的前向传播

输入:

- x: 任意shape的输入

返回:

- out: 输出同x一样的shape

- cache: x

实现:

上面目标很明确,这里直接来实现,不多解释,这里用到了一个布尔矩阵运算,如果觉得疑惑,请看作业详解knn中的解释!

实现

Relu层后向传播

目标:

计算Relu的后向传播

输入:

- dout: 任何shape的前向输出(这里疑惑的看英文原文)

- cache:同dout相同shape的x

返回:

- dx: x的梯度

实现:

Relu只有矩阵中大于0的数有效,所以x>0筛选得出一个布尔矩阵,直接相乘就是最后的结果。因为如果x<0,求导肯定为0,所以有效值,就是x>0的结果!

实现

3.两层组合

组合前向传播

目标:

完成仿射层与Relu层组合

输入:

- x: 仿射层的输入

- w, b: 仿射层的权重

返回:

- out: ReLU层输出

- cache: 后向传播的缓存

实现

组合反向传播

目标:

实现反向传播

输入:

- dout

- cache

返回:

- dx: x梯度

- dw: w梯度

- db: b梯度

实现:

直接调用刚才的方法。

4.两层神经网络

类封装

目标:

实现affine - relu - affine - softmax架构

输入:

- input_dim: 输入层尺寸

- hidden_dim: 隐藏层尺寸

- num_classes: 类别数

- dropout: 随机失活强度 0~1

- weight_scale: 权重范围

- reg: 正规化

实现:

封装全局参数

实现

损失函数

输入:

- X: (N, d_1, ..., d_k)

- y: (N,)

返回:

If y is None

test-time forward

- scores: (N, C)

If y is not None,

training-time forward

backward pass

- loss

- grads

实现

5.Solver训练

概要

使用这个训练之前,需要补充optim.py!

此文件实现了常用的各种一阶更新规则用于训练神经网络。每个更新规则接受当前权重和相对于那些权重的损失梯度并产生下一组权重!

SGD

SGD公式

这个被称为朴素sgd(Vanilla SGD)

公式中四个参数分别对应为:下一次的权重w,当前权重w,学习率,当前权重的梯度!

实现

Momentum

Momentum公式

这个被称为结合动量的sgd(最常用)。

阿尔法代表学习率!

实现

RMSProp

RMSProp公式

实现

Adam

Adam公式

实现

训练

实现

训练结果

本文分享自微信公众号 - 光城(guangcity)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 机器学习在MVPD视频广告中的应用

    本文来自MHV (Mile High Video) 2019的演讲,作者是来自于Charter公司的Srilal Weera。本次演讲主要讲述了机器学习在视频分...

    用户1324186
  • 初入NLP领域的一些小建议

    基于我自己多年来曾经走过的弯路,踩过的坑,这篇文章做一点点小的总结。希望会对刚刚进入NLP领域的同学有所帮助。

    zenRRan
  • 什么数据可以成为“数据资产”?数据资产化又该如何实现?

    数据资产化已成为企业数据资产管理的最重要的环节,怎样识别数据资产、利用现有的数据资产创造价值,将是企业不得不面临的一个课题。

    探码科技
  • 活动报名 | 集结腾讯技术专家,共探AI技术原理与实践

    | 导语 9月7日,上海市长宁区Hello coffee,云+社区邀您参加《AI技术原理与实践》沙龙活动,聚焦人工智能技术在各产业领域的应用落地,共话AI技术...

    腾讯大数据
  • 一张图看懂数据分析、机器学习、深度学习、人工智能的关系

    一切技术的出现都是为了解决现实问题,而现实问题分为简单问题和复杂问题。简单问题,需要简单分析,我们使用数据分析。复杂问题,需要复杂分析,我们使用机器学习。

    猴子聊数据分析
  • 为什么要用 PyTorch、TensorFlow 框架

    并非每个回归或分类问题都需要通过深度学习来解决。甚至可以说,并非每个回归或分类问题都需要通过机器学习来解决。毕竟,许多数据集可以用解析方法或简单的统计过程进行建...

    代码医生工作室
  • 千人千面营销系统在携程金融支付的实践

    携程金融核心产品为:拿去花、借去花、信用卡、理财。其中拿去花提供携程产品分期支付服务,借去花提供现金借款服务,信用卡提供携程联名卡、理财则给用户提供有竞争力的理...

    用户1292807
  • 158行Python代码复现:DeepMind提图像生成的递归神经网络DRAW

    [ 导读 ]最近,谷歌 DeepMInd 发表论文(DRAW: A Recurrent Neural Network For Image Generation)...

    数据派THU
  • 「回顾」爱奇艺搜索排序模型迭代之路

    本次分享内容为爱奇艺在做视频搜索时,遇到的真实案例和具体问题;以及面对这些问题的时候,我们的解决方案。这次分享的ppt针对一线的开发人员,希望可以给一线的开发人...

    石晓文
  • 打分排序系统漫谈3 - 贝叶斯更新/平均

    上一节我们聊了聊用Wilson区间估计来处理小样本估计,但从原理上来说这种方法更像是一种Trick,它没有从本质上解决样本量小的时候估计不置信的问题,而是给估计...

    风雨中的小七

扫码关注云+社区

领取腾讯云代金券