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

【深度学习】之 卷积(Convolution2D)、最大池化(Max Pooling)和 Dropout 的NumPy实现

1. 2D 卷积操作

import numpy as npdef conv2d(image, kernel, stride=1, padding=0):"""应用2D卷积操作到输入图像上。参数:- image: 输入图像,2D数组。- kernel: 卷积核,2D数组。- stride: 卷积步幅。- padding: 图像周围的零填充数量。返回值:- output: 卷积操作的结果。"""# 对输入图像添加零填充if padding > 0:image = np.pad(image, ((padding, padding), (padding, padding)), mode='constant')kernel_height, kernel_width = kernel.shapeimage_height, image_width = image.shape# 计算输出的尺寸output_height = (image_height - kernel_height) // stride + 1output_width = (image_width - kernel_width) // stride + 1output = np.zeros((output_height, output_width))for i in range(0, output_height):for j in range(0, output_width):start_i = i * stridestart_j = j * strideend_i = start_i + kernel_heightend_j = start_j + kernel_widthoutput[i, j] = np.sum(image[start_i:end_i, start_j:end_j] * kernel)return output# 示例用法
image = np.array([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]])kernel = np.array([[1, 0],[0, -1]])conv_result = conv2d(image, kernel, stride=1, padding=1)
print("卷积结果:\n", conv_result)

2. 2D 最大池化操作

def max_pool2d(image, pool_size=2, stride=2, padding=0):"""应用2D最大池化操作到输入图像上。参数:- image: 输入图像,2D数组。- pool_size: 池化窗口的大小。- stride: 池化步幅。- padding: 图像周围的零填充数量。返回值:- output: 最大池化操作的结果。"""# 对输入图像添加零填充if padding > 0:image = np.pad(image, ((padding, padding), (padding, padding)), mode='constant')image_height, image_width = image.shape# 计算输出的尺寸output_height = (image_height - pool_size) // stride + 1output_width = (image_width - pool_size) // stride + 1output = np.zeros((output_height, output_width))for i in range(0, output_height):for j in range(0, output_width):start_i = i * stridestart_j = j * strideend_i = start_i + pool_sizeend_j = start_j + pool_sizeoutput[i, j] = np.max(image[start_i:end_i, start_j:end_j])return output# 示例用法
pool_result = max_pool2d(conv_result, pool_size=2, stride=2, padding=0)
print("最大池化结果:\n", pool_result)

3. Dropout 操作

def dropout(X, drop_prob):"""对输入应用dropout。参数:- X: 输入数组。- drop_prob: 丢弃神经元的概率 (0 <= drop_prob < 1)。返回值:- output: 应用dropout后的结果。"""if drop_prob < 0.0 or drop_prob >= 1.0:raise ValueError("drop_prob必须在范围[0.0, 1.0)内。")keep_prob = 1 - drop_probmask = np.random.rand(*X.shape) < keep_probreturn X * mask / keep_prob# 示例用法
np.random.seed(0)  # 为了结果的可重复性
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
dropout_result = dropout(X, drop_prob=0.5)
print("Dropout结果:\n", dropout_result)

更多示例和代码请参考我的 GitHub 项目:Machine_DLearning_With_NP,欢迎 star

水平有限,有问题随时交流~

相关文章:

  • arm系统中双网卡共存问题
  • 区块链共识机制技术一--POW(工作量证明)共识机制
  • Transformer论文精读
  • App UI 风格,引领时尚
  • 无头+单向+非循环链表的实现
  • web学习笔记(六十五)
  • Recognize Anything: A Strong Image Tagging Model(RAM模型使用方法)
  • 各品牌电视安装第三方软件失败的解决方法
  • 理解数仓建模
  • 移动安全赋能化工能源行业智慧转型
  • 软件2_算法功能23
  • 数据库(28)——联合查询
  • Web前端Hack:深入探索、挑战与防范
  • 【C++】深入理解decltype和decltype(auto)
  • MyBatisPlus插件生成代码
  • 【前端学习】-粗谈选择器
  • Bytom交易说明(账户管理模式)
  • Elasticsearch 参考指南(升级前重新索引)
  • ES2017异步函数现已正式可用
  • ES6--对象的扩展
  • GitUp, 你不可错过的秀外慧中的git工具
  • iOS编译提示和导航提示
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • MYSQL 的 IF 函数
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • pdf文件如何在线转换为jpg图片
  • react 代码优化(一) ——事件处理
  • Unix命令
  • 从setTimeout-setInterval看JS线程
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 设计模式(12)迭代器模式(讲解+应用)
  • 微信开源mars源码分析1—上层samples分析
  • 温故知新之javascript面向对象
  • 我这样减少了26.5M Java内存!
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • #预处理和函数的对比以及条件编译
  • (1)常见O(n^2)排序算法解析
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2020)Java后端开发----(面试题和笔试题)
  • (C++17) optional的使用
  • (pojstep1.3.1)1017(构造法模拟)
  • (ZT)出版业改革:该死的死,该生的生
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)shell调试方法
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET 依赖注入和配置系统
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .Net6 Api Swagger配置
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2