动手学深度学习19 卷积层

动手学深度学习19 卷积层

  • 1. 从全连接到卷积
  • 2. 卷积层
  • 3. 代码
  • 4. QA

1. 从全连接到卷积

视频: https://www.bilibili.com/video/BV1L64y1m7Nh/?spm_id_from=333.999.0.0&vd_source=eb04c9a33e87ceba9c9a2e5f09752ef8

在这里插入图片描述
3.6B元素 36亿元素–模型参数,存储下来需要14GB大小。
在这里插入图片描述
waldo在哪里,找waldo遵循两个原则。识别图片的识别器找到目标不会因为在图片的那个位置而有不同,从局部找就可以,不用从全局。
在这里插入图片描述
怎么从全连接层处罚,应用平移不变性和局部性这两个原则,得到卷积。
考虑到空间信息,必须用矩阵。
二维到四维:
在这里插入图片描述
对下标做变换引出卷积。
v不发生变化,不论识别器移到哪里位置i j,识别器都是不变的。
平移不变性,对权重做了限制,不是每个元素都可以自由变换,降低模型复杂度,不用存储太多元素。干掉 i j 维度。

在这里插入图片描述

不看远离输入 x i , j x_{i,j} xi,j 太远的元素,只看附近的。超过delta位置的元素就不看了。
在这里插入图片描述
v–压缩成一个二维的东西
在这里插入图片描述

2. 卷积层

在这里插入图片描述
平移不变性,kernel是不变的。输出看局部,局部和kernel对应位置计算。kernel窗口不断的往右移往下移,不断计算。
在这里插入图片描述
当kernel移动到边界,没有数据了就不再移动,这样就会丢掉一些数据 ( k h − 1 , k w − 1 ) (k_h-1, k_w-1) kh1,kw1
星号:表示二维交叉相关计算操作子
在这里插入图片描述

不同的卷积核会带来不同的效果。神经网络可以学习一些kernel,达到我们想要的效果。
在这里插入图片描述

交叉相关和卷积没有太大区别,区别是卷积在索引处有负号,在索引w的时候是反过来走的,所以是负号。又因为是对称的,在实际使用中正反没有区别,学到的w正反,左右上下反一下是一样的东西。
说是卷积层,实际计算实现的是交叉相关。
在这里插入图片描述

kernel卷积核大小控制的是局部性,大看的局部多,小看的局部少。
卷积层是个特殊的全连接层。卷积核不会随着输入数据大小而改变,可以固定。
在这里插入图片描述

3. 代码

白变黑 黑变白 第一列第二列数值相同就相加为0,不同则等于正1或者负1.
在这里插入图片描述
只能检查纵向,不能检查横向。1*2只能检测垂直的。
从数据中,学出kernel的值。
手写梯度下降

import torch
from torch import nn
from d2l import torch as d2l
def corr2d(X, K):
  """计算二维互相关运算"""
  h, w = K.shape
  # 创建输出Y的shape,用0填充。
  Y = torch.zeros((X.shape[0]-h+1, X.shape[1]-w+1))
  for i in range(Y.shape[0]):
    for j in range(Y.shape[1]):
      Y[i, j] = (X[i:i+h, j:j+w] * K).sum()
  return Y

X = torch.tensor([[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]])
K = torch.tensor([[0.0, 1.0], [2.0, 3.0]])
print(X, K)
print(corr2d(X, K))
# tensor([[0., 1., 2.],
#     [3., 4., 5.],
#     [6., 7., 8.]]) 
# tensor([[0., 1.],
#     [2., 3.]])
# tensor([[19., 25.],
#     [37., 43.]])

# 边缘检测
class Conv2D(nn.Module):
  # 传参 卷积核shape
  def __init__(self, kernel_size):
    super().__init__()
    # weight和卷积核大小shape一致
    self.weight = nn.Parameter(torch.rand(kernel_size))
    self.bias = nn.Parameter(torch.zeros(1))
  
  def forward(self, x):
    return corr2d(x, self.weight) + self.bias
X = torch.ones((6, 8))
X[:, 2:6] = 0
print(X)
K = torch.tensor([[1.0, -1.0]])
Y = corr2d(X, K)
print(Y)
# 该K无法检测水平边缘
print(corr2d(X.t(), K))


# 6.2.4. 学习卷积核
# 手动实现一个梯度下降
# 构造一个二维卷积层,它具有1个输出通道和形状为(1,2)的卷积核
# nn.Conv2d(输入输出通道)
conv2d = nn.Conv2d(1, 1, kernel_size=(1,2), bias=False)
# 这个二维卷积层使用四维输入和输出格式(批量大小、通道、高度、宽度),
# 其中批量大小和通道数都为1
X = X.reshape((1, 1, 6, 8))
Y = Y.reshape((1, 1, 6, 7))
lr = 3e-2  # 学习率
for i in range(10):
  Y_hat = conv2d(X)
  l = (Y_hat - Y) ** 2
  conv2d.zero_grad()
  l.sum().backward()
  # 迭代卷积核
  conv2d.weight.data[:] -= lr * conv2d.weight.grad
  if (i+1) % 2 == 0:
    print(f'epoch {i+1}, loss {l.sum():.3f}')
# 查看学习到的卷积核的值
print(conv2d.weight.data)
print(conv2d.weight.data.reshape((1, 2)))
tensor([[0., 1., 2.],
        [3., 4., 5.],
        [6., 7., 8.]]) tensor([[0., 1.],
        [2., 3.]])
tensor([[19., 25.],
        [37., 43.]])
tensor([[1., 1., 0., 0., 0., 0., 1., 1.],
        [1., 1., 0., 0., 0., 0., 1., 1.],
        [1., 1., 0., 0., 0., 0., 1., 1.],
        [1., 1., 0., 0., 0., 0., 1., 1.],
        [1., 1., 0., 0., 0., 0., 1., 1.],
        [1., 1., 0., 0., 0., 0., 1., 1.]])
tensor([[ 0.,  1.,  0.,  0.,  0., -1.,  0.],
        [ 0.,  1.,  0.,  0.,  0., -1.,  0.],
        [ 0.,  1.,  0.,  0.,  0., -1.,  0.],
        [ 0.,  1.,  0.,  0.,  0., -1.,  0.],
        [ 0.,  1.,  0.,  0.,  0., -1.,  0.],
        [ 0.,  1.,  0.,  0.,  0., -1.,  0.]])
tensor([[0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.]])
epoch 2, loss 20.265
epoch 4, loss 6.997
epoch 6, loss 2.647
epoch 8, loss 1.048
epoch 10, loss 0.423
tensor([[[[ 1.0548, -0.9211]]]])
tensor([[ 1.0548, -0.9211]])

4. QA

17: 100个神经元—>输出维度100维
18:怎么对全连接层做限制做变化到卷积层。
19: 图片本身是一个二维矩阵,卷积就是直接对二维矩阵处理,不用reshape
20: 可变卷积 https://blog.csdn.net/jiangqixing0728/article/details/126269423
21: 最终要看到所有的数据,不用看很远,类似于宽浅MLP的效果不一定好于深窄的MLP。卷积核一样,深且卷积核小的网络可能好于浅且卷积核大的网络。因为每次看一点每次看一点,最终看到的数据是一样的。主流用33或者55.
在这里插入图片描述
在这里插入图片描述
22:google的论文 inception v1 设计师思路。
23:卷积是从信号处理求解线性不变系统输出得来的,符号的来源是单位脉冲。傅里叶变换。
24: 平移不变性: 不管在图片的那个位置,卷积核是不变的。
25:卷积核由先验知识确定。
26:数字与信号处理定义卷积数学含义,196X年定义的。
27:抖动很厉害可能是因为学习率太大,或者数据多样性很大,随机采样可能看的数据不一样,抖动没关系。可以把批量大小弄大,可以把抖动弄平滑。但是只抖动不下降是不可以的。可以设置学习率高一些、批量大小大一些。都可以尝试。
28:全连接层最大问题:权重w的高取决于输入的宽,当输入给1200w像素的时候,权重的高就是1200w,权重参数的矩阵过大,数据爆炸。卷积核大小固定,没有这个问题。实际使用不会放这么大的数据进去,可能200*200.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/630020.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JSP技术

三、JSP指令 1、page指令 在JSP页面中&#xff0c;经常需要对页面的某些特性进行描述&#xff0c;例如&#xff0c;页面的编码方式&#xff0c;JSP页面采用的语言等&#xff0c;这些特性的描述可以通过page指令实现。page指令的具体语法格式如下所示&#xff1a; <% page…

震撼发布!GPT-4o 上线!

5 月 14日凌晨一点&#xff0c;OpenAI 发布了 GPT-4o&#xff01; 新模型的功能简单概括就是&#xff1a;更快、更智能、更像人类。 秉承着持续更新的态度&#xff0c;Hulu AI 快速接入 GPT-4o 啦&#xff01; 继 5 月份上线 Suno 之后&#xff0c;这次是 Hulu AI 的又一重大…

机器学习入门介绍

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 目录 三大方向机器学习产生的原因机器如何学习…

2024年第十届中西部外语翻译大赛

2024年第十届中西部外语翻译大赛 竞赛信息 “由中西部翻译协会共同体指导发起&#xff0c;各省市译协共建学术指导委员会&#xff0c;2024年第十届中西部外语翻译大赛由中西部翻译协会共同体秘书处&#xff08;武汉公仪网络科技有限公司&#xff09;承办。” - 获奖证书样图 -…

springSecurity快速入门

1. 介绍 springsecurity是安全框架&#xff0c;准确来说是安全管理框架。相比与另外一个安全框架Shiro&#xff0c;springsecurity提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富 springsecurity框架用于Web应用的需要进行认证和授权 认证&#xff1a;验证当前访问系统…

红蓝对抗 网络安全 网络安全红蓝对抗演练

什么是红蓝对抗 在军事领域&#xff0c;演习是专指军队进行大规模的实兵演习&#xff0c;演习中通常分为红军、蓝军&#xff0c;演习多以红军守、蓝军进攻为主。类似于军事领域的红蓝军对抗&#xff0c;网络安全中&#xff0c;红蓝军对抗则是一方扮演黑客&#xff08;蓝军&…

分享四款AI论文工具和降重技术

在科研领域&#xff0c;AI写作工具如同新一代的科研利器&#xff0c;它们能够极大提高文献查阅、思路整理和表达优化的效率&#xff0c;本质上促进了科研工作的进步。AI写作工具不仅快速获取并整理海量信息&#xff0c;还帮助我们精确提炼中心思想&#xff0c;显著提升论文写作…

如何隐藏计算机IP地址,保证隐私安全?

隐藏计算机的IP地址在互联网在线活动种可以保护个人隐私&#xff0c;这是在线活动的一种常见做法&#xff0c;包括隐私问题、安全性和访问限制内容等场景。那么如何做到呢?有很5种方法分享。每种方法都有自己的优点和缺点。 1. 虚拟网络 当您连接到虚拟服务器时&#xff0c;您…

数据结构——希尔排序

懒猫老师-数据结构-(62)希尔排序_哔哩哔哩_bilibili 对直接插人的改进 基本思想 将整个待排序记录分为若干子序列&#xff0c;在子序列内分别进行直接插入排序&#xff0c;待整个序列中的记录基本有序时&#xff0c;对全体记录进行直接插入排序。 分割排序的目的 1、减少待…

DeepSpeed

文章目录 一、关于 DeepSpeed1、DeepSpeed 是什么2、深度学习训练和推理的极致速度和规模3、DeepSpeed 的四大创新支柱1&#xff09;DeepSpeed 训练2&#xff09;DeepSpeed 推理3&#xff09;DeepSpeed 压缩4&#xff09;DeepSpeed4Science 4、DeepSpeed 软件套件DeepSpeed 库推…

公共命名空间和RHP

概述 RHP的全称是&#xff1a;the little Robot that Helped me Program&#xff0c;帮我编程序的小机器人。 RHP必然存在&#xff0c;C语言的宏、C的模板&#xff0c;都是RHP&#xff1b;更复杂的例子&#xff0c;是lex和yacc&#xff0c;它们是制作程序的程序&#xff0c;也…

UE5C++ FString做为参数取值时报错error:C4840

问题描述 用来取FString类型的变量时报错&#xff1a; 问题解决 点击错误位置&#xff0c;跳转到代码&#xff1a; void AMyDelegateActor::TwoParamDelegateFunc(int32 param1, FString param2) {UE_LOG(LogTemp, Warning, TEXT("Two Param1:%d Param2:%s"), param…

Linux基本工具的使用

什么是工具&#xff1f; 在Linux中&#xff0c;工具的本质也是指令&#xff0c;只是因为这些指令与我们的开发的关系不是很大&#xff0c;所以就被称为工具 1 软件包管理器yum 在我们的Windows上如果想要安装软件&#xff0c;第一件事就是要先下载软件安装包&#xff0c;然后…

VUE之旅—day2

文章目录 Vue生命周期和生命周期的四个阶段created应用—新闻列表渲染mounted应用—进入页面搜索框就获得焦点账单统计&#xff08;Echarts可视化图表渲染&#xff09; Vue生命周期和生命周期的四个阶段 思考&#xff1a; 什么时候可以发送初始化渲染请求&#xff1f;&#xff…

Spring 各版本发布时间与区别

版本版本特性Spring Framework 1.01. 所有代码都在一个项目中 2. 支持核心功能IoC、AOP 3. 内置支持Hibernate、iBatis等第三方框架 4. 对第三方技术简单封装。如&#xff1a;JDBC、Mail、事务等 5. 只支持XML配置方式。6.主要通过 XML 配置文件来管理对象和依赖关系&#xff0…

首次曝光!我喂了半年主食冻干,喵状态真滴顶~

科学养猫理念的推广&#xff0c;使得主食冻干喂养越来越受到养猫者的欢迎。主食冻干不仅符合猫咪的自然饮食习惯&#xff0c;还能提供丰富的营养&#xff0c;有助于保持猫咪的口腔和消化系统健康。我家喂了半年主食冻干&#xff0c;猫咪的状态是真的不一样了&#xff01; 然而…

P9748 [CSP-J 2023] 小苹果 / P7071 [CSP-J2020] 优秀的拆分:做题笔记

目录 P9748 [CSP-J 2023] 小苹果 思路 代码 P7071 [CSP-J2020] 优秀的拆分 思路 代码 P9748 [CSP-J 2023] 小苹果 P9748 [CSP-J 2023] 小苹果 思路 先写几个看看规律 题意我们能看出来是三个三个一组的&#xff0c;然后每次取走的都是三个里面的第一个。我们应该很容易…

23.HashMap的put方法流程

一、put方法的流程图 二、put方法的执行步骤 首先&#xff0c;根据key值计算哈希值。然后判断table数组是否为空或者数组长度是否为0&#xff0c;是的话则要扩容&#xff0c;resize&#xff08;&#xff09;。接着&#xff0c;根据哈希值计算数组下标。如果这个下标位置为空&a…

Linux平台和Windows平台互传文件

rz和sz的出发对象都是从Linux出发的&#xff0c;例如sz发送&#xff08;Send&#xff09;从Linux->发送到Windows。 rz 从Windows文件发送到Linux中 先创立一个新文本文件 之后将hello Windows输入到该文本文件中 在显示器上显示里面是否有hello Windows内容 sz发送Lin…

【SpringBoot】SpringBoot整合jasypt进行重要数据加密

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 &#x1f4d5;jasypt简介 &#x1f525;SpringBoot使用jasypt &#x1f4c2;创建我需要的数据库文件 &#x1f4d5;引入依赖 &#x1f513;配置数据库文件&#xff08;先不进行加密&#xff09; &#x1f319;创…