CNN卷积神经网络
一、什么是卷积神经网络(CNN)
CNN(卷积神经网络)是一种专门用于处理图像的神经网络,尤其在图像识别任务中表现出色,例如识别手写数字。它通过多层结构逐步提取图像特征,最终输出识别结果。与传统神经网络类似,CNN也可以像乐高积木一样灵活组装。不过,CNN在结构上引入了卷积层(convolution)和池化层(pooling),这两种新结构使其在处理图像数据时更具优势。
传统神经网络的Affine层在处理图像时存在一个关键问题:数据维度过高。图像通常以三维数据的形式存储,其中包含了像素值和颜色信息。然而,传统神经网络会将图像的每个像素点简单地视为一个独立的神经元输入,忽略了图像的空间结构和颜色信息,导致数据维度膨胀,计算复杂度增加。
CNN通过卷积层巧妙地解决了这一问题。卷积层能够提取图像的局部特征,同时保留图像的空间结构信息,从而实现数据的有效降维。此外,CNN的输入和输出数据仍然保持其三维结构,这种数据被称为输入特征图和输出特征图。这种设计使得CNN在处理图像时更加高效,能够更好地捕捉图像的内在特征,从而在图像识别等任务中表现出色。
二、CNN的结构
CNN主要由以下几层组成:
输入层:接收图像数据,将图像转换为二维矩阵(如灰度图像)。
卷积层:通过卷积核在图像上滑动,提取图像的特征,生成特征图。
池化层:对特征图进行降维,提取重要特征,减少计算量,防止过拟合。
全连接层:将特征图展平为一维向量,进行综合计算,输出概率。
输出层:根据全连接层的结果,输出最终的识别结果(如数字的概率)。
卷积层
卷积层直接解决了传统神经网络Affine层的关键问题——数据降维。在计算机中,图像通常以三维数据的形式存储,包含了像素值和颜色信息。然而,传统神经网络在处理图像时,会将每个单元格简单地视为一个独立的神经元输入,忽略了图像的空间结构和颜色信息,导致数据维度大幅增加,计算复杂度也随之上升。
CNN的卷积层通过卷积运算来处理图像数据。卷积运算类似于图像处理中的滤波器运算,用于提取图像的局部特征。在一些资料中,滤波器也被称为核。卷积运算的过程可以理解为乘积累加运算,即通过核与图像局部区域的逐点相乘并求和,从而生成新的特征图。
填充
在卷积层的处理过程中,有时需要对输入数据的边缘进行填充,这种操作称为填充(padding)。填充的主要目的是控制输出特征图的大小。如果不进行填充,随着卷积运算的多次进行,输出特征图的尺寸会逐渐减小,最终可能变为1×1,导致后续无法继续应用卷积运算。因此,填充操作可以有效避免这一问题,使卷积层能够在保持图像特征的同时,灵活地调整输出尺寸,从而更好地适应复杂的图像处理任务。
步幅
在卷积运算中,滤波器的移动间隔被称为步幅(stride)。如果将步幅设置为2,那么滤波器每次移动时的间隔就会变为2个元素。
步幅,输入和输出的大小关系如下:
假设输入大小为(H,W),滤波器大小为(FH,FW),输出大小为(OH,OW),填充为P,步幅为S,此时,输出大小有如下计算:
数据存储
神经网络当中进行了将数据打包的批处理,为了让卷积神经网络也进行一样的操作,我们需要按照(batch_num,channel,height,width)的顺序保存数据,这样,原本对N个数据进行的N次操作就变成了对N个数据进行一次的批处理,这样做的优点在于机器可以把大量数据用于计算而非数据传输上面
池化层
池化层是缩小高、长方向上的空间的运算,通过如上图方式,将2*2的区域集约成一个元素来处理,以此缩小空间大小
池化层特征
池化层有很多种类,像Max池化层,Average池化层
池化层只需要输入,而没有需要学习的参数,并且经过池化层后输出和输入数据的通道数不会发生改变,计算按照通道独立进行,除此之外,池化层对于微小变化具有健壮的鲁棒性,输出结果不易随误差而大幅变动
python实现
im2col
为了更好的实现卷积运算(多次嵌套for循环太麻烦了),我们使用im2col函数,im2col这一便捷函数具有以下接口。
im2col(input_data,filter_h,filter_w,stride=1,pad=0)
● input_data —— 由(数据量,通道,高,长)的4维数组构成的输入数据 ● filter_h —— 滤波器的高 ●
filter_w —— 滤波器的长 ● stride —— 步幅 ● pad —— 填充
卷积层的实现
import numpy as npdef im2col(x, FH, FW, stride, pad):"""将输入数据转换为适合卷积操作的矩阵形式。参数:x -- 输入数据,形状为 (N, C, H, W)FH -- 滤波器的高度FW -- 滤波器的宽度stride -- 步幅pad -- 填充返回:col -- 转换后的矩阵,形状为 (N * out_h * out_w, C * FH * FW)"""N, C, H, W = x.shapeout_h = int(1 + (H + 2 * pad - FH) / stride)out_w = int(1 + (W + 2 * pad - FW) / stride)col = np.zeros((N, C, FH, FW, out_h, out_w))for i in range(out_h):for j in range(out_w):col[:, :, :, :, i, j] = x[:, :, i * stride:i * stride + FH, j * stride:j * stride + FW]col = col.transpose(0, 4, 5, 1, 2, 3).reshape(N * out_h * out_w, -1)return colclass Convolution:"""卷积层的实现。参数:W -- 滤波器权重,形状为 (FN, C, FH, FW)b -- 偏置,形状为 (FN,)stride -- 步幅pad -- 填充"""def __init__(self, W, b, stride=1, pad=0):self.W = Wself.b = bself.stride = strideself.pad = paddef forward(self, x):"""前向传播。参数:x -- 输入数据,形状为 (N, C, H, W)返回:out -- 输出数据,形状为 (N, FN, out_h, out_w)"""FN, C, FH, FW = self.W.shapeN, C, H, W = x.shapeout_h = int(1 + (H + 2 * self.pad - FH) / self.stride)out_w = int(1 + (W + 2 * self.pad - FW) / self.stride)col = im2col(x, FH, FW, self.stride, self.pad)col_W = self.W.reshape(FN, -1).T # 滤波器的展开out = np.dot(col, col_W) + self.bout = out.reshape(N, out_h, out_w, -1).transpose(0, 3, 1, 2)return out# 示例使用
# 假设输入数据 x 和滤波器 W, b
x = np.random.rand(1, 3, 32, 32) # 示例输入数据
W = np.random.rand(10, 3, 5, 5) # 示例滤波器
b = np.random.rand(10) # 示例偏置conv = Convolution(W, b, stride=1, pad=2)
output = conv.forward(x)
print(output.shape)
代码说明
-
im2col
函数:- 该函数将输入数据
x
转换为适合卷积操作的矩阵形式。 - 输入数据
x
的形状为(N, C, H, W)
,其中N
是批量大小,C
是通道数,H
和W
是输入数据的高度和宽度。 - 输出数据
col
的形状为(N * out_h * out_w, C * FH * FW)
,其中out_h
和out_w
是输出数据的高度和宽度,FH
和FW
是滤波器的高度和宽度。
- 该函数将输入数据
-
Convolution
类:- 该类实现了卷积层的前向传播。
__init__
方法初始化滤波器权重W
、偏置b
、步幅stride
和填充pad
。forward
方法执行前向传播,计算卷积层的输出。
-
示例使用:
- 创建一个示例输入数据
x
、滤波器W
和偏置b
。 - 创建
Convolution
类的实例conv
。 - 调用
conv.forward(x)
计算卷积层的输出,并打印输出数据的形状。
- 创建一个示例输入数据
池化层的实现
池化层是实际实现时需要改变存储数据的数据结构来进行处理:
流程图如上,我们很好理解其原理
import numpy as npclass Pooling:"""池化层的实现。参数:pool_h -- 池化窗口的高度pool_w -- 池化窗口的宽度stride -- 步幅pad -- 填充"""def __init__(self, pool_h, pool_w, stride=1, pad=0):self.pool_h = pool_hself.pool_w = pool_wself.stride = strideself.pad = paddef forward(self, x):"""前向传播。参数:x -- 输入数据,形状为 (N, C, H, W)返回:out -- 输出数据,形状为 (N, C, out_h, out_w)"""N, C, H, W = x.shapeout_h = int(1 + (H - self.pool_h) / self.stride)out_w = int(1 + (W - self.pool_w) / self.stride)# 展开 (1)col = im2col(x, self.pool_h, self.pool_w, self.stride, self.pad)col = col.reshape(-1, self.pool_h * self.pool_w)# 最大值 (2)out = np.max(col, axis=1)# 转换 (3)out = out.reshape(N, out_h, out_w, C).transpose(0, 3, 1, 2)return outdef im2col(x, pool_h, pool_w, stride, pad):"""将输入数据转换为适合池化操作的矩阵形式。参数:x -- 输入数据,形状为 (N, C, H, W)pool_h -- 池化窗口的高度pool_w -- 池化窗口的宽度stride -- 步幅pad -- 填充返回:col -- 转换后的矩阵,形状为 (N * pool_h * pool_w, C * out_h * out_w)"""N, C, H, W = x.shapeout_h = int(1 + (H - pool_h + 2 * pad) / stride)out_w = int(1 + (W - pool_w + 2 * pad) / stride)x_pad = np.pad(x, ((0, 0), (0, 0), (pad, pad), (pad, pad)), 'constant')col = np.zeros((N, C, out_h, out_w, pool_h, pool_w))for i in range(out_h):for j in range(out_w):col[:, :, i, j, :, :] = x_pad[:, :, i * stride:i * stride + pool_h, j * stride:j * stride + pool_w]col = col.transpose(0, 4, 5, 1, 2, 3).reshape(N * pool_h * pool_w, -1)return col
代码说明
-
Pooling
类:- 该类实现了池化层的前向传播。
__init__
方法初始化池化窗口的高度pool_h
、宽度pool_w
、步幅stride
和填充pad
。forward
方法执行前向传播,计算池化层的输出。
-
im2col
函数:- 该函数将输入数据
x
转换为适合池化操作的矩阵形式。 - 输入数据
x
的形状为(N, C, H, W)
,其中N
是批量大小,C
是通道数,H
和W
是输入数据的高度和宽度。 - 输出数据
col
的形状为(N * pool_h * pool_w, C * out_h * out_w)
,其中out_h
和out_w
是输出数据的高度和宽度。
- 该函数将输入数据
-
示例使用:
- 创建一个
Pooling
类的实例pool
。 - 调用
pool.forward(x)
计算池化层的输出,并打印输出数据的形状。
- 创建一个
三、CNN的工作流程
以手写数字识别为例:
-
输入图像:将手写数字图像转换为像素矩阵。
-
卷积操作:用卷积核在图像上滑动,提取特征,生成特征图。
-
池化操作:对特征图进行降维,提取重要特征。
-
重复卷积和池化:多次卷积和池化,进一步提取特征。
-
全连接:将特征图展平为一维向量,进行综合计算。
-
输出结果:输出每个数字的概率,取概率最大的数字作为识别结果。
四、CNN的优点
• 特征提取能力强:通过卷积操作自动提取图像特征。
• 防止过拟合:通过池化层减少特征数量。
• 平移不变性:即使图像位置稍有偏移,也能正确识别。
五、总结
CNN是一种强大的图像识别工具,通过卷积层提取特征,池化层降维,全连接层综合计算,最终输出识别结果。它广泛应用于图像识别、物体检测等领域。
相关文章:
CNN卷积神经网络
一、什么是卷积神经网络(CNN) CNN(卷积神经网络)是一种专门用于处理图像的神经网络,尤其在图像识别任务中表现出色,例如识别手写数字。它通过多层结构逐步提取图像特征,最终输出识别结果。与传…...
生物信息学技能树(Bioinformatics)与学习路径
李升伟 整理 生物信息学是一门跨学科领域,涉及生物学、计算机科学以及统计学等多个方面。以下是关于生物信息学的学习路径及相关技能的详细介绍。 一、基础理论知识 1. 生物学基础知识 需要掌握分子生物学、遗传学、细胞生物学等相关概念。 对基因组结构、蛋白质…...
Obsidian无门槛简明教程
Obsidian简明教程 Markdown基本语法基本码字标题换行段落引用分割线代码块链接带名字的链接超链接插入图片 强调语法加粗斜体删除线高亮 列表有序列表无序列表任务列表 Obsidian核心用法软件基本使用安装仓库文件夹笔记编辑与查看 资源 核心插件双链标签 三方插件Various Compl…...
常用 Git 命令详解
Git 是一个强大的版本控制工具,广泛用于软件开发和团队协作中。掌握 Git 命令可以帮助开发者更高效地管理代码版本和项目进度。本文将介绍一些常用的 Git 命令,并提供示例以帮助你更好地理解和应用这些命令。 目录 常用命令 git clonegit stashgit pul…...
【HDFS入门】HDFS与Hadoop生态的深度集成:与YARN、MapReduce和Hive的协同工作原理
目录 引言 1 HDFS核心架构回顾 2 HDFS与YARN的集成 3 HDFS与MapReduce的协同 4 HDFS与Hive的集成 4.1 Hive架构与HDFS交互 4.2 Hive数据组织 4.3 Hive查询执行流程 5 HDFS在生态系统中的核心作用 6 性能优化实践 7 总结 引言 在大数据领域,Hadoop生态系统…...
多路由器通过三层交换机互相通讯(单臂路由+静态路由+默认路由版),通过三层交换机让pc端相互通讯
多路由器通过三层交换机互相通讯(单臂路由静态路由默认路由版) 先实现各个小框框里能够互通 哇咔 交换机1(二层交换机,可看配置单臂路由的文章) Switch>en Switch#conf t Switch(config)#int f0/1 Switch(config-if)#switchport access…...
电控---CMSIS概览
1. CMSIS库简介 CMSIS(Cortex Microcontroller Software Interface Standard,Cortex微控制器软件接口标准)是由ARM公司开发的一套标准化软件接口,旨在为基于ARM Cortex-M系列处理器(如Cortex-M0/M0/M3/M4/M7/M33等&am…...
2025.04.17【Stacked area】| 生信数据可视化:堆叠区域图深度解析
文章目录 生信数据可视化:堆叠区域图深度解析堆叠面积图简介为什么使用堆叠面积图如何使用R语言创建堆叠面积图安装和加载ggplot2包创建堆叠面积图的基本步骤示例代码 解读堆叠面积图堆叠面积图的局限性实际应用案例示例:基因表达量随时间变化 结论 生信…...
XSS之同源、跨域、内容安全策略
一、什么是同源策略 HTML的同源策略是浏览器的一个重要的安全机制,它用于限制一个源的网页如何与另一个源的资源进行交互,以此来减少夸站脚本攻击(XSS)和跨站请求伪造(CSRF)等安全风险。 同源的定义 若两个URL的协议(protocol)、…...
十三、系统设计
一、前言 二、架构设计概念 三、架构风格 四、面向服务的架构 五、微服务 六、MDA 七、软件界面设计 八、软件设计的构成 九、结构化设计 十、面向对象设计内容提要 十一、面向对象设计原则 十二、架构模式、设计模式与惯用法...
HTTP 2.0 协议特性详解
1. 使用二进制协议,简化传输的复杂性,提高了效率 2. 支持一个 TCP 链接发起多请求,移除 pipeline HTTP/2 移除了 HTTP/1.1中的管道化(pipeline)机制,转而采用多路复用(Multiplexing࿰…...
MySQL数据备份
一,为什么要进行数据备份 备份:能够防止由于机械故障以及人为误操作带来的数据丢失,例如将数据库文件保存在了其它地方。冗余: 数据有多份冗余,但不等备份,只能防止机械故障带来的数据丢失,例如…...
【Ai】CherryStudio 详细使用:本地知识库、MCP服务器
一、CherryStudio 介绍 Cherry Studio 是一款集多模型对话、知识库管理、AI 绘画、翻译等功能于一体的全能 AI 助手平台。 Cherry Studio 高度自定义的设计、强大的扩展能力和友好的用户体验,使其成为专业用户和 AI 爱好者的理想选择。无论是零基础用户还是开发者&…...
STM32F103_HAL库+寄存器学习笔记17 - CAN中断接收 + 接收CAN总线所有报文
导言 如上所示,本实验的目的是使能CAN接收FIFO1的挂号中断,使用CAN过滤器0与CAN接收FIFO1的组合,接收CAN总线上所有的CAN报文。 如上所示,STM32F103有两个3级深度的接收FIFO。外设CAN想要正常接收CAN报文,必须配置接收…...
kafka报错:The Cluster ID doesn‘t match stored clusterId Some in meta.properties
kafka启动报错: ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer) kafka.common.InconsistentClusterIdException: The Cluster ID kVSgfurUQFGGpHMTBqBPiw doesnt match stored clusterId Some(0Qftv9yBTAmf2iDPSl…...
QML 信号与槽
QML 信号与槽 QML 是 Qt 框架中用于构建现代化、流畅用户界面的声明式语言,其信号与槽(Signals and Slots)机制是实现组件间通信和交互的核心特性。与 C 的信号与槽类似,QML 的信号与槽提供了一种松耦合的方式,允许界…...
数据结构-栈
大家好,今天带来的是关于数据结构初阶中的栈和队列的内容,一起来看看吧!!! 1.栈的概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为…...
Java 开发玩转 MCP:从 Claude 自动化到 Spring AI Alibaba 生态整合
摘要 本文以原理与示例结合的形式讲解 Java 开发者如何基于 Spring AI Alibaba 框架玩转 MCP,主要包含以下内容。 1. 一些 MCP 基础与快速体验(熟悉的读者可以跳过此部分) 2. 如何将自己开发的 Spring 应用发布为 MCP Server,验…...
CSS核心笔记001
目录 杂七杂八知识点样式优先级风格基本选择器通配符元素类ID 复合选择器交集选择器并集后代-孙子儿子兄弟属性各种属性选择器的应用 伪类动态伪类结构伪类否定伪类目标为类语言伪类UI伪类 伪元素 杂七杂八知识点 样式优先级 行内 > 内部 > 外部风格 紧凑风格基本选择…...
Windows快速切换屏幕/桌面
windows自带的切屏 需要winctrl 小键盘左右键 但是! Windows使用还是键盘加鼠标舒服! 教程 安装autohotkey 代码 ~LWin & LButton::{SendInput "^#{Left}" ; 发送 Win Ctrl Left (切换到左侧虚拟桌面) } ; 使用花括号包裹命令&a…...
ESP32- 开发笔记- 硬件设计-ESP32-C3基本电路
ESP32的最小电路 1 ESP32固件下载 ESP32 有多种下载(烧录)固件的方式,具体选择取决于开发环境和硬件连接。以下是常见的几种下载方式: 1.1 USB 串口下载(最常用) 适用场景:通过 USB 转串口芯片(如 CP2102、CH340)连接电脑,使用 esptool 或其他工具烧录固件。这里…...
webgl入门实例-09索引缓冲区示例
实现效果 实现代码 <!doctype html> <html lang"en"><head><meta charset"utf-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport"content"widthdevi…...
STM32 串口中断接收方式笔记:HAL_UART_Receive_IT vs __HAL_UART_ENABLE_IT
📘 STM32 串口中断接收方式笔记:HAL_UART_Receive_IT vs __HAL_UART_ENABLE_IT 🧠 1. 两者作用简述 函数/宏作用是否配置HAL状态是否调用Rx回调HAL_UART_Receive_IT()启动一次基于中断的串口接收任务✅ 是✅ 是__HAL_UART_ENABLE_IT()手动使…...
ubuntu 向右拖动窗口后消失了、找不到了
这是目前单显示器的设置,因为实际只有1个显示器,之前的设置如下图所示,有2个显示器,一个主显示器,一个23寸的显示器 ubuntu 22.04 系统 今天在操作窗口时,向右一滑,发现这个窗口再也不显示了、找…...
Selenium 获取 Web 页面信息的全指南
Selenium 获取 Web 页面信息的全指南 Selenium 是一个功能强大的自动化测试工具,但它也可以用于 web 页面信息的抓取和分析。本文将详细介绍如何使用 Selenium 来获取网页信息,并涵盖从环境搭建到高级技巧的各个方面。 目录 简介环境搭建Selenium 的基…...
stm32-lm75、SPI
一、lm75--温度传感器 LM75 是一种数字温度传感器和带有 2 线接口的热监视器(热看门狗),以下是其详细介绍: 一、核心功能与特点 温度检测与转换 内置带隙温度传感器和 Sigma-Delta 模数转换器,可实现 -55℃ 至 125℃ 温…...
介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
Docker 是一种开源的容器化平台,可以帮助开发人员打包、部署和运行应用程序。Docker 的基本概念是利用容器来封装应用程序及其所有依赖项,使其能够在任何环境中快速、可靠地运行。 Docker 的优势包括: 轻量级和灵活性:Docker 容…...
如何判断单片机性能极限?
目录 1、CPU 负载 2、内存使用情况 3、实时性能 4、外设带宽 5、功耗与温度 在嵌入式系统设计中,当系统变得复杂、功能增加时,单片机可能会逐渐逼近其性能极限。及时识别这些极限点对于保证产品质量、稳定性和用户体验至关重要。 当你的嵌入式系统…...
LeetCode 2919 使数组变美的最小增量运算数
动态规划解题:最小操作次数使数组变为美丽数组 问题描述 给定一个下标从0开始、长度为n的整数数组nums和一个整数k。你可以对数组中的任意一个元素进行加1操作,操作次数不限。如果数组中任意长度大于或等于3的子数组的最大值都大于或等于k,…...
5.VTK 相机
文章目录 概念示例 概念 在VTK(VisualizationToolkit)中,相机(vtkCamera)用于定义场景的观察视角。以下是关于VTK相机的主要概念和设置方法的总结: 相机位置:通过vtkCamera::SetPosition()方法设…...
基于Flask的网络安全渗透知识库系统架构解析
基于Flask的网络安全渗透知识库系统架构解析 一、系统架构概述 本系统采用经典的三层Flask架构设计,通过模块化的方式实现渗透技术知识库的展示与管理。整体架构包含以下核心组件: 路由控制层:app.py作为入口文件模板展示层:Ji…...
Flutter BigInt 是用于处理任意精度整数的特殊数字类型,专为解决超大整数运算需求而设计
在Flutter/Dart中,BigInt 是用于处理任意精度整数的特殊数字类型,专为解决超大整数运算需求而设计。以下是从原理到实践的全面解析: 一、核心特性 特性说明任意精度突破普通int的64位限制(-2^63 ~ 2^63-1),…...
绿幕抠图直播软件-蓝松抠图插件--使用相机直播,灯光需要怎么打?
使用SONY相机进行绿幕抠图直播时,灯光布置是关键,直接影响抠图效果和直播画质。以下是详细的灯光方案和注意事项: 一、绿幕灯光布置核心原则 均匀照明:绿幕表面光线需均匀,避免阴影和反光(亮度差控制在0.5…...
DeepSeek在数据仓库的10大应用场景
一、智能数据集成与清洗 多源数据整合:DeepSeek能够从多种数据源中提取、转换和加载数据,实现跨系统数据的高效整合。 数据清洗与标准化:通过智能算法自动识别并纠正数据中的错误、不一致性和缺失值,提升数据质量。 二、数据仓…...
Java 工厂设计模式详解:用统一入口打造灵活可扩展的登录系统----掌握 Spring 源码的基础第一步
一、前言 在实际开发中,我们经常面临以下场景: 系统支持多种登录方式(用户名密码、管理员登录、OAuth 登录、短信登录等) 每种登录方式的认证逻辑不同 我们希望对外提供一个统一的接口调用,而不暴露具体实现 这个…...
算法备案和大模型备案能否同时申请?
最近收到很多小伙伴咨询说“算法备案和大模型备案能不能同时申请?”也有一些小伙伴们还分不清算法备案和大模型备案的区别,纷纷询问做了大模型备案还需要做算法备案吗?今天一篇文章带大家了解一下,算法备案和大模型备案究竟是怎么…...
【2025“华中杯”大学生数学建模挑战赛】C题:就业状态分析与预测 详细解题思路
目录 2025“华中杯”大学生数学建模挑战赛C题 详细解题思路一、问题一1.1 问题分析1.2 数学模型 1.3 Python代码1.4 Matlab代码 二、问题二2.1 问题分析2.2 数学模型 2.3 Python代码2.4 Matlab代码 三、问题三3.1 问题分析 四、问题四4.1 问题分析与数学模型 2025“华中杯”大学…...
纷析云开源财务软件:助力企业财务管理数字化转型
在当今数字化时代,企业对财务管理工具的需求日益增长,而开源软件以其透明性、灵活性和成本优势成为越来越多企业的选择。纷析云开源财务软件作为一款专注于企业财务数字化的开源解决方案,不仅提供了强大的功能支持,还通过开源生态…...
APang网联科技项目报告(服务器域管理篇)
APang网联科技:连接未来,智能领航 公司简介 APang网联科技成立于 [2005年],总部位于 [广东深圳],是一家集网络技术研发、系统集成、项目实施与运维服务为一体的高新技术企业。我们致力于为客户提供全方位、定制化的网络部署解决…...
制作Unoconv项目的Docker镜像
制作Unoconv项目的Docker镜像 1 介绍 1.1 Unoconv 在Linux下将Office转换为pdf的很多包仅支持Windows,Unoconv是一个用LibreOffice转化文档的项目,已经归档(2025-3-31)。迁移后的新版本是unoserver,unoserver不太好…...
神经网络--拓扑排序+思维
1.c<0的点赋0,不然会影响后面的入度 2.最后输出层是出度为0的,且题干要求输出c大于0的 3.有q0的情况,所以输的事后就会有答案 https://www.luogu.com.cn/problem/P1038 #include<bits/stdc.h> #include<string> using nam…...
更强的视觉 AI!更智能的多模态助手!Qwen2.5-VL-32B-Instruct-AWQ 来袭
Qwen2.5-VL-32B-Instruct 是阿里巴巴通义千问团队于 2025 年 3 月 24 日开源的多模态大模型,基于 Apache 2.0 协议发布。该模型在 Qwen2.5-VL 系列的基础上,通过强化学习技术优化,以 32B 参数规模实现了多模态能力的突破。 核心特性升级&…...
逻辑过期怎么设计
设计“逻辑过期”通常用于缓存、令牌管理、数据有效性验证等场景,其核心是通过业务逻辑判断数据是否过期(而非单纯依赖物理时间)。以下是设计逻辑过期的关键思路和实现方案: 1. 核心思想 物理过期:基于固定的时间&…...
EMIF详解
一、EMIF的基本定义 EMIF(External Memory Interface,外部存储器接口) 是嵌入式处理器(如DSP、FPGA、SoC)用于连接外部存储器的专用硬件接口模块,负责管理处理器与存储器之间的地址/数据总线、控制信号及时…...
Kubernetes》》K8S》》Pod调度机制
nodeName 、nodeSelector nodeName 是强绑定,nodeSelector是弱绑定 强绑定,如果Node失效时,则会导致Pod也无法调度 apiVersion: v1 kind: Pod metadata:name: example-pod spec:# nodeName Pod应该被调度到哪个具体的节点上 强绑定nodeNam…...
具身智能机器人学习路线全解析
一、引言 具身智能机器人作为融合了机器人学、人工智能、认知科学等多领域知识的前沿技术,正逐渐改变着我们的生活和工作方式。从工业制造到家庭服务,从医疗护理到太空探索,具身智能机器人都展现出了巨大的潜力。对于想要深入了解和学习这一…...
【PGCCC】Postgres MVCC 内部:更新与插入的隐性成本
为什么 Postgres 中的更新操作有时感觉比插入操作慢?答案在于 Postgres 如何在后台管理数据版本。 Postgres 高效处理并发事务能力的核心是多版本并发控制(MVCC)。 在本文中,我将探讨 MVCC 在 Postgres 中的工作原理以及它如何影响…...
ESP-ADF外设子系统深度解析:esp_peripherals组件架构与核心设计(输入类外设之触摸屏 Touch)
目录 ESP-ADF外设子系统深度解析:esp_peripherals组件架构与核心设计(输入类外设之触摸屏 Touch)简介模块概述功能定义架构位置核心特性 触摸(Touch)外设触摸外设概述触摸外设API和数据结构外设层API(periph_touch.h/periph_touch…...
Python高级爬虫之JS逆向+安卓逆向1.5节: 控制结构
目录 引言: 1.5.1 Python中的控制结构 1.5.2 条件控制 1.5.3 循环控制 1.5.4 跳转控制 1.5.5 爬虫不要接学生单 引言: 大神薯条老师的高级爬虫安卓逆向教程: 这套爬虫教程会系统讲解爬虫的初级,中级,高级知识&a…...
Spine-Leaf 与 传统三层架构:全面对比与解析
本文将详细介绍Spine-Leaf架构,深入对比传统三层架构(Core、Aggre、Access),并探讨其与Full-mesh网络和软件定义网络(SDN)的关联。通过通俗易懂的示例和数据中心网络分析,我将帮助您理解Spine-L…...