热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

【深度学习】笔记3_caffe自带的第一个例子,Mnist手写数字识别所使用的LeNet网络模型的详细解释

******************************************************************************************

/**********************************************************************************************
*文件说明:
* Mnist手写数字识别----对应的CNN神经网络模型的详细解释
*时间地点:
* 陕西师范大学----2016.10.26
**********************************************************************************************/
(一)CNN神经网络模型的概述:在我没有学习卷积神经网络(深度学习)之前,我看了很多的神经网络,什么人工神经网络,BP神经网络等等,在学习
神经网络的时候,经常会见到下面的网络模型或者说图片吧:



结合上面我画的LeNat-CNN模型的网络结构图,然后去看网络描述(配置文件),试着理解LeNet模型(最简单的卷积神经网络模型):

那么,现在,我们来具体看一下lenet_train_test.prototxt这个文件的具体内容:

//***********************************************************************************************
name: "LeNet" //[1]网络(Net)的名称为:LeNet
/***********************************************************************************************
*模块1:
* 1--数据层----Data Layer
* 2--该数据层只在[训练]阶段有效
***********************************************************************************************/
layer { /****[1]定义一个数据层****/name: "mnist" //[1]数据层的名字为--mnisttype: "Data" //[2]层的层类型:Data(数据层)(数据库作为输入)top: "data" //[3]数据层的输出blob有两个:data,label(对应生成的CNN图看)top: "label" include { //[4]include里面的数据说明,该层只在训练阶段有效phase: TRAIN}transform_param { //[5]数据预处理,转换参数的定义scale: 0.00390625 //[5]特征归一化系数,将范围为[0,255]的MNIST数据归一化为[0,1]}data_param { //[6]数据层的参数source: "examples/mnist/mnist_train_lmdb"//[1]由于该数据层的数据来源是数据库(由层类型Data指定),// 因此,source对应的就是数据库LMDB的路径,也就是训练// 数据和测试数据的pathbatch_size: 64 //[2]批量数目,表示caffe一次从数据库LMDB读入的图片的数量backend: LMDB //[3]数据库的类型说明区别于LevelDB数据库}
}
/***********************************************************************************************
*模块2:
* 1--数据层----Data Layer
* 2--一个新的数据层,名字也叫做mnist,输出的blob也是data和label,但是这个数据层只在分类阶段有效,Test
* 3--图片大小28*28
***********************************************************************************************/
layer {name: "mnist"type: "Data"top: "data"top: "label"include {phase: TEST}transform_param {scale: 0.00390625}data_param {source: "examples/mnist/mnist_test_lmdb"batch_size: 100backend: LMDB}
}
/***********************************************************************************************
*模块3:
* 1--第一个卷积层---Convolution
* 2--定义一个新的卷积层,卷积层的输入blob为data;输出blob为conv1
* 3--Convolution层,使用一系列可训练的卷积核(相当于空间滤波的滤波算子)对输入图像进行卷积操作,每组
* 卷积核生成输出图像中的一个特征图(相当于对输入图像,使用20个不同的滤波算子(卷积)进行20次卷积
* 之后生成的20张经过滤波的特征图)
* 4--输出图片大小:(28+2*0-5)/1+1=(img_h+2*pad_h-kernel_h)/stride_h+1======24*24
***********************************************************************************************/
layer {name: "conv1"type: "Convolution"bottom: "data" //[1]卷积层的输入blob为datatop: "conv1" //[2]卷积层的输出blob为conv1param { //[3]卷积层的:权值学习速率倍乘因子,1表示,保持与全局参数一致lr_mult: 1}param { //[4]卷积层的:偏置项的学习速率倍乘因子,是全局参数的2倍lr_mult: 2}convolution_param { //[5]卷积层的计算参数num_output: 20 //[1]输出feature map的数目为20,对应的也就是卷积核的数量kernel_size: 5 //[2]卷积核的尺寸为:5*5stride: 1 //[3]卷积核在输入图片上滑动的步长为:1weight_filler { //[6]指定权值的初始化方案为:xaviertype: "xavier"}bias_filler { //[7]偏执项的初始化方案为:constant,默认为0type: "constant"}}
}
/***********************************************************************************************
*模块4:
* 1--第一个池化层---pool1
* 2--定义一个下采样层(池化层),这个池化层的输入blob为conv1,输出blob为pool1
* 3--输出图片的大小===12*12
***********************************************************************************************/
layer {name: "pool1"type: "Pooling"bottom: "conv1"top: "pool1"pooling_param { //[1]池化层(下采样)的参数pool: MAX //[1]目前提供了三种池化的方法:最大值池化,均值池化,随机池化// 很明显,该池化层使用了最大值池化MAXkernel_size: 2 //[2]指定池化窗口的宽度和高度:2*2stride: 2 //[3]指定池化窗口在输入数据上滑动的步长为:2}
}
/***********************************************************************************************
*模块5:
* 1--第二个卷积层:conv2
* 2--该卷积层的输入blob为pool1,输出blob为conv2
* 3--注意:该卷积层输出的feature map(特征图的数量)为:50
* 4--输出图片的大小为:(12-2*0-5)/1+1=======8*8
***********************************************************************************************/
layer {name: "conv2"type: "Convolution"bottom: "pool1"top: "conv2"param {lr_mult: 1}param {lr_mult: 2}convolution_param {num_output: 50kernel_size: 5stride: 1weight_filler {type: "xavier"}bias_filler {type: "constant"}}
}
/***********************************************************************************************
*模块6:
* 1--第二个池化层:pool2
* 2--该池化层的输入blob为conv2,输出blob为pool2
***********************************************************************************************/
layer {name: "pool2"type: "Pooling"bottom: "conv2"top: "pool2"pooling_param {pool: MAXkernel_size: 2stride: 2}
}
/***********************************************************************************************
*模块7:
* 1--第一个全连接层
* 2--该层的输入blob为:pool2,输出blob为iP1
* 3--注意:全连接层的的输出节点数(num_output==500)可以理解为滤波器的个数(滤波算子的个数),对应的也
* 就是输出特征图的个数
***********************************************************************************************/
layer {name: "ip1"type: "InnerProduct"bottom: "pool2"top: "ip1"param {lr_mult: 1}param {lr_mult: 2}inner_product_param { //[1]全连接层的参数:num_output: 500 //[1]该层的输出元素的个数为:500weight_filler { //[2]指定全连接层的初始化方案:xaviertype: "xavier"}bias_filler {type: "constant"}}
}
/***********************************************************************************************
*模块8:
* 1--新的非线性层(激活函数)(规整化线性单元),此激活层采用的激活函数为:RELU
* 2--该激活层的输入blob为iP1,输出blob也为iP1
* 3--该(规整化线性单元)激活层的作用为:对全连接层的每一个输出数据进行判断,当x>0时,RELU的输出为x,
* 根据X的大小,说明这个单元的激活程度(兴奋程度);如果x<&#61;0,则这个信号(特征图)被完全抑制
***********************************************************************************************/
layer {name: "relu1"type: "ReLU"bottom: "ip1"top: "ip1"
}
/***********************************************************************************************
*模块9:
* 1--第二个全连接层InnerProduct
* 2--该层的输入blob为iP1,输出blob为ip2
***********************************************************************************************/
layer {name: "ip2"type: "InnerProduct"bottom: "ip1"top: "ip2"param {lr_mult: 1}param {lr_mult: 2}inner_product_param { //[1]全连接层的计算参数num_output: 10 //[1]该层的输出为10个特征,对应0--9这10类数字weight_filler { //[2]该层在网络初始化的初始化方案为:xaviertype: "xavier"}bias_filler { //[3]给该层添加偏置项,偏置项网络的初始化方案为:constanttype: "constant"}}
}
/***********************************************************************************************
*模块10:
* 1--Accuracy---分类准确率层
* 2--Accuracy层的作用:该层用来计算网络输出相对于目标值的准确率
* 3--该层的输入blob为iP2和label,输出blob为accuracy
* 4--注意:记住该层只在Test(测试)阶段有效,并且,它并不是一个Loss层,所以这次没有BP操作
***********************************************************************************************/
layer {name: "accuracy"type: "Accuracy"bottom: "ip2"bottom: "label"top: "accuracy"include {phase: TEST}
}
/***********************************************************************************************
*模块11:
* 1--Loss层,损失层
* 2--层类型:SoftnaxWithLoss---softmax损失层一般用于计算[多分类问题]的损失,在概念上等同于softmax
* 层后面跟一个多变量的logistic回归损失层,但能提供更稳定的梯度
***********************************************************************************************/
layer {name: "loss"type: "SoftmaxWithLoss"bottom: "ip2"bottom: "label"top: "loss"
}





推荐阅读
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 人工智能推理能力与假设检验
    最近Google的Deepmind开始研究如何让AI做数学题。这个问题的提出非常有启发,逻辑推理,发现新知识的能力应该是强人工智能出现自我意识之前最需要发展的能力。深度学习目前可以 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • windows便签快捷键_用了windows十几年,没想到竟然这么好用!隐藏的功能你知道吗?
    本文介绍了使用windows操作系统时的一些隐藏功能,包括便签快捷键、截图功能等。同时探讨了windows和macOS操作系统之间的优劣比较,以及人们对于这两个系统的不同看法。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • cs231n Lecture 3 线性分类笔记(一)
    内容列表线性分类器简介线性评分函数阐明线性分类器损失函数多类SVMSoftmax分类器SVM和Softmax的比较基于Web的可交互线性分类器原型小结注:中文翻译 ... [详细]
  • ICRA2019最佳论文  Making Sense of Vision and Touch: SelfSupervised Learning of Multimodal Representatio
    文章目录摘要模型架构模态编码器自监督预测控制器设计策略学习控制器设计实验结论和展望会议:ICRA2019标题:《MakingSenseofVision ... [详细]
author-avatar
老鼠扛着刀找猫_592
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有