当前位置: 首页 > news >正文

8.卷积神经网络基础

8.1 卷积核计算

import torch 
from torch import nn
import matplotlib.pyplot as plt
def corr2d(X,k):#计算二维互相关运算h,w=k.shape#卷积核的长和宽Y=torch.zeros((X.shape[0]-h+1,X.shape[1]-w+1))#创建(X-H+1,X-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()#不指定dim的话是全部都加载一起#print(X[i:i+h,j:j+w]*k)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]])
Y=corr2d(X, K)

8.2 卷积核边缘计算

import torch 
from torch import nn
import matplotlib.pyplot as plt
def corr2d(X,k):#计算二维互相关运算h,w=k.shape#卷积核的长和宽Y=torch.zeros((X.shape[0]-h+1,X.shape[1]-w+1))#创建(X-H+1,X-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()#不指定dim的话是全部都加载一起#print(X[i:i+h,j:j+w]*k)return Y
X = torch.ones((6, 8))
X[:, 2:6] = 0
K=torch.tensor([[1.0,-1.0]])
Y=corr2d(X,K)#这样检测之后如果两个水平相邻的元素相同则输出为0,否则则是非0元素
print(Y)

8.3 卷积核学习设计

#卷积层设计--学习卷积核
import torch 
from torch import nn
import matplotlib.pyplot as plt
def corr2d(X,k):#计算二维互相关运算h,w=k.shape#卷积核的长和宽Y=torch.zeros((X.shape[0]-h+1,X.shape[1]-w+1))#创建(X-H+1,X-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()#不指定dim的话是全部都加载一起#print(X[i:i+h,j:j+w]*k)return Y
class Conv2D(nn.Module):def __init__(self, kernel_size):super().__init__()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
K=torch.tensor([[1.0,-1.0]])
Y = corr2d(X, K)
conv2d=Conv2D(kernel_size=(1,2))
optimizer=torch.optim.SGD(conv2d.parameters(),lr=0.05)
for epoch in range(500):out=conv2d(X)loss=((out-Y)**2).mean()optimizer.zero_grad()loss.backward()optimizer.step()print(f"Epoch {epoch+1}, loss = {loss.item():.4f}")
print(conv2d.weight.data)
print(conv2d.bias.data)

8.4 Q&A

在这里插入图片描述

1.没有什么本质区别,两者其实是一样的
2.权重变形只是数学算法上推理理解的概念,重新索引是指将权重矩阵的坐标与卷积结果的位置匹配上,所以要用到i,j,a,b四个维度的坐标。
3.图像输入进来就是矩阵了,在前面只不过是由于机器学习分类器的缘故必须做flatten操作,卷积神经网络就没有必要做这个操作了,本质上其就是个二维矩阵。
4.没有特定的要求一般不用可变卷积
5.感受野是局部的感受,但是随着卷积肯定能看完所有的图像信息,那我不妨把感受野设计小一些,让模型看的更仔细,然后在深层网络中一步一步提取逐渐变深。
6.当然可以了,有相关的文章。
7.-号在数学中相当于卷积核反过来计算,这样的结果可能有些不一样了,但可能只是和FFT公示推导有关系,深度学习的卷积是正常的做corr相关计算的。
8.平移不变指的是卷积核的数是在这一卷积操作过程中平移不变的,卷积核的大小体现了局部性。
http://www.dtcms.com/a/274572.html

相关文章:

  • CSS 版本迭代历史和版本特性
  • ffmpeg-api记录
  • 8、鸿蒙Harmony Next开发:相对布局 (RelativeContainer)
  • PortsWiggerLab: Blind OS command injection with output redirection
  • 2D下的几何变换(C#实现,持续更新)
  • linux获取NTP方式
  • ubuntu22默认安装firefox使用snap安装还老打不开解决办法
  • 【Spring】拦截器详解
  • jenkins部署springboot+Docker项目
  • Playwright Python 教程:网页自动化
  • xAI发布Grok4+代码神器Grok4 Code,教你如何在国内升级订阅SuperGrok并使用到Grok4教程
  • 信号量机制
  • 【机器学习】保序回归平滑校准算法
  • 设计模式(结构型)-适配器模式
  • 深度学习入门教程(三)- 线性代数教程
  • 使用you-get命令下载视频/音频/图像
  • Primer Premier 5分子生物学引物设计软件 PCR引物设计工具
  • 【读代码】开源音乐分离工具Spleeter
  • RabbitMQ 之顺序性保障
  • Java大厂面试故事:谢飞机的互联网医疗系统技术面试(Spring Boot、MyBatis、Kafka、Spring Security、AI等)
  • c++——浅拷贝和深拷贝、浅赋值和深赋值
  • 动态组件和插槽
  • mysql 锁介绍
  • 分布式系统高可用性设计-负载均衡与容错机制深度解析
  • 2025年DevSecOps工具全景图:安全左移时代的国产化突围
  • AGX Xavier 搭建360环视教程【二、环境配置】
  • 【JMeter】执行系统命令
  • git restore
  • Java项目中图片加载路径问题解析
  • 多线程Java