网站开发语言开发,高大上网站,桃源网站建设,网站搜索排名优化怎么做前言#xff1a; 卷积神经网络#xff08;Convolutional Neural Networks#xff09;是一种深度学习模型或类似于人工神经网络的多层感知器#xff0c;常用来分析视觉图像。卷积神经网络的创始人是着名的计算机科学家Yann LeCun#xff0c;目前在Facebook工作#xff0c;…
前言 卷积神经网络Convolutional Neural Networks是一种深度学习模型或类似于人工神经网络的多层感知器常用来分析视觉图像。卷积神经网络的创始人是着名的计算机科学家Yann LeCun目前在Facebook工作他是第一个通过卷积神经网络在MNIST数据集上解决手写数字问题的人. CNN 除了在图像分类,还有一些其它有趣的创意方案 语音识别风格迁移DeepDream,围棋游戏方面的应用场景。 目录 卷积神经神经网络架构 卷积层 池化层 Flatten 全连接层 梯度更新常用方案 卷积层 基于CNN的创意应用 PyTorch 模型搭建 一 卷积神经网络的架构 卷积神经网络主要由五个部分组成 Input layer输入层 CONV layer卷积层 多个反复叠加Pooling layer池化层 : 多个反复叠加Flatten 张量展平FC layer全连接层
CNN 相对FC 网络主要引入了下面三个思想
1.1 局部采样 A neuron does not have to see the whole image to discover the pattern 采样输入图像的时候不需要查看整个图像. 比如一个神经元要实现识别鸟嘴功能,只需要每次采样局部图样处理 1.2: 权值共享 the same pattern appear in different regions 针对不同的采样区域使用同一个卷积核 例 如下图鸟嘴在不同的位置每次采样不同的位置的图片时候我们使用同一组卷积核
提取其鸟嘴特征。 1.3 池化思想 subsampling the pixels will not change the object 降采样图像不会改变图片形状,降低了计算量 二 卷积层Convolution 2.1 原理 通过循环移动卷积核矩阵Filter, 提取图像的特征。
卷积核是通过训练学习出来的,有很多个.不同的卷积核可以
提取不同的图像纹理特征. 经过卷积后得到图像的称为feature map 2.2例子 通过滑动移动卷积核,跟对应图像位置的矩阵 做 点积,求和. k: kernel_size 卷积核大小 p: padding 填充 H: 原图像的宽或者高 s: stride 滑动步长 通过卷积后得到的新的尺寸为 可以通过pytorch API 直接计算 # -*- coding: utf-8 -*-Created on Sun Dec 31 17:04:34 2023author: cxfimport torch
import torch.nn as nndef CNN():conv_layer nn.Conv2d(in_channels1,out_channels1,kernel_size3,stride 1,padding0,biasFalse)print(\n default conv kernel:, conv_layer.weight.shape)conv_layer.weight torch.nn.parameter.Parameter(torch.tensor([[[[1,-1,-1],[-1,1,-1],[-1,-1,1]]]]).float(), requires_gradTrue)print(\n weidht,conv_layer.weight.shape)image torch.tensor([[[1,0,0,0,0,1],[0,1,0,0,1,0],[0,0,1,1,0,0],[1,0,0,0,1,0],[0,1,0,0,1,0],[0,0,1,0,1,0]]],dtype torch.float)feature conv_layer(image)print(\n res,feature)CNN()in_channels 是指输入特征图的通道数数据类型为 intout_channels 是输出特征图的通道数数据类型为 intkernel_size 是卷积核的大小数据类型为 int 或 tuplestride 滑动的步长数据类型为 int 或 tuple默认是 1在。padding 为补零的方式注意当 padding 为’valid’或’same’时stride 必须为 1。 三 池化Max-Pooling 3.1 原理 我们得到feature map 后对里面的元素进行分组,每一组取最大值.
那反向传播算法的时候如何求微分呢 3.2 Max-pooling 微分原理 以下面方案为例 3.1 输入 3.2 神经元输入(每层 3.3 分组Max-pooling 每层中 分为一组 分为一组
3.4 神经元输出 分组Max-pooling 如下图,假设红色部分为最大值在反向传播的时候只会更新 对应的权重系数梯度,作用跟relu 一样.
当输入不同的时候,就会训练到不同的参数 四 Flatten 作用 把经过多次 卷积,池化得到的特征图 进行拉直. import torchbatch_size 10
width 5
height 5
a torch.randn((batch_size,width,height))b torch.flatten(a, start_dim1,end_dim-1)
print(b.shape) 五 全连接层 全连接层是每一个结点都与上一层的所有结点相连用来把前边提取到的特征综合起来。由于其全相连的特性一般全连接层的参数也是最多的。 原理跟前面讲过的DNN是一样的 六 梯度更新常用方案 6.1 Adagrad AdaGrad全称Adaptive Gradient又叫自适应梯度算法是一种具有自适应学习率的梯度下降优化方法。 优点 ① 避免手动去调整学习率 ② 他可以自动的为每个参数单独设置学习率这样梯度较大的参数学习率较小更新减慢梯度较小的参数学习率较大更新加速。在梯度图上可以解释为更为平缓的方向会取得更大的进步因为平缓所以历史梯度平方和较小对应学习下降的幅度较小 缺点 ① 由于学习率分母中的 是历史梯度值平方的累加因此随着迭代次数的增加分母会越来越大学习率衰减的速度会越来越快学习率会越来越小甚至接近于0因此AdaGrad迭代后期的学习率非常小而非常容易出现梯度消失现象。 6.2 RMSProp RMSProp全称为Root Mean Square Propagation是一种未发表的自适应学习率方法由Geoff Hinton提出是梯度下降优化算法的扩展 6.3 momentum 计算t时刻的梯度 七 卷积核提取了什么特征 我们知道一个神经网络读入一张图片通过多层网络最后输出一个分类的结果但是我们仅仅知道一个结果并不够神经网络的一个挑战是要理解在每一层到底都发生了什么事。 1 我们知道经过训练之后每一层网络逐步提取越来越高级的图像特征直到最后一层将这些特征比较做出分类的结果。比如前面几层也许在寻找边缘和拐角的特征中间几层分析整体的轮廓特征这样不断的增加层数就可以发展出越来越多的复杂特征最后几层将这些特征要素组合起来形成完整的解释这样到最后网络就会对非常复杂的东西比如房子小猫等图片有了反应。 2 为了理解神经网络是如何学习的我们必须要理解特征是如何被提取和识别的如果我们分析一些特定层的输出我们可以发现当它识别到了一些特定的模式它就会将这些特征显著地增强而且层数越高识别的模式就越复杂。当我们分析这些神经元的时候我们输入很多图片然后去理解这些神经元到底检测出了什么特征是不现实的因为很多特征人眼是很难识别的。一个更好的办法是将神经网络颠倒一下不是输入一些图片去测试神经元提取的特征而是我们选出一些神经元看它能够模拟出最可能的图片是什么将这些信息反向传回网络每个神经元将会显示出它想增强的模式或者特征。 常用方案如下 7.1 看卷积核 可以直接查看第一层卷积核的参数,以图片的形式显示出来.如下图AlexNet
可以看到不同的卷积核在提取不同的特征. 1 使用浅层的神经网络将获得浅层的特征边缘圆形颜色如下图ResNet50 2 使用高层的神经网络将获得深层的特征如下图 7.2 可以把卷积核提取的特征图片直接放在神经元里面,聚类. 7.3ak响应 假设经过卷积核处理后得到一张feature map 对该feature map 里面相加求和得到 。 我们输入不同的图片得到不同的,求其最大值 通过下面实验可以看到不同的filter 可以侦测不同的纹理特征 八 基于CNN 的创意模型 8 .1 Deep Dream 2015年Google发布了一个很有意思的东西叫做Deep Dream使用了梯度上升算法通过随机生成的噪声或者提供的图片生成一张怪异的图片,输入图requires_grad True, 损失函数跟一般的神经网络不同 图像在选定层上面的输出响应,要使得这些响应最大化. loss_component torch.nn.MSELoss(reductionmean)(layer_activation, torch.zeros_like(layer_activation)) losses.append(loss_component) loss torch.mean(torch.stack(losses)) loss.backward() 具体可以参考 deep_dream_static_image 函数 GIt hub 参考代码
GitHub - gordicaleksa/pytorch-deepdream: PyTorch implementation of DeepDream algorithm (Mordvintsev et al.). Additionally Ive included playground.py to help you better understand basic concepts behind the algo. GitHub - hjptriplebee/deep_dream_tensorflow: An implement of google deep dream with tensorflow
8.2 Deep Style Style Transfer是CNN的一個應用在2015年 Gatys 等人發表的 A Neural Algorithm of Artistic Style中採用了VGG的模型來對原圖(original image)及風格圖(style image)提取特徵來實施將一張照片轉換成另一張圖的風格或是畫風來生成一張新的圖片讓它同時擁有原圖(original image)的內容以及風格圖(style image)的風格。 步骤 VGG 去掉后面的全连接部分 生成目标图片先将内容图和风格图输入喂给VGG然后生成目标内容图和目标风格图仅一次输入用作后面Loss的计算。初始化合成图片这里内容图上添加白噪声的方式来初始化合成图我们将白噪声图片喂给VGG就得到了合成图片。载入预训练模型Content信息捕捉得到content lossStyle信息捕捉得到style loss计算总Loss值这里我们分别采用内容损失风格损失得出总的loss两者配置一定权值优化函数这里优化函数采用AdamOptimizer训练模型 详细参考 https://www.cnblogs.com/yifanrensheng/p/12547660.html
8.3 围棋 8.4 语音辨识 语音做傅里叶变换后横向为时间,纵向为频率.
可以进行语音文字识别处理. 九 LeNet5 手写数字简单模型搭建 # -*- coding: utf-8 -*-Created on Tue Jan 2 16:59:55 2024author: chengxf2
import torch
import torch.nn as nnclass LeNet(nn.Module):def __init__(self):super(LeNet, self).__init__()#特征提取self.layer1 nn.Sequential(nn.Conv2d(in_channels 1, out_channels 6, kernel_size5, stride1 ,padding0),nn.ReLU(),nn.MaxPool2d(kernel_size2, stride 2),nn.Conv2d(in_channels 6, out_channels 16, kernel_size5, stride1 ,padding0),nn.ReLU(),nn.MaxPool2d(kernel_size2, stride 2))# fully layerself.layer2 self.classifier nn.Sequential(# FC1层输入为5*5*16400输出数为指定的参数值nn.Linear(in_features400, out_features120),nn.ReLU(),# FC2 层nn.Linear(in_features120, out_features84),nn.ReLU(),# FC3 层nn.Linear(in_features84, out_features10))def forward(self, x):#前向传播x self.layer1(x)print(\n 卷积 池化后输出 ,x.shape)x torch.flatten(x,1)print(\n flatten 后输出 ,x.shape)out self.layer2(x)return outif __name__ __main__:model LeNet()image torch.rand((1,1,32,32))out model(image) 参考
https://www.cnblogs.com/yifanrensheng/p/12547660.html 9.1 Deep Dream计算机生成梦幻图像 - csmhwu
10: Convolutional Neural Network_哔哩哔哩_bilibili
深度学习——优化算法 - 知乎
LeNet5—论文及源码阅读_lenet5论文-CSDN博客
谷歌Deep Dream解析附源代码可以直接运行-CSDN博客
【Neural Style Transfer】Deep Photo Style Transfer含代码详解-CSDN博客