软件熵减与匠艺实践:用可验证精度对抗系统混沌

熵码匠艺:用软件匠艺对抗系统熵增的工程实践 在软件工程中,‘熵’是描述系统无序度的核心概念,而‘熵增’则揭示了代码腐化、架构失稳、协作低效等顽疾的本质根源。本文从热力学熵的原理出发,阐释为何所有软件系统天然趋向混乱,并指出真正的技术价值不在于堆砌新工具,而在于建立可推演的命名体系、防御式契约编程、可观测性内建和日常化重构这四大匠艺支柱。这些实践已在电商、金融等高并发场景中验证:显著降低状态漂移率、压缩故障定位时间、提升需求交付确定性。关键词涵盖软件匠艺、系统熵增、契约编程、可观测性、重构习惯。 阅读详情

1. 项目概述:当“熵”撞上“匠艺”,一场软件开发的底层范式重校

“熵码匠艺”——这个名字刚看到时,我手边正调试着一个三天没合眼的微服务链路追踪问题,日志里满屏飘着无法复现的时序错乱和状态漂移。同事随口念出这四个字,我下意识在白板上画了个混乱的散点图,又划掉,补上一把刻刀、一卷游标卡尺,最后在角落写下一个大大的“ΔS > 0”。那一刻突然就通了:我们每天写的不是代码,是在对抗系统自发滑向混沌的天然趋势;所谓“匠艺”,从来不是雕花式的炫技,而是用可验证的约束、可追溯的决策、可度量的精度,把熵减落实到每一行函数签名、每一次接口契约、每一份测试覆盖里。这不是新概念包装,而是把被敏捷口号稀释十年的“专业主义”重新夯进地基。它直指当前所有团队都踩过的坑:为什么CI流水线越跑越慢却没人敢动?为什么重构总在临界点崩盘?为什么技术债像霉斑一样在角落反复滋生?答案就藏在“熵”这个物理量里——它不讲情怀,只认事实:没有持续注入结构化能量,任何软件系统终将退化为不可维护的噪声。而“匠艺”就是那套反熵操作手册:不是靠加班堆人力,而是靠设计留余量;不是靠文档讲故事,而是靠代码自解释;不是靠会议定方向,而是靠小步验证建共识。适合谁?适合所有被“快速交付”压得喘不过气却隐隐觉得哪里不对的开发者;适合那些在架构评审会上频频点头、散会后独自删掉半数设计的TL;更适合刚毕业发现教科书和生产环境之间隔着一片马里亚纳海沟的新人——因为这里不教你“怎么用Spring Boot”,而是告诉你“为什么这个Bean必须是无状态的”,以及“当它意外持有状态时,你的监控告警该在哪个毫秒级阈值触发”。

2. 核心理念解构:熵减不是目标,是每日必做的呼吸动作

2.1 熵在软件系统中的具象化表达:从热力学公式到Git提交记录

很多人把“熵”当成玄学比喻,但在我经手的37个中大型系统里,它有清晰可测的刻度。热力学第二定律 ΔS ≥ 0 在软件世界对应三个铁律:

  • 状态扩散率 :一个本该只读的Service类,其方法调用链最终触达多少个外部API、数据库表、缓存Key?我用静态分析工具扫描过某电商订单服务,发现 getOrderDetail() 方法隐式依赖17个下游模块,其中5个存在循环依赖。这种状态耦合度直接换算成熵值——每个未声明的依赖都是系统向混沌滑落的一厘米。

  • 决策模糊带 :当团队对“这个字段要不要加索引”争论超过15分钟,说明设计决策已进入高熵区。我在金融风控系统里见过最典型的案例:为应对监管检查,团队仓促上线“用户风险等级”字段,但没人定义清楚“等级变更”是否触发实时通知、历史等级如何归档、等级计算逻辑是否允许前端透传。三个月后,这个字段在6个服务里演化出7种实现,数据一致性校验脚本长达2000行且仍漏报率37%。这里的熵,是需求模糊度乘以实现发散度。

  • 修复路径指数爆炸 :当一个线上Bug的最小复现步骤从3步变成12步(比如需特定时间窗口+特定用户行为序列+特定缓存状态),修复成本就不再是线性增长。我统计过某SaaS平台P0级故障平均修复时长:熵值低于阈值的模块平均47分钟解决,高于阈值的模块平均耗时19小时——因为工程师要先花11小时重建认知模型,才能开始编码。

提示:别用“感觉混乱”来判断熵值。用这三个可量化指标:① 单个核心函数的跨模块调用深度(>3即预警);② 关键业务字段的实现版本数(>2即危险);③ P0故障首次定位耗时(>2小时即需熵减干预)。

2.2 匠艺的实操定义:拒绝“差不多”,建立可验证的精度锚点

“匠艺”常被误解为“写更漂亮的代码”,但真正的分水岭在于 精度控制能力 。木匠不用“大概齐”描述榫卯间隙,程序员也不该用“应该不会并发”描述锁策略。我在支付网关重构中设定了三类精度锚点:

  • 契约精度 :REST API的OpenAPI 3.0规范必须包含 example 且与实际响应100%匹配。曾发现某银行对接接口的 amount 字段文档写“整数”,实测返回 "123.00" 字符串。我们强制要求所有数值字段标注 format: int32 或 format: float ,并用Swagger Codegen生成客户端时自动校验。当生成的Java类出现 BigDecimal 而非 Long ,立刻触发设计评审——因为精度损失在这里是肉眼可见的熵增。

  • 时序精度 :分布式事务中,我坚持用 @Transactional(timeout = 3) 而非默认值。理由很实在:3秒是用户感知卡顿的阈值,也是数据库死锁检测的黄金窗口。某次促销活动,因超时设置为30秒,导致库存扣减失败后重试10次,最终引发超卖。后来我们把所有事务超时按业务场景分级:查询类≤800ms,写入类≤3s,异步补偿类≤30s,并在APM中用不同颜色标记超时率。

  • 演进精度 :拒绝“未来可能需要”的抽象。在物流轨迹服务中,团队曾设计“通用轨迹引擎”,支持航空/海运/陆运三种模式。实际运行半年后,92%的代码只服务于陆运场景,另两种模式从未接入。我们砍掉引擎,改为 TruckTrajectoryService 直连GPS设备,同时用策略模式预留扩展点。关键区别在于:策略接口的每个方法都有明确的输入输出契约(如 calculateETA(geoPoint, speed) → Duration ),而非空泛的 process() 。

注意:匠艺的精度锚点必须可自动化验证。我们用SonarQube自定义规则检查:① 所有 @Transactional 注解必须含 timeout 参数;② OpenAPI的 example 字段必须通过JSON Schema校验;③ 策略接口方法名必须含动词+名词结构(如 calculateETA 而非 handle )。这些规则每天凌晨2点自动执行,失败则阻断发布。

2.3 熵减与匠艺的共生关系:为什么单抓一端必然失败

见过太多团队走极端:要么狂推“匠艺”搞过度设计,把登录接口做成可插拔认证框架,结果上线后发现80%的认证逻辑永远用不上;要么只盯“熵减”做暴力降级,把微服务硬拆成单体,美其名曰“降低复杂度”。这两种都违背了核心规律——熵减是目的,匠艺是手段,二者必须形成闭环。

我设计过一个熵减-匠艺反馈环:
监测层 :用eBPF采集所有HTTP请求的P99延迟、错误率、跨服务跳数
诊断层 :当某个接口跨服务跳数>5且P99延迟>1.2s,自动触发“熵值扫描”
干预层 :扫描结果生成三类工单:

  • 红色(高熵):立即冻结该接口所有新功能,启动契约重构(匠艺动作)
  • 黄色(中熵):要求下次迭代必须补充单元测试覆盖率至85%+(匠艺动作)
  • 绿色(低熵):奖励团队,但要求提交“熵减经验卡”(记录本次如何避免熵增)

这个闭环运行14个月后,系统平均跨服务跳数从6.2降至2.8,P99延迟下降41%。最关键的是,团队开始主动在PR描述里写:“本次修改将熵值降低0.3(依据:减少1个隐式依赖,统一2处日期格式)”。当熵成为可讨论的客观量,匠艺就不再是道德说教,而是可执行的技术决策。

3. 实操体系构建:从代码提交到架构演进的七层

基于忆阻器超混沌系统的信息安全新方案:原理、实现与应用 在信息安全领域,伪随机数生成器(PRNG)是构建加密算法、保障通信安全的核心基础组件,其随机性质量直接决定了系统的安全强度。传统基于数学算法的PRNG在面临量子计算等新兴威胁时,其安全边界受到挑战。忆阻器作为一种具有记忆电阻特性的新型纳米器件,其非线性动力学行为为构建高复杂度物理熵源提供了可能。将忆阻器嵌入混沌电路,可以构造出拥有多个正李雅普诺夫指数的超混沌系统,其输出序列在初值敏感性、随机性和不可预测性上均达到新的高度,从而为生成高质量的密码学随机序列提供了物理基础。这种基于物理原理的随机源,尤其适用于对 阅读详情

相关推荐

CoffeeDeveloper:程序员的咖啡身份系统与效能实践

在软件开发领域,'CoffeeDeveloper'已超越字面意义,成为一种融合生理节律、认知科学与工程文化的复合型身份标识。其核心原理在于咖啡因代谢周期与编程专注窗口(90–120分钟)的生物共振,以及‘失败可降级’的容错隐喻与DevOps理念高度同构。该符号具备显著的技术价值:降低远程协作熵值、锚定团队认知节奏、量化个体开发效能。典型应用场景包括技术面试中的行为证据链构建、分布式团队的虚拟咖啡角协议、开源社区的非代码贡献认证体系。本文深入解析这一现象背后的人因工程逻辑与可落地的数字-物理协同实践。

xiang_fu的博客 433

AI工程化五大断点:交付封装、异构推理、资源诊断、混沌防护与漂移熔断

人工智能工程不是算法调优,而是模型在真实物理世界中可靠运行的系统性保障。其核心在于解决从实验室到产线的关键断点:如何将模型转化为可验证、可审计、可降级的工业级交付物;如何在GPU、ARM、国产芯片等异构硬件上实现确定性推理性能;如何穿透CPU缓存、NUMA内存、GPU驱动等多层争用定位根因;如何通过混沌工程主动暴露API在延迟、错误、资源剥夺下的韧性缺陷;以及如何实时感知输入数据分布偏移(PSI)与预测行为漂移并自动熔断。这些能力共同构成AI系统MTTR(平均恢复时间)压缩的技术底座,支撑金融风控、工业检测

weixin_33309048的博客 570

生产级机器学习系统:从模型部署到持续治理的四大支柱

机器学习系统在生产环境中的稳定运行,远不止于模型准确率,而是一个融合数据流、服务链路与业务规则的动态工程体系。其核心在于理解模型并非孤立组件,而是嵌入复杂IT与业务毛细血管中的活性单元;原理上需兼顾可观测性、弹性降级、可验证性与可治理性四大支柱,以应对特征漂移、契约断裂、流量错配等高频集成故障;技术价值体现在将离线指标(如AUC)转化为可审计的运营指标(如P99延迟、决策一致性率),支撑金融级SLA与合规要求;典型应用场景包括实时风控、信贷审批与反欺诈系统,尤其在高并发、低延迟、强监管约束下,必须通过影子流

weixin_30652491的博客 379

基于单片机的五维超混沌安全通信

本文提出一种基于单片机的五维超混沌安全通信系统,通过构建具有高复杂度的五维超混沌系统,分析其李雅普诺夫指数与动态特性,并选取复杂度最高的Y维度用于加密。设计硬件电路并完成方波信号的加密解密仿真,结合精度调整与0-1检验验证系统混沌性,实现了低成本、高安全性的通信方案。

2w3e4r5t6y的博客 401

从CAD到Web:高效转换STEP/IGES模型为GLB格式的实践指南

本文详细介绍了如何将工业设计中的STEP/IGES模型高效转换为Web友好的GLB格式。通过PythonOCC和gltf-pipeline等工具链,实现从CAD到Web的无缝转换,大幅提升模型加载速度和展示效果。文章包含实战案例、优化技巧和常见问题解决方案,帮助开发者快速掌握3D模型转换技术。

weixin_29072299的博客 507

Diffusion、VAE与GAN:三大生成模型的原理对比与应用场景解析

本文深入解析了Diffusion、VAE与GAN三大生成模型的核心原理与特性。Diffusion模型通过逆向去噪过程实现高质量图像生成,但计算成本较高;VAE擅长学习概率潜空间,训练稳定但图像偏模糊;GAN通过对抗训练生成锐利图像,但存在模式崩溃风险。文章结合实战场景,为图像生成、修复、超分辨率等任务提供了清晰的模型选择指南。

weixin_29063979的博客 344

【具身算法】VLA算法-Diffusion Policy

《扩散策略:多模态机器人控制的新方法》摘要 本文提出了一种基于扩散模型的机器人控制策略(DiffusionPolicy),用于解决视觉运动控制中的多模态行为、高维动作空间和训练稳定性问题。该方法利用去噪扩散概率模型(DDPM)生成动作序列,通过迭代优化处理复杂动作分布,显著提升了性能。实验表明,在15项机器人操作任务中,扩散策略平均性能提升46.9%,有效解决了传统显式/隐式策略的局限性。其核心优势在于:1)优雅建模多模态动作分布;2)适应高维动作空间;3)训练过程稳定。未来工作将探索与强化学习的结合及计算

puzhinan7781的博客 1391

手机摄影新宠:In-line Hardware EIS如何让你的4K视频稳如鸡头(附实测对比)

本文深入解析了手机摄影中的In-line Hardware EIS(硬件级行内电子图像稳定)技术。通过对比传统软件EIS,阐述了其通过硬件管道实时处理实现极低延迟、减少画面裁切和有效抑制果冻效应的核心优势,并结合4K视频的日夜间实测,展示了该技术如何让手持拍摄的视频“稳如鸡头”,显著提升创作体验与成片质量。

tree的博客 994

瑞芯微RK3576开发板实战:6TOPS NPU如何加速你的AIoT项目(附性能测试)

本文以瑞芯微RK3576开发板为核心,深入探讨其6TOPS NPU在AIoT项目中的实战应用。通过详细的性能测试对比,展示了NPU如何将AI模型推理速度提升15倍以上,并大幅降低CPU负载。文章涵盖从环境搭建、模型转换优化到多屏异显与系统级调优的全流程,为开发者提供了将硬件算力转化为实际项目加速效果的完整指南。

oauth7security的博客 820

uniapp(全端兼容) - 最新详细实现接入腾讯视频播放器功能插件,uniapp全平台端(小程序/H5网页/App/nvu)调用引入并使用腾讯视频播放组件完整全流程(详细示例源码,一键复制开箱即用)

uniapp腾讯视频,uniapp微信小程序腾讯视频,uniapp小程序接入腾讯视频详细示例教程源码,uniapp怎么在微信小程序平台使用腾讯视频插件,在uni-app中使用腾讯视频插件播放视频,uniapp调用腾讯视频,uniapp引入腾讯视频插件,uniapp小程序中引入腾讯视频无法播放,uniapp微信小程序平台引入腾讯视频播放不了黑屏,在uniapp开发的微信小程序中使用腾讯视频,uniapp如何引入腾讯视频插件播放视频,uni-app小程序平台引入腾讯视频插件播放腾讯视频,uniapp 小程序接入

✅ 精选推荐文章 1万+

利用 AI 自动生成 BDD(行为驱动开发)格式的 Gherkin 测试用例

文章摘要 当前BDD测试领域正经历AI驱动的变革浪潮。传统Gherkin用例编写面临四大痛点:语法负担重、场景发现成本高、一致性差和维护困难。2025-2026年,AI生成Gherkin的工具生态快速成熟,主要分为五类:测试管理平台内置AI(如TestRail 10.2)、Jira插件(如AssertThat BDD)、独立AI平台(如PrimeCompass)、CLI工具和研究原型。其中,TestRail实现生成-执行闭环,AssertThat采用多阶段Agent工作流提升质量,PrimeCompass则

ZXSXJ的博客 206

YOLO11改进-注意力-引入自调制特征聚合模块SMFA

SMFA(自调制特征聚合模块): SMFA模块用于协同建模局部和非局部信息,它分为两个分支:一个是EASA(Efficient Approximation of Self-Attention,简化的自注意力分支),用于捕获非局部信息;另一个是LDE(Local Detail Estimation,局部细节估计分支),用于捕获局部细节。EASA通过对输入特征进行下采样,然后利用全局特征的方差进行调制,再与原始特征进行聚合,提取非局部结构信息。LDE分支则通过卷积操作提取输入特征中的高频局部信息。

qq_64693987的博客 2208

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

深度学习工具包 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")

上一篇: SQL Server索引优化:破除‘建了就快’的性能幻觉
下一篇: 企业级技术服务体系:开发、架构、管理、培训与解决方案五维一体
JACKASDFGHJKL
博客等级 码龄18年 13粉丝 620原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值