zoukankan      html  css  js  c++  java
  • 『计算机视觉』mini深度学习框架实现

    一、项目简介

    手动实现mini深度学习框架,主要精力不放在运算优化上,仅体会原理。

    地址见:miniDeepFrame

    相关博客

    『TensorFlow』卷积层、池化层详解
    『科学计算』全连接层、均方误差、激活函数实现

    文件介绍

    Layer.py 层 class,已实现:全连接层,卷积层,平均池化层
    Loss.py 损失函数 class,已实现:均方误差损失函数
    Activate.py 激活函数 class,已实现:sigmoid、tanh、relu
    test.py 训练测试代码

    主流框架对于卷积相关层的实现都是基于矩阵乘法运算,而非这里的多层for循环。由于计算机计算矩阵乘法速度非常快,所以这是一个虽然提高内存消耗但是计算速度显著上升的方法,把feature map中的感受野(包含重叠的部分,所以会加大内存消耗)和卷积核全部拉伸成为向量,组成两个矩阵相乘,再想办法恢复为输出的feature map(详见『TensorFlow』卷积层、池化层详解)。

    二、测试输出

    我们此时不对层函数进行封装,仅仅实现了最简单的前向传播、反向传播、参数获取几个功能,利用这些功能,我们已经可以实现一个最简单的神经网络,

    声明并初始化各层class的实例,这会使得各个实例初始化可学习参数

    (【注】一般的框架会在运行时,即第一次前向传播时才初始化参数,本demo由于是动态的,所以没必要这样写)

    进入循环体:

      获取数据,向前传播,计算损失函数&损失函数的梯度

      向后传播,获取各个参数的梯度

      对参数循环,利用参数梯度更新参数

    在test.py中,我们使用tensorflow的接口,下载并读取mnist数据集,然后训练一个10分类的分类器,观察收敛过程。 

    损失函数收敛展示

    实际运行test.py,会输出loss函数结果,并绘制成图,左图展示了整个loss函数收敛过程,

    实际训练并查看中间输出可以看见,最开始几次训练的损失函数下降的极快,相应的梯度值如果添加了中间的输出也会极大(10^3量级,对应的参数初始化为-1~1之间),于是下图截掉了前四次迭代输出的Loss,能够更好的展示后面的收敛过程:

  • 相关阅读:
    Objective-C实用类和协议
    KVC(Key-Value-Coding)和KVO(Key-Value-Observer)
    Xcode
    IOS模拟器
    沙盒机制
    UIScrollView
    NSPredicate
    输入控件适应键盘
    10步成为专业iOS开发者——新手向,从零起步
    2015 年五大移动端设计趋势
  • 原文地址:https://www.cnblogs.com/hellcat/p/9963383.html
Copyright © 2011-2022 走看看