标准化-归一化-BN-激活函数
标准化、归一化,用于数据预处理,一般是将原始数据统一刻度,预防原始数据差异较大带来的反向传播时的梯度爆炸。 具体刻度根据所应用的公式而不同。 Min-Max Scaling公式是,将数值归一化到[0,1]内 $x' = \frac{x - \min(x)}{\max(x) - \min(x)}$ 而Z-score 公式根据实际数据将数值标准化到一定范围内 $z = \frac{x - \mu}{\sigma}$,由于每个值都减去均值,故标准化后均值为0,那为何标准化后标准差为1?实际上这种标准化在实践中也被中称为Normalization 特性 归一化 (Normalization) 标准化 (Standardization) 典型做法 Min-Max Scaling Z-score Normalization 计算公式 $x' = \frac{x - \min}{\max - \min}$ $z = \frac{x - \mu}{\sigma}$ 数值范围 严格限制在 $[0, 1]$ 或 $[-1, 1]$ 无固定范围(通常在 $[-3, 3]$ 之间) 数据中心 不固定 严格以 0 为中心 对异常值 非常敏感(一个极大值会把其他数压扁) 较稳健(异常值只影响均值,不至于摧毁范围) Batch Normalization 对每个Batch的神经网络输出做(特别的)Normalization,注意这里的g,b是不是标量 Batch Size = 每次神经网络输入的数据数量;epoch = 总样本量 / Batch Size ...
简历网站的后端开发
技术栈: SpringBoot,MySQL, MybatisPlus, Knife4J,Lombok 项目初始化 使用Mybatis代码生成器生成实体类,mapper接口&xml文件等; 构建统一返回结果Result类,返回的提示信息统一封装在枚举类中。 项目初始化结构: 这里生成的mapper接口不带@mapper,并且,产生的是swagger2的@Api注解,这就需要我们额外操作。下面是生成代码器的代码 package cn.amebob.cv01; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.config.OutputFile; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; import java.util.Collections; public class CodeGenerator { public static void main(String[] args) { // 1. 数据库配置 String url = "jdbc:mysql://localhost:3306/test_db?serverTimezone=GMT%2B8"; String username = "root"; String password = "root"; FastAutoGenerator.create(url, username, password) .globalConfig(builder -> { builder.author("bob") .enableSwagger() .outputDir(System.getProperty("user.dir") + "/src/main/java"); }) .packageConfig(builder -> { builder.parent("cn.amebob.cv01") .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mapper")); }) .strategyConfig(builder -> { builder.addInclude("Experience", "Profile", "Project", "ProjectTag", "Tag", "User") .entityBuilder() .enableLombok() .idType(IdType.AUTO) .enableTableFieldAnnotation() .controllerBuilder() .enableRestStyle(); }) .templateEngine(new FreemarkerTemplateEngine()) .execute(); System.out.println("代码生成成功!"); } } 这里Result类可以使用@Builder,方便我们链式调用; ...
从ssm到mamba
参考: https://newsletter.maartengrootendorst.com/p/a-visual-guide-to-mamba-and-state SSM 基础概念 状态空间(State Space) 用一组变量,将系统某一时刻的信息打包,也就是状态。 举例:迷宫问题,一个状态用向量表示为(x,y,distance),即当前坐标、距离出口的距离。根据当前状态,和输入(这里是指向哪个方向走)便可预测下一个状态 为何叫 状态空间(State Space) 例子中的每个单元格都可以代表一个状态,而空间在数学上一般是封闭的,也就是说状态空间包含了所有的可能状态。 状态空间模型(State Space Model) 这里有连续、离散两种形式,实际上采用的是离散形式。 A,B,C,D矩阵何意味? A,B矩阵对预测下一个状态发挥作用。 SSM中训练完成后,A,B,C,矩阵就不变了,而mamba中的相关矩阵,则是根据当前词来变化。 C,D对当前输出发挥作用。 计算过程描述 输入X与B做运算,当前状态h与A做运算,相加得到下一个状态; 下一个状态同C做运算,附加上X和D矩阵的运算(这里更像是残差,帖子里用了skip-connection),得到输入y 更形象的计算过程图示: 从连续到离散的转变 离散输入到连续输入,以步长$\Delta$维持一个离散输入 we make use of the Zero-order hold technique. It works as follows. First, every time we receive a discrete signal, we hold its value until we receive a new discrete signal. 连续输入到离散输出,通过$\Delta$ 步长对连续输出进行采样 像RNN一样推理 当前的离散SSM公式 ...
mamba-vision
NVIDIA-MambaVision 摘要 主要工作:integrating Vision Transformers (ViT) with Mamba, 目的:improves its capacity to capture long-range spatial dependencies 适用于哪些下游任务:object detection, instance segmentation,and semantic segmentation 开源链接:GitHub - NVlabs/MambaVision: [CVPR 2025] Official PyTorch Implementation of MambaVision: A Hybrid Mamba-Transformer Vision Backbone 引言 transformer训练成本高:the quadratic complexity of the attention mechanism with respect to sequence length makes Transformers computationally expensive to train and deploy 本篇的前置知识:Vit、Mamba、SSM 等 Mamba 通过 new State Space Model (SSM) 关注该关注的,通过ardware-aware considerations并行计算:new State Space Model (SSM) that achieves linear time complexity,enables efficient input-dependent processing of long sequences with ardware-aware considerations. ...
输入-输出-实验结果
问题:它的输入是什么?它的输出是什么?它是怎么得到这个输出的?它的效果怎样么? UNet OutPut 输出:一个与原图大小相同的多通道图,通道数对应分类数,每个通道图像的像素点都有一个概率,表示当前像素点预测为此类的概率 但是记住,原论文中的输入大小为572 * 572 * 1 ,输出为 338 * 338 * 2,为何这样呢? 源于作者,没有做0填充(现代做法是执行卷积前0填充),而是镜像填充,再具体一点,就是将大图划分为patch时,如果 $572 \times 572$ 的输入方框 跨越原图边界,就进行镜像填充。 寻找代码中实际的处理 镜像填充(不常用): 如果你需要填充一个像素: 零填充:| 0 | 5 | 8 | 1 | 4 | 镜像填充:| 8 | 5 | 8 | 1 | 4 |(它将 5 旁边的 8 复制到了 5 的左边,就像 5 是一面镜子反射了 8 一样。) 下面是现代填充和原文填充对比 原始 U-Net 做法 准备数据(Pre-processing): 读取超大图 ($5000 \times 5000$)。 确定要切的一个 Patch 位置。 判断位置是否在边缘。 如果是边缘 $\rightarrow$ 执行镜像填充算法(Mirror Padding)生成扩充数据。 $\leftarrow$ (就是这里!) ...
李劲-ML-大作业
大纲: 解读顺序:由前到后,由整体到局部,由潜入深 用什么,做什么? a recurrent neural network ,Generating coherent sketch drawings in a vector format. 怎么做? idea:以人的思维方式进行生成,具体是模拟控笔的动作:移动方向,提笔,结束绘画 数据:$ (∆x,∆y, p1, p2, p3).$ dataset 为笔画动作,每个点由5个元素表示,分别是偏移和状态,其中偏移是相对于上一个点的偏移,状态则包含:笔尖触纸、抬笔、结束绘画 $p_1, p_2, p_3$ 是 One-hot 向量。这意味着在任意时刻,笔只能处于这三种状态中的一种(要么画,要么抬,要么停), 具体结构: 一个双向RNN编码器(Bidirectional LSTM),一个自回归的HyperLSTM解码器 编码器: 生成h 投影到$ \mu $和 $\sigma$ 得到z 生成h: 输入S到正序,反序中,输出一对h, 得到最终的h,该h便具备正向到反向的上下文信息。 $h→ = encode→(S), h← = encode←(Sreverse), h = [ h→ ; h← ]$ 投影到$ \mu $和$\sigma$ 得到的h经过全连接层投影到$ \mu $和 $\sigma$ $\mu = W_{\mu}h + b_{\mu}, \quad \hat{\sigma} = W_{\sigma}h + b_{\sigma}, \quad \sigma = \exp\left(\frac{\hat{\sigma}}{2}\right)$ ...
跨容器的联邦学习-初步
Multi-Node 问题 镜像分发:VM2 无法读取 VM1 电脑里的 my-fl-app 镜像。 构建镜像,推送到镜像仓库 编排不同:K8s YAML是期望,而普通多容器项目定义的是service,每个service对应一个容器;k8s Yaml 的单位是Pod这可能包含多个容器 FL策略 同步(Synchronous 分发:Server 把模型发给选中的 $K$ 个 Client。 训练:所有 Client 开始训练。 等待 (Barrier):Server 必须等待所有(或指定比例)Client 训练完成并回传参数。 聚合:Server 收到最后一份报告后,进行加权平均,更新全局模型。 下一轮:进入下一轮循环。 该策略存储木桶短板问题,即训练耗时取决于性能最低的那一台机器 异步(Asynchronous 独立行动:Client 只要领到任务就去练,练完立刻上传。 即时更新:Server 收到任何一个 Client 的更新,就立刻更新全局模型,不需要等别人。 继续跑:该 Client 拿最新的模型继续下一轮,不管其他 Client 还在干嘛 该策略,存在模型陈旧 (Staleness)问题,假设当前全局模型是 $W_5$(第5版),VM2 跑得慢,它还在用 $W_2$ 训练,当 VM2 终于提交梯度时,Server 已经更新到 $W_{10}$ 了,用基于旧模型 $W_2$ 算出来的梯度,去更新新模型 $W_{10}$,可能会导致模型“指错路”,甚至发散。 Federated Averaging 每轮选取一组设备参与。 公式: $f(w) \triangleq \sum_{k=1}^{K} \frac{n_k}{n} F_k(w)$ $w$: 全局模型参数 $f(w)$: 全局视角下的损失。假如我们把所有 Client 的数据收集到一个巨大的中心服务器上训练,算出来的 Loss 就是 $f(w)$。 ...
docker部署web应用遇到问题
案例一:ap2部署 基础工作:使用阿里通义生成部署的docker文件和nginx文件。 1. 问题 服务器上的 Docker 版本过旧 (1.13.1),缺少 docker-compose 命令 通过docker解决 由于网络限制,无法从 Docker Hub 拉取镜像 首先使用阿里云加速docker,本地编译vue,将编译后的前端文件打包上传; python版本依赖问题 使用python list 得到全部包版本,交给LLM生成requirements.txt 浏览器访问前端,一直显示空白页面 清除浏览器缓存,by ctrl + shift + del 前端请求404 这个问题常见,多半是请求地址错误 2. 操作 部署和更新 # 构建并启动服务 docker compose -f docker-compose.prod.yml up -d --build # 查看服务状态 docker compose -f docker-compose.prod.yml ps # 下面涉及的命令默认dockerfile文件名为docker-compose.yml docker compose down #完全清理当前项目的容器环境,从头开始 docker compose build --no-cache frontend #重新构建名为"frontend"的服务镜像 docker compose up -d #启动所有服务并在后台运行,-d 或 --detach:后台运行模式 # 查看系统端口占用情况 netstat -tlnp | grep -E "(3000|8000)" 验证部署结果 检查容器运行状态: ...
Digital-CV
# 1. 安装核心依赖:vue-router, element-plus, element-plus图标 npm install vue-router element-plus @element-plus/icons-vue # 2. 安装样式预处理器(推荐) npm install -D sass # 3. 运行开发服务器 npm run dev 目录结构 Digital-CV/ ├── node_modules/ ├── public/ │ └── favicon.ico (例如,网站的图标) ├── src/ (核心代码目录) │ ├── assets/ (静态资源:图片、字体、全局CSS) │ │ ├── images/ (项目截图、头像等) │ │ └── styles/ (全局样式或Sass变量文件) │ ├── components/ (小型、可复用的 UI 组件) │ │ ├── ProjectCard.vue (作品列表页使用的单个卡片) │ │ └── SocialLinks.vue (社交媒体链接图标组) │ ├── router/ (路由配置) │ │ └── index.js (定义所有路由路径) │ ├── views/ (完整页面组件 - 对应路由) │ │ ├── Home.vue (主页) │ │ ├── Resume.vue (简历页) │ │ ├── Projects.vue (作品列表页) │ │ └── ProjectDetail.vue (作品详情页) │ ├── App.vue (主布局文件:包含菜单和 <router-view>) │ └── main.js (入口文件:创建 Vue 实例、引入 Element Plus 和 Router) ├── .gitignore ├── index.html (Vite 入口 HTML 文件) ├── package.json └── vite.config.js 为了帮助你作为 Vue 初学者复现这个项目,我将核心技术点提炼为 5 个关键模块。你只要掌握这 5 点,就能把这个项目完整做出来,并且理解其中的逻辑。 1. 核心骨架:Vue Router 路由管理 这是单页应用(SPA)的灵魂。你需要理解“页面”在 Vue 中其实就是“组件的切换”。 核心概念: 路由配置 (router/index.js):如何定义 URL 和 组件 (.vue 文件) 的对应关系。 ...
文章标题
📊 基础定义 TP:真正例 (True Positive) FP:假正例 (False Positive) FN:假负例 (False Negative) TN:真负例 (True Negative) 📈 核心指标公式 1. 准确率 (Accuracy) 2. 精确率 (Precision) 3. 召回率 (Recall) / 敏感度 (Sensitivity) 4. 特异度 (Specificity) 5. F1分数 (F1-Score) 6. 交并比 (IoU, Jaccard Index) IoU(Intersection over Union) IoU = |预测 ∩ 真实| / |预测 ∪ 真实| = TP / (TP + FP + FN) 区域重叠的精确度 高IoU(>0.8):边界对齐很好,区域匹配准确 低IoU(<0.5):要么漏检,要么多检,要么定位不准 收获1:语义分割的关键指标F1,IOU 收获2:使用TensorBoard实时观测训练情况和参数 小提示: 如果您进行了多次实验(例如修改参数 后重新训练),建议每次修改 save_dir 或者在 tb 下建立子文件夹(如 tb/exp1, tb/exp2),这样可以在 TensorBoard 中同时对比多次实验的曲线。 ...
