免费软件库合集软件资料网站渭南市住房和城乡建设局网站

张小明 2025/12/25 17:50:49
免费软件库合集软件资料网站,渭南市住房和城乡建设局网站,专业建设质量报告,南宁seo怎么做优化团队本文博主将用Python代码简单演示卷积操作的过程#xff0c;让你直观理解卷积是如何工作的。 1. 手动实现简单的2D卷积 import numpy as npdef manual_conv2d(image, kernel):手动实现简单的2D卷积#xff08;无填充#xff0c;步长为1#xff09;参数:im…本文博主将用Python代码简单演示卷积操作的过程让你直观理解卷积是如何工作的。1. 手动实现简单的2D卷积importnumpyasnpdefmanual_conv2d(image,kernel): 手动实现简单的2D卷积无填充步长为1 参数: image: 输入图像2D numpy数组 kernel: 卷积核/滤波器2D numpy数组 返回: 卷积结果 # 获取图像和卷积核的尺寸img_height,img_widthimage.shape kernel_height,kernel_widthkernel.shape# 计算输出特征图的尺寸output_heightimg_height-kernel_height1output_widthimg_width-kernel_width1# 初始化输出特征图outputnp.zeros((output_height,output_width))# 滑动窗口进行卷积操作foriinrange(output_height):forjinrange(output_width):# 提取当前窗口windowimage[i:ikernel_height,j:jkernel_width]# 计算点积并求和output[i,j]np.sum(window*kernel)returnoutput# 创建一个简单的6x6图像数字边缘检测示例imagenp.array([[0,0,0,0,0,0],[0,1,1,1,1,0],[0,1,2,2,1,0],[0,1,2,2,1,0],[0,1,1,1,1,0],[0,0,0,0,0,0]])print(原始图像:)print(image)print()# 定义一个垂直边缘检测卷积核vertical_kernelnp.array([[1,0,-1],[1,0,-1],[1,0,-1]])# 定义一个水平边缘检测卷积核horizontal_kernelnp.array([[1,1,1],[0,0,0],[-1,-1,-1]])# 定义一个锐化卷积核sharpen_kernelnp.array([[0,-1,0],[-1,5,-1],[0,-1,0]])# 执行卷积vertical_edgesmanual_conv2d(image,vertical_kernel)horizontal_edgesmanual_conv2d(image,horizontal_kernel)sharpenedmanual_conv2d(image,sharpen_kernel)print(垂直边缘检测卷积核:)print(vertical_kernel)print(垂直边缘检测结果:)print(vertical_edges)print()print(水平边缘检测卷积核:)print(horizontal_kernel)print(水平边缘检测结果:)print(horizontal_edges)print()print(锐化卷积核:)print(sharpen_kernel)print(锐化结果:)print(sharpened)2. 使用NumPy的高级函数实现卷积importnumpyasnpimportmatplotlib.pyplotaspltdefvisualize_convolution():可视化卷积操作过程# 创建一个8x8的图像中间有个矩形imagenp.zeros((8,8))image[2:6,2:6]1# 创建一个4x4的白色矩形# 定义一个边缘检测卷积核edge_kernelnp.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]])# 使用NumPy的convolve2d需要scipytry:fromscipyimportsignal# 执行卷积convolvedsignal.convolve2d(image,edge_kernel,modevalid)print(原始图像 (8x8):)print(image)print(\n边缘检测卷积核 (3x3):)print(edge_kernel)print(\n卷积结果 (6x6):)print(convolved)# 可视化fig,axesplt.subplots(1,3,figsize(12,4))# 原始图像axes[0].imshow(image,cmapgray,interpolationnearest)axes[0].set_title(原始图像)axes[0].axis(off)# 卷积核axes[1].imshow(edge_kernel,cmapgray,interpolationnearest)axes[1].set_title(卷积核)axes[1].axis(off)# 卷积结果axes[2].imshow(convolved,cmapgray,interpolationnearest)axes[2].set_title(卷积结果)axes[2].axis(off)plt.tight_layout()plt.show()exceptImportError:print(需要安装scipy: pip install scipy)# 如果scipy不可用使用手动实现print(\n使用手动实现:)resultmanual_conv2d(image,edge_kernel)print(卷积结果:)print(result)# 运行可视化visualize_convolution()3. 实现带步长和填充的卷积defconv2d_with_params(image,kernel,stride1,padding0): 支持步长和填充的卷积实现 参数: image: 输入图像 kernel: 卷积核 stride: 步长 padding: 填充大小 返回: 卷积结果 # 如果padding0给图像添加填充ifpadding0:imagenp.pad(image,((padding,padding),(padding,padding)),modeconstant,constant_values0)img_height,img_widthimage.shape kernel_height,kernel_widthkernel.shape# 计算输出尺寸output_height(img_height-kernel_height)//stride1output_width(img_width-kernel_width)//stride1outputnp.zeros((output_height,output_width))# 滑动窗口考虑步长foriinrange(0,output_height):forjinrange(0,output_width):# 计算窗口起始位置start_ii*stride start_jj*stride end_istart_ikernel_height end_jstart_jkernel_width# 提取窗口windowimage[start_i:end_i,start_j:end_j]# 卷积操作output[i,j]np.sum(window*kernel)returnoutput# 测试带参数的卷积print( 测试不同参数的卷积 )# 创建一个小图像test_imagenp.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])test_kernelnp.array([[1,0],[0,-1]])print(原始图像:)print(test_image)print(\n卷积核:)print(test_kernel)# 测试不同步长result_stride1conv2d_with_params(test_image,test_kernel,stride1)print(f\n步长1的结果 (3x3):)print(result_stride1)result_stride2conv2d_with_params(test_image,test_kernel,stride2)print(f\n步长2的结果 (2x2):)print(result_stride2)# 测试带填充result_padding1conv2d_with_params(test_image,test_kernel,stride1,padding1)print(f\n步长1, 填充1的结果 (5x5):)print(result_padding1)4. 使用PyTorch实现卷积更接近真实深度学习场景importtorchimporttorch.nnasnnimporttorch.nn.functionalasFdefpytorch_convolution():使用PyTorch演示卷积print( PyTorch卷积演示 )# 创建一个批次的图像 (batch_size2, channels1, height5, width5)# 在PyTorch中图像格式为[批大小, 通道数, 高度, 宽度]batch_imagestorch.tensor([# 第一张图像[[[1,1,1,0,0],[0,1,1,1,0],[0,0,1,1,1],[0,0,1,1,0],[0,1,1,0,0]]],# 第二张图像[[[0,0,0,0,0],[0,1,1,0,0],[0,1,1,0,0],[0,0,0,0,0],[0,0,0,0,0]]]],dtypetorch.float32)print(f输入图像形状:{batch_images.shape})print(f第一张图像:\n{batch_images[0,0]})# 创建卷积层# 参数: 输入通道数, 输出通道数, 卷积核大小conv_layernn.Conv2d(in_channels1,out_channels2,kernel_size3,stride1,padding1,biasFalse)# 手动设置卷积核权重为了演示清晰# 第一个卷积核边缘检测conv_layer.weight.data[0,0]torch.tensor([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]],dtypetorch.float32)/9.0# 第二个卷积核模糊/平滑conv_layer.weight.data[1,0]torch.tensor([[1,1,1],[1,1,1],[1,1,1]],dtypetorch.float32)/9.0print(f\n卷积层权重形状:{conv_layer.weight.shape})print(f第一个卷积核:\n{conv_layer.weight[0,0]})print(f第二个卷积核:\n{conv_layer.weight[1,0]})# 执行卷积outputconv_layer(batch_images)print(f\n卷积输出形状:{output.shape})print(f第一张图像的输出 - 特征图1 (边缘检测):\n{output[0,0].detach().numpy().round(3)})print(f第一张图像的输出 - 特征图2 (平滑):\n{output[0,1].detach().numpy().round(3)})# 也可以使用F.conv2d函数式APIoutput_funcF.conv2d(batch_images,conv_layer.weight,stride1,padding1)print(f\n使用F.conv2d的结果与nn.Conv2d是否一致:{torch.allclose(output,output_func)})returnoutput# 运行PyTorch示例try:outputpytorch_convolution()exceptExceptionase:print(f需要安装PyTorch: pip install torch)print(f错误:{e})5. 可视化卷积滑动过程defvisualize_sliding_window():可视化卷积滑动窗口的过程# 创建一个小图像imgnp.array([[1,2,3],[4,5,6],[7,8,9]])kernelnp.array([[1,0],[0,-1]])print(图像:)print(img)print(\n卷积核:)print(kernel)print(\n--- 卷积过程 ---)output_heightimg.shape[0]-kernel.shape[0]1output_widthimg.shape[1]-kernel.shape[1]1resultnp.zeros((output_height,output_width))foriinrange(output_height):forjinrange(output_width):windowimg[i:i2,j:j2]conv_valuenp.sum(window*kernel)result[i,j]conv_valueprint(f\n位置 ({i},{j}):)print(f窗口:\n{window})print(f窗口 × 卷积核:)print(f{window}×{kernel}{window*kernel})print(f求和:{conv_value})print(f\n最终卷积结果:)print(result)returnresult# 运行滑动窗口可视化print( 详细滑动过程演示 )visualize_sliding_window()运行说明核心操作卷积的本质就是在输入图像上滑动一个窗口卷积核计算窗口与卷积核的对应元素乘积之和。关键公式对于位置(i, j)的输出是output[i, j] Σ_m Σ_n image[im, jn] * kernel[m, n]其中 m, n 是卷积核的索引。参数影响步长控制滑动窗口的移动距离填充在图像边缘添加像素控制输出尺寸卷积核不同的卷积核提取不同的特征边缘、纹理等深度学习中的卷积实际使用的是3D卷积处理多通道图像通常有多个卷积核每个生成一个特征图包含可学习的参数权重这个演示展示了卷积从最基本的手动实现到深度学习框架中使用的完整过程。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

广州企业网站建设开发北京注册公司可以申请北京车牌吗

校园快递代取 目录 基于springboot vue校园快递代取系统 一、前言 二、系统功能演示 详细视频演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue校园快递代取系统 一、前言…

张小明 2025/12/24 12:48:11 网站建设

九江网站建设优化公司wordpress对接静态网页

深入探索 Linux 云部署:从虚拟机管理到云镜像配置 1. 虚拟机管理 在虚拟机管理方面,当你在虚拟机管理程序(hypervisor)上安装了一个或多个虚拟机后,管理这些虚拟机的方式与管理直接安装在硬件上的计算机系统有相似之处。以下是具体的管理操作: - 查看系统 :在 virt…

张小明 2025/12/24 12:46:09 网站建设

网站建设的质量区别免费行情软件网站下载ww

OpenCore图形化配置工具:3步完成专业级黑苹果引导设置 【免费下载链接】OpenCore-Configurator A configurator for the OpenCore Bootloader 项目地址: https://gitcode.com/gh_mirrors/op/OpenCore-Configurator 想要轻松配置OpenCore引导却苦于复杂的命令…

张小明 2025/12/24 12:44:04 网站建设

做涉黄的视频网站用什么服务器互联网公司排名待遇阶梯

前置芝士动态规划 / DP子集划分问题 / 可行性背包思路首先观察这个放书的性质。结论:对于在同一个书架上的书,只需要一个人去负责。证明也比较简单,考虑某个人去放了这一排最远的(最大的)书,那么它一定可以…

张小明 2025/12/24 12:41:59 网站建设

一个网站项目多少钱陕西西乡网站建设

第一章:从开发到生产的边缘Agent部署概览在现代分布式系统架构中,边缘Agent作为连接中心平台与终端设备的关键组件,承担着数据采集、本地决策和远程协同的职责。其部署流程跨越开发、测试、灰度发布到最终生产环境落地,涉及多环境…

张小明 2025/12/24 12:39:56 网站建设

杭州品牌网站制作网站建设具体要求

Typst裁剪操作终极指南:轻松解决内容溢出难题 【免费下载链接】typst A new markup-based typesetting system that is powerful and easy to learn. 项目地址: https://gitcode.com/GitHub_Trending/ty/typst 在文档排版过程中,内容溢出边界是最…

张小明 2025/12/24 12:35:49 网站建设