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

和鲸社区深度学习基础训练营2025年关卡3_Q1(1)

Q1: 给定一个大小为 32x32x1 的灰度图像(MNIST 手写数字图像),以及一个大小为 3x3x1x8 的卷积核,使用 conv2D_gemm 函数(我们上文中实现的)对图像进行卷积运算,步幅为 1,并填充方式为 same。 请问卷积结果的形状是多少?

1.纯numpy

import numpy as np# 生成随机图像和卷积核
input_image = np.random.rand(32, 32, 1)  # 32x32x1
kernel = np.random.rand(3, 3, 1, 8)     # 3x3x1x8# 执行卷积运算
output = np.zeros((32, 32, 8))  # 初始化输出数组# 使用'same'填充方式
pad_width = ((1, 1), (1, 1), (0, 0))
padded_image = np.pad(input_image, pad_width, mode='constant')# 执行卷积
for i in range(8):  # 对每个卷积核for y in range(32):  # 高度方向for x in range(32):  # 宽度方向# 提取当前3x3区域region = padded_image[y:y+3, x:x+3, :]# 点乘并求和output[y, x, i] = np.sum(region * kernel[:, :, :, i])print("卷积结果的形状:", output.shape)

运行结果:

2.使用 scipy.signal.convolve2d

import numpy as np
from scipy.signal import convolve2d# 生成随机输入图像和卷积核
input_image = np.random.rand(32, 32, 1)  # 32x32x1
kernel = np.random.rand(3, 3, 1, 8)     # 3x3x1x8# 初始化输出数组
output = np.zeros((32, 32, 8))# 对每个卷积核执行卷积
for i in range(8):# 提取当前卷积核(3x3x1)current_kernel = kernel[:, :, 0, i]# 对每个通道执行卷积output[:, :, i] = convolve2d(input_image[:, :, 0], current_kernel, mode='same', boundary='fill')print("卷积结果的形状:", output.shape)

运行结果:

 

3.pytorch中的卷积函数

代码1

import torch
import torch.nn as nnconv_layer = nn.Conv2d(in_channels=1, out_channels=8, kernel_size=3, stride=1, padding=1)
input_tensor = torch.randn(1, 1, 32, 32) 
output = conv_layer(input_tensor)
print(output.shape)  # 查看输出张量的形状

代码2

import torch
import torch.nn as nn# 生成随机输入图像和卷积核
input_image = torch.rand(1, 1, 32, 32)  # (batch_size, channels, height, width)
kernel = torch.rand(8, 1, 3, 3)         # (out_channels, in_channels, height, width)# 创建卷积层
conv = nn.Conv2d(in_channels=1, out_channels=8, kernel_size=3, stride=1, padding=1, bias=False)  # padding=1实现'same'# 手动设置卷积核权重
conv.weight = nn.Parameter(kernel)# 执行卷积
output = conv(input_image)print("卷积结果的形状:", output.shape)

运行结果:

(batch_size, channels, height, width)

http://www.dtcms.com/a/274394.html

相关文章:

  • 零基础入门:Air8000系列蓝牙配网开发(LuatOS版)
  • 攻防世界——web题 upload
  • Laravel + Python 图片水印系统:实现与调试指南
  • 将七大核心理念融入AI Agent设计——构建“数字生命体”的宏伟蓝图
  • 大数据在UI前端的应用创新:基于用户反馈的产品迭代优化系统
  • UI前端大数据可视化实战技巧:如何利用数据故事化提升用户参与度?
  • 前端面试专栏-算法篇:22.树结构(二叉树、B树、红黑树)
  • Web 应用防火墙:守护应用安全的核心屏障
  • webpack高级配置
  • OpenAvatarChat数字人项目结构分析
  • 星云穿越与超光速飞行特效的前端实现原理与实践
  • 第三章 隧道与轨道交通工程 3.8 安全质量控制
  • 排序算法(一):冒泡排序
  • UniApp 生命周期详解:从启动到销毁的完整指南
  • 如何快速掌握WeNet:从零到一的端到端语音识别学习指南
  • SSRF11 各种限制绕过之DNS rebinding 绕过内网 ip 限制
  • FREERTOS根本不能使用连续接收串口思想
  • C语言的程序控制语句
  • 多态 使用场景
  • 【构建Tomcat版本检查工具:自动检测并提醒版本更新】
  • 云、实时、时序数据库混合应用:医疗数据管理的革新与展望(中)
  • 解决Linux绑定失败地址已使用(端口被占用)的问题
  • day050-ansible剧本与变量
  • 云暴露面分析完整指南
  • 2025年7月11日—基础算法—高精度
  • 删除mysql文件夹时显示在另一程序中打开
  • 期权交易完整版教程简介
  • 工具分享--IP与域名提取工具
  • YOLOv13来了!基于超图增强的自适应视觉感知实时目标检测
  • 数据结构第一章复杂度的认识