『计算机视觉』mini深度学习框架实现

一、项目简介

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

地址见:miniDeepFrame

相关博客

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

文件介绍

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

主流框架对于卷积相关层的实现都是基于矩阵乘法运算,而非这里的多层for循环,这里仅仅是最直观的演示原理,并非最优实现。

二、测试输出

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

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

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

进入循环体:

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

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

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

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

mnist = input_data.read_data_sets(‘../../Mnist_data/‘, one_hot=True)
X_train,y_train = mnist.train.next_batch(BARCH_SIZE)
X_train = np.reshape(X_train, [4, 1, 28, 28])

conv1 = Layer.Conv2D([8, 1, 2, 2])
pool1 = Layer.MeanPooling([2, 2])
relu1 = Activate.Relu()

conv2 = Layer.Conv2D([16, 8, 2, 2])
pool2 = Layer.MeanPooling([2, 2])
relu2 = Activate.Relu()

conv3 = Layer.Conv2D([8, 16, 2, 2])
pool3 = Layer.MeanPooling([2, 2])
relu3= Activate.Relu()

dense1 = Layer.Dense(128, 10)
sigmoid = Activate.Sigmoid()

loss = Loss.MSECostLayer()

loss_line = []
for i in range(1000):
    # 正向传播
    x = conv1.forward(X_train, 1)
    x = pool1.forward(x, 2)
    x = relu1.forward(x)
    x = conv2.forward(x, 1)
    x = pool2.forward(x, 2)
    x = relu2.forward(x)
    x = conv3.forward(x, 1)
    x = pool3.forward(x, 2)
    x = relu3.forward(x)
    shape = x.shape
    x = x.reshape([x.shape[0], -1])
    x = dense1.forward(x)

    l_val = loss.loss(x, y_train)
    print("损失函数值为:", l_val)
    loss_line.append(l_val)

    # 反向传播
    l = loss.loss_grad(x, y_train)
    l = dense1.backward(l)
    l = l.reshape(shape)
    l = relu3.backward(l)
    l = pool3.backward(l)
    l = conv3.backward(l)
    l = relu2.backward(l)
    l = pool2.backward(l)
    l = conv2.backward(l)
    l = relu1.backward(l)
    l = pool1.backward(l)
    l = conv1.backward(l)

    for layer in [conv1, conv2, conv3, dense1]:
        for param, param_grad in zip(layer.params(), layer.params_grad()):
            param -= LEARNING_RATE * param_grad

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

下图则截掉了前四次迭代输出的Loss,因为初始四次损失函数过大,收敛速度极快,影响后面的结果展示:

原文地址:https://www.cnblogs.com/hellcat/p/9963383.html

时间: 2024-12-11 00:03:46

『计算机视觉』mini深度学习框架实现的相关文章

『计算机视觉』Mask-RCNN_关键点检测分支(待续)

Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』Mask-RCNN_推断网络其二:基于ReNet101的FPN共享网络 『计算机视觉』Mask-RCNN_推断网络其三:RPN锚框处理和Proposal生成 『计算机视觉』Mask-RCNN_推断网络其四:FPN和ROIAlign的耦合 『计算机视觉』Mask-RCNN_推断网络其五:目标检测结果精炼

从TensorFlow到PyTorch:九大深度学习框架哪款最适合你?

开源的深度学习神经网络正步入成熟,而现在有许多框架具备为个性化方案提供先进的机器学习和人工智能的能力.那么如何决定哪个开源框架最适合你呢?本文试图通过对比深度学习各大框架的优缺点,从而为各位读者提供一个参考.你最看好哪个深度学习框架呢? 现在的许多机器学习框架都可以在图像识别.手写识别.视频识别.语音识别.目标识别和自然语言处理等许多领域大展身手,但却并没有一个完美的深度神经网络能解决你的所有业务问题.所以,本文希望下面的图表和讲解能够提供直观方法,帮助读者解决业务问题. 下图总结了在 GitH

主流深度学习框架对比

深度学习研究的热潮持续高涨,各种开源深度学习框架也层出不穷,其中包括TensorFlow.Caffe.Keras.CNTK.Torch7.MXNet.Leaf.Theano.DeepLearning4.Lasagne.Neon,等等.然而TensorFlow却杀出重围,在关注度和用户数上都占据绝对优势,大有一统江湖之势.表2-1所示为各个开源框架在GitHub上的数据统计(数据统计于2017年1月3日),可以看到TensorFlow在star数量.fork数量.contributor数量这三个数

Tensorflow:实战Google深度学习框架(高清版)PDF

Tensorflow:实战Google深度学习框架(高清版)PDF百度网盘链接:https://pan.baidu.com/s/1GrKn451PECK0wupXcQDZ3g 提取码:tw9k 复制这段内容后打开百度网盘手机App,操作更方便哦哦内容简介 · · · · · · TensorFlow是谷歌2015年开源的主流深度学习框架,目前已在谷歌.优步(Uber).京东.小米等科技公司广泛应用.<Tensorflow实战>为使用TensorFlow深度学习框架的入门参考书,旨在帮助读者以最

主流的深度学习框架基本知识

本章内容 1.TensorFlow 2.Keras 3.MXNet 4.CNTK 5.PyTorch 常见的深度学习框架 常见的深度学习框架有 TensorFlow .Caffe.Theano.Keras.PyTorch.MXNet等,如下图所示.这些深度学习框架被应用于计算机视觉.语音识别.自然语言处理与生物信息学等领域,并获取了极好的效果.下面将主要介绍当前深度学习领域影响力比较大的几个框架, 1.TensorFlow-----擅长推断特征提取 2015年11月10日,Google宣布推出全

TensorFlow【机器学习】:如何正确的掌握Google深度学习框架TensorFlow(第二代分布式机器学习系统)?

本文标签:   机器学习 TensorFlow Google深度学习框架 分布式机器学习 唐源 VGG REST   服务器 自 2015 年底开源到如今更快.更灵活.更方便的 1.0 版本正式发布,由 Google 推出的第二代分布式机器学习系统 TensorFlow一直在为我们带来惊喜,一方面是技术层面持续的迭代演进,从分布式版本.服务框架 TensorFlow Serving.上层封装 TF.Learn 到 Windows 支持.JIT 编译器 XLA.动态计算图框架 Fold 等,以及

基于OpenGL ES 的深度学习框架编写

基于OpenGL ES的深度学习框架编写 背景与工程定位 背景 项目组基于深度学习实现了视频风格化和人像抠图的功能,但这是在PC/服务端上跑的,现在需要移植到移动端,因此需要一个移动端的深度学习的计算框架. 同类型的库 caffe-android-lib 目前应该是最便于集成使用的深度学习框架库. tensorflow和mxnet据说也有对应的android库,因时间原因暂未测试. CNNdroid,网址https://zhuanlan.zhihu.com/p/25259452,这个是用 ren

一线开发者在Reddit上讨论深度学习框架:PyTorch和TensorFlow到底哪个更好?

本文标签:   机器学习 TensorFlow Google深度学习框架 分布式机器学习 PyTorch   近日,Reddit用户 cjmcmurtrie 发了一个主题为「PyTorch vs. TensorFlow」的讨论帖,想要了解这两大流行的框架之间各自有什么优势. 原帖地址:https://redd.it/5w3q74 帖子一楼写道: 我还没有从 Torch7 迁移到 TensorFlow.我玩过 TensorFlow,但我发现 Torch7 更加直观(也许是我玩得不够?).我也尝试了

TensorFlow与主流深度学习框架对比

引言:AlphaGo在2017年年初化身Master,在弈城和野狐等平台上横扫中日韩围棋高手,取得60连胜,未尝败绩.AlphaGo背后神秘的推动力就是TensorFlow--Google于2015年11月开源的机器学习及深度学习框架. TensorFlow在2015年年底一出现就受到了极大的关注,在一个月内获得了GitHub上超过一万颗星的关注,目前在所有的机器学习.深度学习项目中排名第一,甚至在所有的Python项目中也排名第一.本文将带我们简单了解下TensorFlow,并与其他主流深度学