故障分析 | MySQL:唯一键约束失效

Mythos门控式AI:能力跃迁与可信释放的技术架构解析 大模型能力不再仅由参数规模定义,而取决于其推理执行引擎的动态性与可控性。‘门控式释放’作为一种新型AI交付范式,融合语义指纹识别、动态计算图编排、跨文档状态缓存与可信度分片评估等关键技术,实现对高风险请求的实时拦截与低风险任务的精准加速。该机制显著提升法律、医疗、工业等强约束场景下的推理一致性与事实锚定能力,同时降低token消耗与端到端延迟。其核心价值在于将AI从‘黑盒响应器’升级为‘可验证协作者’,支撑金融合规审查、生物医药证据链构建、多源故障归因等需长程逻辑与高可靠性保障的关键应用。 阅读详情

作者:胡呈清

爱可生 DBA 团队成员,擅长故障分析、性能优化,个人博客:https://www.jianshu.com/u/a95ec11f67a8,欢迎讨论。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


最近遇到一个故障:单主模式5节点 MGR 集群,在使用 mysqlshell 导入数据时,所有secondary节点报错唯一键冲突退出集群。最终得到的结论是:mysqlshell importTable() 导入数据时会做 SET unique_checks=0 操作,在满足一定条件时会导致唯一键约束失效,主库插入了重复的数据,但从库会插入失败从而报错。下面我们就来聊聊这是怎么回事。

unique_checks=0 的原理(会导致唯一键约束失效吗?)

看看官方文档是怎么描述的:

If you have UNIQUE constraints on secondary keys, you can speed up table imports by temporarily turning off the uniqueness checks during the import session:
SET unique_checks=0;
… SQL import statements …
SET unique_checks=1;
For big tables, this saves a lot of disk I/O because InnoDB can use its change buffer to write secondary index records in a batch. Be certain that the data contains no duplicate keys.

对大数据量的导入,无论是 sql 文件还是 csv 文件,如果表中有唯一索引,我们可以通过 SET unique_checks=1; 来加快导入速度。这里用到的是 change buffer 的原理:

change buffer 的作用对象是普通二级索引,当插入、修改、删除二级索引记录时,即使数据不在 innodb buffer pool 中,也不需要先把数据从磁盘读取到内存。只需要在 change buffer 中完成 DML 操作,下次读取时才会从磁盘读取到内存,并与 change buffer 进行 merge,从而得到正确的数据。这个功能减少了 DML 时的随机 IO。

这里要注意对象是普通二级索引,唯一索引为什么不行?当执行 DML 时,数据不在内存中,为了保证唯一性,必须先从磁盘读取数据,这个随机 IO 是无法避免的,change buffer 失去了其作用,因此对唯一索引无效。

但是 unique_checks=0 让 change buffer 重新对唯一索引有效了。文档还有句暧昧的描述:“Be certain that the data contains no duplicate keys.”(你需要自己确保数据不包含重复值)。这会让唯一键约束失效吗?再让我们看看文档对于 unique_checks 系统变量的描述:

If set to 0, storage engines are permitted to assume that duplicate keys are not present in input data. If you know for certain that your data does not contain uniqueness violations, you can set this to 0 to speed up large table imports to InnoDB.
Setting this variable to 0 does not require storage engines to ignore duplicate keys. An engine is still permitted to check for them and issue duplicate-key errors if it detects them.

至始至终没有出现“不进行唯一性检查”的字眼,写文档的人真是狡猾。要搞清楚这个问题,我们还得回到 change buffer 的原理:change buffer 无法支持唯一索引,但是 unique_checks=0 让 change buffer 重新对唯一索引有效。结合文档两个描述,我们作出如下假设:

  • 如果 set unique_checks=0; DML操作的数据,如果主键和唯一索引在 innodb buffer pool 中,则可以通过内存中的数据进行唯一性检测,这也是我们在测试中都会遇到即使 set unique_checks=0 也不能插入重复数据;
  • 但如果 DML 操作的数据如果不在 innodb buffer pool 中,则不会通过读取磁盘上的主键、唯一索引进行唯一检测,此时就和普通的二级索引一样,直接在 change buffer 完成数据写入,减少磁盘 IO。

验证

1. 用 sysbench 造点数据
sysbench /usr/local/share/sysbench/oltp_read_write.lua --mysql-host=127.0.0.1 \
--mysql-port=3309 --mysql-user=root --mysql-password=root \
--mysql-db=sbtest --tables=4 --table-size=1000000 --report-interval=3 --threads=8 --time=300 prepare
2. 再创建一张表,并导入一些数据
CREATE TABLE `t` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `a` int(11) NOT NULL,
  `k` int(11) NOT NULL DEFAULT '0',
  `c` char(120) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
  `pad` char(60) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `k_1` (`k`),
  unique key `a` (`a`)
);
insert into t(a,k,c,pad) select * from sbtest1 where id <= 5000;
3. 重启 mysqld

这一步目的是为了保证数据不在 innodb buffer pool 中,注意参数:

innodb_buffer_pool_size = 64M
innodb_buffer_pool_load_at_startup = 0
innodb_buffer_pool_dump_at_shutdown = 0
innodb_buffer_pool_dump_pct = 0
4. 插入重复数据
mysql> set session unique_checks=0;
Query OK, 0 rows affected (0.04 sec)

mysql> insert into t(a,k,c,pad) values(1,439502,'59488447928-69619891934-66520244141-26804756589-33623161608-43445073345-17979281186-83118017446-98119924781-27868548476','0000');
Query OK, 1 row affected (0.01 sec)

可以看到成功插入了重复数据(这里用where a=1 等值查询只会输出一行结果,因此用 where a<2):

mysql> select id,a from t where a<2;
+------+---+
| id   | a |
+------+---+
|    1 | 1 |
| 5022 | 1 |
| 5026 | 1 |
| 5035 | 1 |
+------+---+
4 rows in set (0.01 sec)

如果想观察的更清楚,可以持续运行 sysbench run,用 sbtest* 表把 innodb buffer pool 占满,这样可以反复插入同一行数据:

5. 一些干扰验证的现象

有些记录无法顺利插入进去,这个对我困扰非常大,一度让我以为推论是错误的…这个就留给官方解释吧:

如果是 char 类型的唯一键,则不会有类似问题:

CREATE TABLE `t1` (
  `id` int NOT NULL AUTO_INCREMENT,
  `a` char(10) COLLATE utf8mb4_bin DEFAULT NULL,
  `k` int NOT NULL DEFAULT '0',
  `c` char(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '',
  `pad` char(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  UNIQUE KEY `a` (`a`),
  KEY `k_1` (`k`)
) ENGINE=InnoDB;

结论

如果 set unique_checks=0; DML操作的数据,如果主键和唯一索引在 innodb buffer pool 中,则可以通过内存中的数据进行唯一性检测,这也是我们在测试中通过都会遇到即使 set unique_checks=0 也不能插入重复数据;

但如果 DML 操作的数据如果不在 innodb buffer pool 中,则不会通过读取磁盘上的主键、唯一索引进行唯一检测,此时就和普通的二级索引一样,直接在 change buffer 完成数据写入,减少磁盘 IO。

需要注意的是 mysqldump 导出的 sql 文件头部会自动携带 set unique_checks=0 信息,包括开头我们提到的 mysqlshell importTable() 也会做同样的设置。

对此我提了个 bug:https://bugs.mysql.com/bug.php?id=106121

虽然文档很狡猾的写了:“Be certain that the data contains no duplicate keys.”,我们也知道了 set unique_checks=0 的原理就是通过 change buffer 加速唯一键的插入,这似乎就不能完全保证唯一性。如果这确实不算 bug,也希望官方能把文档写的更清楚明白些,而不是描述的暧昧不清。

解决方案

如果不能保证导入的数据唯一,在 mysqlshell importTable() 导入前关闭 change buffer:set global innodb_change_buffering=none;,如果是导入 sql 文件,则注意将 set unique_checks=0 注释。

Tableau Live连接与Extract连接核心区别与选型指南 在数据可视化工具中,连接方式直接决定报表的实时性、性能与安全性。Live连接通过实时查询源数据库获取最新数据,适用于低延迟、高交互场景,但受制于网络稳定性与源系统负载;Extract连接则将数据抽取为本地.hyper文件,利用列式存储与向量化计算实现高性能分析,适合大数据量、离线协作与复杂计算需求。二者本质差异在于数据流动路径:Live是‘管道直通’,Extract是‘本地重构’。理解这一底层机制,是掌握Tableau数据架构、优化仪表板性能及通过Desktop Specialist认证的关键前提。 阅读详情

相关推荐

SLAM系统评估实战:从ATE/RPE指标到LVI-SAM性能深度分析

在机器人定位与建图(SLAM)领域,系统性能评估是连接算法理论与工程应用的关键环节。其核心原理在于通过量化指标衡量状态估计的精度与鲁棒性,技术价值在于为自动驾驶、无人机等实际应用提供可靠的算法选型与部署依据。评估通常围绕绝对轨迹误差(ATE)和相对位姿误差(RPE)等核心指标展开,并依赖evo等工具在KAIST Urban这类多传感器基准数据集上进行验证。本文聚焦于LVI-SAM这一经典激光-视觉-惯性紧耦合框架,深入探讨其评估方法体系,涵盖从基础精度测试到多场景鲁棒性压力测试、模块化消融实验的全流程,旨在

weixin_34268310的博客 399

数据库添加唯一键报错,求大神帮忙看看啊!

使用dbeaver链接了GBase数据库,建表完成添加唯一键的时候报错信息如下,百度搜了一下说是语法错误,求大神帮忙看看,提提建议啊! 这个是自动生成的sql语句: ALTER TABLE sp_db:informix.sys_dictionary ADD CONSTRAINT sys_dictionary_pk PRIMARY KEY (id);

renzhijie910306的博客 4163

AI Orchestration实战:MuleSoft+LangChain企业级智能编排

AI Orchestration(AI编排)是企业将大语言模型(LLM)与现有IT系统深度集成的核心范式,其本质是解耦‘数据流动’与‘智能决策’——通过API集成层(如MuleSoft)保障数据主权、协议兼容与安全合规,再由AI框架层(如LangChain)专注语义理解、知识检索与推理生成。该模式突破了单点调用大模型的局限,支撑金融风控、医疗报告、制造运维等强监管、多系统、高确定性场景。本文基于真实交付项目,详解MuleSoft作为‘企业系统神经中枢’与LangChain作为‘AI逻辑引擎’的协同设计、安全

weixin_34268310的博客 414

mysql unique checks_mysql对于unique_checks的支持

日前在percona官方看到tokudb对与unique_checks的支持.就大概的看了下,也顺便测了下.unique_checks 这个参数是用于检查主键和唯一键是否重复的参数.tokudb与innodb对于这个参数有很大区别.开启(unique_checks=1 or on)时没什么区别..都是要需要检查唯一性.关闭(unique_checks=0 or off)时,就有区别了在uniq...

weixin_34502341的博客 943

用Git+Markdown构建可检索的开发者经验知识库

开发经验沉淀是软件工程中基础而关键的认知活动,其本质是将非结构化问题解决过程转化为可验证、可复用、可追溯的技术资产。传统Wiki或Notion知识库因静态性、高维护成本与版本失真问题,难以匹配真实开发节奏;而基于Git的‘代码即文档’范式,凭借原子提交、精准追溯、分支演进和零学习成本等特性,天然适配工程师工作流。结合结构化五段式模板(现象/根因/解法/验证/反思)与领域+关键词+日期的命名规范,可实现经验的机器可读、人眼速判与毫秒级检索。该方案特别适用于新人快速建立判断依据、中级工程师突破表达瓶颈,以及技术

dingguayi7025的博客 467

MySQL唯一索引出现重复值

碰巧看到GreatSQL社群推送的这篇文章《》,给我们介绍了MySQL数据库中和重复值相关的一个场景,值得学习借鉴。MySQL5.7.38主从架构,主节点唯一索引上(唯一索引不是主键)有重复值,全部从节点报1062,SQL线程状态异常,根据SQL线程报的binlog位置点,insert数据时有重复值,插入失败。

BUG指挥课堂 1276

如何解决数据库更改无法保存问题

 2012-09-11 10:59:54     我来说两句       作者:韩学敏收藏    我要投稿 如何解决数据库更改无法保存问题   1,如何解决数据库更改无法保存问题?   问题:对数据库中的表中内容进行修改,点击“保存”,提示:          例如:我对student数据库中的student_info表中的tele_Number 字段

yuanyuan_186的专栏 2712

EPLAN二次开发实战指南:从API接口到定制化界面

本文为EPLAN二次开发实战指南,详细介绍了从搭建C#开发环境、理解API接口到创建定制化插件的完整流程。通过实战案例,如批量修改设备属性和设计交互式界面,帮助电气工程师利用EPLAN二次开发实现工作流程自动化与深度定制,从而显著提升设计效率。

weixin_29246195的博客 802

故障案例:MySQL唯一索引有重复值,官方却说This is not a bug

问题原因故障解决方案复现步骤参考文献一、问题:MySQL5.7.38主从架构,主节点唯一索引上(唯一索引不是主键)有重复值,全部从节点报1062,SQL线程状态异常,根据SQL线程报的binlog位置点,insert 数据时有重复值,插入失败二、原因:unique_checks=0时导致,在bug(106121)列表中官方解释的原因:该参数关闭,维护唯一索引时,不会进行物理读,只会进行内存读,来确...

老叶茶馆 390

新手必看:瑞萨MCU选型时,QFP、QFN、BGA这些封装到底该怎么选?(附选型避坑指南)

本文详细解析了瑞萨MCU选型中QFP、QFN、BGA等封装的特点与适用场景,提供实战避坑指南。通过对比封装的空间占用、散热能力、焊接难度等核心维度,帮助工程师根据具体需求选择最合适的芯片封装,避免因选型不当导致的高成本与生产问题。

weixin_26965807的博客 421

INMP441麦克风避坑指南:为什么你的I2S录音总有杂音?(附示波器调试技巧)

本文针对INMP441麦克风与ESP32等MCU通过I2S接口连接时常见的录音杂音问题,提供了一套系统的硬件调试指南。文章深入剖析了电源纹波、信号完整性、接地环路及时钟抖动四大噪声根源,并详细讲解了如何使用示波器进行逐层排查,给出了增加LC滤波、串联阻尼电阻、优化布局布线等切实可行的解决方案,帮助开发者从根本上提升音频质量。

k0l1m2n3o的博客 1021

从家电到新能源车:压敏电阻在5个真实电路中的选型实战与失效案例分析

本文深入探讨压敏电阻在从家电到新能源车等5个真实电路中的选型实战与失效案例分析。通过具体场景如家用电器AC220V保护、车载DC-DC转换器、通信设备防雷设计等,揭示选型核心参数与常见误区,帮助工程师提升电路保护可靠性。重点分析新能源车应用中的特殊浪涌防护需求与优化方案。

weixin_30615767的博客 463

YOLO26训练自己的数据集,从代码下载到实例测试 (含YOLO26网络结构图)

在Windows10上配置CUDA环境教程2026年1月14日,YOLO26是最新发布的计算机视觉模型。支持多种任务,包括目标检测、实例分割、图像分类、姿态估计、有向目标检测以及物体跟踪等。以上就是YOLO26训练自己数据集的全部过程啦,欢迎大家在评论区交流~

Limiiiing的博客 6463

从改变世界到写好代码:开发者如何通过解决实际问题创造价值

在软件开发领域,工程实践的核心在于解决实际问题并创造价值。这要求开发者从技术驱动转向问题驱动,深入理解业务需求,而非仅仅追求新技术。真正的价值体现在稳定性、可维护性和协作效率上,这些是构建可靠系统的基石。通过深度优先学习,开发者可以成为特定领域的专家,例如深入理解HTTP协议、Spring框架机制或数据库原理,从而提升解决复杂问题的能力。同时,在现实工程约束下,如时间、资源和历史债务,开发者需要权衡并找到最合适的解决方案,而非理想化的最优解。这种务实的态度,结合对技术债务的管理和持续重构,是长期职业生涯中保

weixin_30412167的博客 425

11、AUTOSAR配置全解析:从运行实体到通信接口

本博客详细解析了在Simulink中使用AUTOSAR字典配置AUTOSAR运行实体(Runnables)、运行实体间变量(IRVs)、参数以及多种通信接口的过程。内容涵盖运行实体及其事件的配置、IRV和参数的属性设置,以及发送-接收接口、模式切换接口、客户端-服务器接口、非易失性数据接口、参数接口和触发接口的详细配置方法。通过这些步骤,开发者可以高效地构建符合AUTOSAR标准的汽车电子软件系统。

e3f4g5的博客 123

第十二天:Python字典(Dict)详解

字典(Dictionary)是Python中最强大的数据类型之一,它是一种可变的、无序的键值对(key-value)集合。字典中的元素是通过键(key)来存取的,而不是通过偏移量(如列表中的索引)。 字典的核心特性包括: 键值对结构:每个元素由一个键和一个值组成,中间用冒号(:)分隔 无序性:字典中的元素没有固定的顺序(Python 3.7+版本中字典会保持插入顺序,但不应依赖此特性进行顺序操作) 可变性:可以动态地添加、修改或删除键值对 键的唯一性:字典中的键必须是唯一的,如果重复,后面的键值对会覆盖

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1677

简历中的专业技能

封装检索实体类{keyword,category1id…} ElasticsearchClient 的 search() 方法实现检索.接口中save() deleteById() 方法,实现专辑的上架,下架,还能实现自动创建索引库!做日志收集,便于后续查询问题,利用kibana可视化视图,编写dsl语句,提高开发效率。企业级搜索引擎实现全文检索功能,避免数据库索引失效的问题!多线程异步编排快速查询数据,实现上架数据的封装。实现自动补全功能,增强用户体验度。

410的博客 1228

用AI科研绘图全新升级!借助谷歌新发布模型Nano Banana pro实测一键绘制机制图与技术路线图,直接告别文字乱码与低画质

之前有同仁反馈,用Nano Banana画科研插图的时候,要么文字部分容易乱码,要么抓不住关键内容,画出来的效果反复修改后,还是达不到理想的效果。终于在Gemini 3发布没几天,万众期待的大香蕉模型也成功升级到了Pro版本,官方名称叫“Gemini 3 Pro Image”,实际上也就是我们说的Nano Banana 2。这次的Nano Banana Pro模型,不仅可以直出4K高清图,还能自定义比例,推理能力和中文文字的稳定性也得到了提升。

智能AI让学术科研更容易 1887

机器学习生产化:从模型上线到系统接管的21条铁律

机器学习模型部署不是算法落地的终点,而是系统工程挑战的起点。当模型离开Jupyter笔记本,真正面对实时流量、分布式依赖与业务SLA时,特征管道断裂、同步假设崩塌、重试污染、Fallback失管等系统性问题远比模型失效更常见。本文聚焦ML in Production核心命题——如何让模型在金融级高并发(如每秒3800笔交易)、毫秒级延迟(P99≤120ms)与强合规要求下持续可靠决策。内容涵盖特征分级加载、幂等决策ID、三级优雅退化、双基准漂移检测及决策健康度监控等实战机制,直击‘模型准确但业务不可用’这一

weixin_30263073的博客 330

[SC]SystemC在CPU/GPU验证中的应用(六)

本文提供了一个SystemC学习路线图,包含50个由浅入深的编程实例,涵盖从基础模块到复杂SoC建模的全过程。示例包括:基础模块(时钟、计数器)、通道(FIFO、握手)、TLM2.0接口、总线模型(AXI-Lite)、CPU/GPU内核实现、功耗分析、断言验证等。重点展示了SystemC在硬件验证中的关键应用:VCD波形生成、UVM-SystemC框架、Verilog DPI协同仿真、Python集成、NoC路由器和完整SoC建模(CPU+Cache+DRAM+互连)。每个示例提供完整代码和详细注释,建议分

元直的博客 1489

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

AI时代程序员生存指南:识别代码洼地与决策高地

在人工智能加速渗透软件开发的背景下,'程序员是否会被取代'本质是工程能力坐标的重构问题。AI已能稳定生成标准化CRUD、单元测试、日志埋点等模式化代码,但其核心局限在于缺乏业务上下文理解、多目标权衡和模糊信息处理能力。真正不可替代的是架构权衡决策、需求模糊澄清、故障根因定位等高阶工程实践。技术价值不在于替代人力,而在于将人类从重复劳动中解放,聚焦于定义约束规则、设计提示词边界、构建LLM输出校验流水线等AI治理工作。本文基于真实项目日志与事故复盘,系统梳理AI已接管的六大代码洼地与人类必须坚守的三大决策高地

angzhan5306的博客 322

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

GPT-5技术演进三支柱:推理引擎、知识编排与对齐控制

大语言模型的演进已从单一模型升级转向系统级协同进化。理解GPT-5,需回归其底层技术本质:可验证的推理引擎将思维链转化为可中断、可回溯的状态机;动态知识编排层以图神经网络替代传统RAG,实现语义路径导航而非关键词匹配;实时对齐控制层则通过响应头中的X-Alignment-Trace-ID构建毫秒级反馈闭环。这三大能力共同定义了新一代工业级大模型的技术价值——不是更强,而是更可靠、更可审计、更易集成。在法律合同分析、医疗问答、制造业故障归因等高可靠性场景中,其分层注意力、跨模态对比学习与动态稀疏化等关键技术,

weixin_30443813的博客 364

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

老赵点滴:十五年.NET技术博客的沉淀逻辑与人格化写作

技术博客的本质是知识沉淀与认知传递,而非信息搬运或流量收割。在.NET生态快速迭代的背景下,深度理解C#语言哲学、ASP.NET演化史和运行时底层机制,远比追逐语法糖更具长期价值。真正的技术影响力源于对问题本质的持续追问——比如async/await状态机如何影响高并发稳定性,或HttpClient生命周期为何引发连接耗尽。这类穿透API层、直抵JIT编译与内存模型的分析,构建了可迁移的工程判断力。它服务于从初学者到金融级架构师的全谱系开发者,核心不在‘教你怎么写’,而在‘帮你建立技术决策的参照系’。老赵点

weixin_40192258的博客 480

多维聚合实战心法:从维度建模到业务语义落地

多维聚合是现代数据分析的核心能力,本质是将业务概念映射为可计算、可钻取、可解释的数据空间结构。它超越传统GROUP BY的简单分组逻辑,依托维度层级、成员属性与度量契约三大原理,解决稀疏性、动态性、时态性等高阶挑战。其技术价值在于统一口径、加速分析、支撑实时决策,广泛应用于电商销售分析、SaaS客户留存、制造业设备预测等场景。本文聚焦多维聚合的工程化落地,涵盖维度建模、派生度量封装、物化聚合与维度权限控制等关键实践,助力数据团队实现从业务语言到数据语言的精准翻译。

weixin_30654419的博客 361

多维聚合:从GROUP BY到数据立方体的空间建模

多维聚合是现代数据分析的核心能力,本质是将扁平表格升维为由维度与度量构成的数据立方体(OLAP Cube)。其原理在于通过维度层级(如年→季→月)、代理键建模和语义化度量(SUM/COUNT_DISTINCT/Bitmap)构建可上卷、切片、钻取的结构化空间。技术价值体现在解决传统GROUP BY的结构性盲区——如缺失组合补零、空值语义歧义、高基数性能瓶颈。典型应用场景覆盖BI看板动态下钻、实时数仓宽表构建、电商大促多维归因及金融风控交叉分析。本文聚焦Data Manipulation in Multi-D

hqmln的博客 129

基于大语言模型与AI Agent构建智能系统故障诊断与修复平台

系统故障诊断与修复是计算机运维领域的核心基础问题,传统基于规则引擎的工具在面对复杂多变的软硬件环境时往往力不从心。随着大语言模型(LLM)和AI Agent技术的成熟,我们得以从原理层面革新这一领域。大语言模型凭借其强大的自然语言理解和海量知识关联能力,能够精准解析用户用自然语言或图片描述的非结构化故障现象;而AI Agent框架则能将模型的推理转化为安全、可执行的原子操作序列,实现从“思考”到“行动”的闭环。这一技术组合的工程价值在于,它能将原本需要专业知识的系统排障过程,转化为高度自动化、交互式的智能服

weixin_30514745的博客 383
上一篇: 第49问:如何快速判断 IO 延迟对 MySQL 性能的影响
下一篇: 技术分享 | MySQL 并行 DDL
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值