和鲸社区深度学习基础训练营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 nn

conv_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)

相关推荐
音视频牛哥24 分钟前
打造实时AI视觉系统:OpenCV结合RTSP|RTMP播放器的工程落地方案
人工智能·opencv·计算机视觉·大牛直播sdk·rtsp播放器·rtmp播放器·android rtmp
归去_来兮1 小时前
生成式对抗网络(GAN)模型原理概述
人工智能·深度学习·生成对抗网络
在努力的韩小豪2 小时前
如何从0开始构建自己的第一个AI应用?(Prompt工程、Agent自定义、Tuning)
人工智能·python·llm·prompt·agent·ai应用·mcp
云卓SKYDROID2 小时前
无人机环境感知系统运行与技术难点!
人工智能·计算机视觉·目标跟踪·无人机·科普·高科技·云卓科技
网安INF2 小时前
深度学习中的 Seq2Seq 模型与注意力机制
人工智能·深度学习·神经网络·注意力机制·seq2seq
火山引擎开发者社区3 小时前
ByteBrain x 清华 VLDB25|时序多模态大语言模型 ChatTS
人工智能·语言模型·自然语言处理
SoaringPigeon3 小时前
从深度学习的角度看自动驾驶
人工智能·深度学习·自动驾驶
产品经理独孤虾3 小时前
如何利用AI大模型对已有创意进行评估,打造杀手级的广告创意
人工智能·大模型·aigc·产品经理·数字营销·智能营销·智能创意生成
MobotStone3 小时前
无代码+AI时代,为什么你仍然需要像个开发者一样思考
人工智能·算法
张较瘦_4 小时前
[论文阅读] 人工智能 + 软件工程 | LLM辅助软件开发:需求如何转化为代码?
论文阅读·人工智能·软件工程