先推荐
CNN、RNN、DNN区别_李菲儿的博客-CSDN博客_dnn和cnn的区别
deep neural network :DNN
对应视频:p17
1.CNN一般用于影像处理。例如一个很经典的例子:基于CNN的猫狗品种识别。卷积网络=CNN
2.CNN所做的就是提取特征,特征就是重复出现的东西,就类似于人类能自动提取直线段、曲线段、角等特征,小特征组合成大特征,大特征相似则图片相似
========================================================================
一、
普通的 DNN 用的是全连接层,参数数量特别多。因此,可以根据图像特征,将DNN 简化为CNN。
假设一张图片:100*100个像素,颜色有3种,那么输入:30000维度。第2层假设有1000层,那么参数就有30000*1000。cnn做的事情:简化 neural network架构,用比较少的参数做影像处理,把一些不必要的参数过滤掉。
(1)基于以下几个观察(特性),如何减少参数:
1、第一个hidden layer 的工作是侦测有没有鸟嘴的存在。不需要整张图的参数,只需要一小部分的图片(减少参数)就可以判断。
2、这个neural应该用同一组参数,来判断这个鸟嘴(无论是在左上角,还是在中间),而不是写2个neural
3.subsampling 子抽样 缩小图像。将图片变小应该不会影响到我们对图片的辨识。
(2)
1、做了什么。
Convolution:卷积
Poolig层对Filter层的特征进行降维操作,形成最终的特征。
一般在Pooling层后连接全连接层神经网络,形成最后的分类结果。
Max Pooling的含义是对某个Filter抽取到若干特征值,只取得其中最大的那个Pooling层作为保留值,其他特征值全部抛弃,值最大代表只保留这些特征中最强的,抛弃其他弱的此类特征。
2、怎么做:(1)种的1、2点用Convolution:卷积 ;3用Max Pooling。
(3)Convolution:卷积
卷积(convolution)操作中有一些过滤器(卷积核(Filter)),也被称为卷积核,相当于神经网络中的神经元,filter中的值需要被学习,而不是被人设计出来的。
过滤器就是一些矩阵,它负责提取图像中的特征,进行特征映射(feature map)
神经元就是一个计算/函数,卷积核其实就是神经元。
内积=点积=数量积=对应位置相乘后相加,最后得到一个数
1、对一个filter
6*6-->4*4
2、在一个Convolution中可能会有很多filter。一组卷积核卷出一个特征征图,卷积核数=特征图层数。
(4)Convolution这一步就是一个neural
卷积核就是一个神经元,它相当于全连接层中的神经元并没有全连接(没有使用图片的所有像素,当然这样的层也就不能称为全连接层了),这样有两个好处:
1、参数模型变少
红色框框是一个neural ,因为没有使用所有像素、不是全连接,因此需要的参数更少。这个neural用到了部分输入(9个),对应的参数w 是filter1的9的个数字。
2、参数共享
这个输出-1是另外一个neural(红色框框)的输出,这个neural的对应参数w还是filter1的9个数字。完成了参数共享。
(5)Max Pooling
最大池化是一种下采样(Subsample),下采样不一定要取最大值,也可以取平均值。】
1.由Convolution :6*6-->4*4
2. 下采样,假设取最大:
得到一个2*2的图像
(6)flatten:经过一系列的卷积和最大池化,将得到的特征图展开排列,作为FNN的输入,最后输出结果
(7)cnn 学到了
如果想知道下图中第1个卷积层Convolution中的每个卷积核的功能,因为它参数比较少而且其输入是原图片,所以我们直接结合原图片观察卷积核的参数就可以知道该卷积核的功能。
CNN中第2个卷积层的输入不是直观的图片而且其卷积核的感受野比第1个卷积层中卷积核的感受野更大,因此我们无法通过观察卷积核参数了解卷积核学习到了什么。寻找让卷积核最大激活的一个x使得filter通过率最高的图像,也就是filter在filtering什么,在图中期望找到什么我们现让模型的参数固定,我们要update这个x,让这个x使得卷积核最大程度被激活。换句话说,我们想要知道这个卷积核到第学到了什么东西(学到的东西可以最大程度上激活卷积核)。
图中CNN第2个卷积层中有50个卷积核,每个卷积核的输出都是一个大小为11×11的矩阵。
现在定义函数ak来衡量某卷积核被“激活”的程度,即将卷积核所输出矩阵的元素之和作为其被“激活”程度,被“激活”程度指CNN输入与该卷积核有多匹配。
接下来,通过梯度下降求得x∗,即找到最能“激活”卷积核的输入图片x∗,然后将其可视化希求反映该卷积核学习到的内容。
图左下角可视化了最能“激活”第2个卷积层中某12个卷积核的12张图片,可以看出各卷积核适用于检测小的纹理(案例是数字识别)。
在flattern全连接层学部分:每一个neuron是在整张图寻找;和卷积核不同,卷积核学习到的是较小的pattern,全连接层中的神经元学习到的是尺寸较大的pattern。
我们要对辨识出来的x进行constraints限制,告诉这不可能是一个数字。机器学习到的内容和人类所理解的内容是不同的
应该是白色是xij有值的地方,减去xij求和当作惩罚,别到处都是白色,像个二维码
(8)deep dream
将图片x输入到CNN中,然后取出CNN中某一层L(可以是卷积、池化阶段的隐藏层,也可以是FNN中的隐藏层)的输出O,然后将L中的正值调大、负值调小得到一个新的输出O′,然后通过梯度下降找到一张新的图片x′使层L的输出为O′,这个x′就是我们要的结果。直观理解的话,也就是让CNN夸大它所看到的内容。
(9)
(10)CNN作业
目前老老实实用tensorflow的CPU版本
目前用不了torch-gpu。
win10环境下,在Anaconda环境里面,想安装tensorflow。tensorflow有CPU和GPU版本之分。
什么是GPU
CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。
推荐2个:下载自己独立显卡gpu对应 版本的cuda:查看电脑显卡(GPU)是否支持CUDA_条件漫步的博客-CSDN博客_怎么看电脑有没有cuda
使用pytorch-gpu
和tensorflow-gpu的前提:
深度学习GPU环境CUDA详细安装过程(简单快速有效) - 知乎
cuda环境搭建必须要bai有nvidia(gpu)显卡。
个集成显卡和独立显卡NVIDIA GetForce GTX 1050
。
CUDA主要是面du向Nvidia的GPU的。Nvidia也推出了CUDA X86,使duCUDA代码可以由zhiX86处理器执行,尽管这只dao是提高了CUDA的代码兼容性而已。Intel和AMD的显示芯片都不能进行CUDA编程。
想要让cuda环境搭建在Windows8.1下搭建能利用GPU并行运算,必须有支持GPU并行运算的Nvidia显卡,且要安装CUDA,千万不要电脑上是Intel或AMD的显卡,却要编写CUDA。
我的电脑:
=======================================================================‘
又去网上找了找资料,解决办法:Pytorch/Torch:电脑无cuda情况下,使用CPU运行
Pytorch/Torch:电脑无cuda情况下,使用CPU运行_离墨猫的博客-CSDN博客_电脑没有cuda