代码洁癖救星!Astyle这20个隐藏参数让你的C++代码瞬间专业:指针对齐/预处理缩进/多行注释优化

Keil代码美化全攻略:Astyle配置详解与JetBrains Mono字体完美搭配方案 本文详细介绍了如何在Keil中配置Astyle代码格式化工具与JetBrains Mono字体,提升嵌入式开发中的代码美学与工程规范。从Astyle参数精调到字体视觉优化,提供完整的配置方案和团队协作技巧,帮助开发者打造高效统一的开发环境。 阅读详情

代码洁癖救星!Astyle这20个隐藏参数让你的C++代码瞬间专业:指针对齐/预处理缩进/多行注释优化

每次Review团队代码,看到那些风格各异、指针符号满天飞、预处理指令缩进混乱的源文件,是不是感觉血压都上来了?对于追求代码可读性与一致性的中高级开发者、开源项目维护者或技术Leader而言,一套统一且专业的代码格式,其价值不亚于一份清晰的设计文档。它直接关系到团队协作效率、代码维护成本,甚至新成员的融入速度。

市面上代码格式化工具不少,但Artistic Style (Astyle) 以其对C/C++家族语言(包括C++/CLI, Objective‑C, C#, Java)的深度支持、高度可配置性以及命令行驱动的自动化能力,成为了许多严肃项目的“基础设施”。然而,绝大多数人仅仅停留在使用 --style=allman 或 --indent=spaces=4 这类基础选项,这就像只用了瑞士军刀上的开瓶器,却忽略了它内置的镊子、剪刀和小刀。Astyle真正强大的地方,在于那些鲜为人知却极其实用的“隐藏”参数,它们能精细化地处理指针对齐、预处理指令、多行注释、条件语句缩进等“顽固”的格式问题,让代码从“能看”跃升为“赏心悦目”。

本文将带你深入Astyle的参数库,聚焦于那些能显著提升代码专业度的20个关键参数。我们不会简单罗列手册,而是通过格式化前后的代码对比,直观展示每个参数带来的改变,并探讨它们在不同场景下的组合策略。无论你是想为个人项目建立一套黄金标准,还是为团队制定一份无可挑剔的编码规范,这些参数都将成为你的得力助手。

1. 指针与引用对齐的艺术:告别风格之争

指针和引用的书写风格(char* ptr vs char *ptr vs char * ptr)是C/C++社区经久不衰的“圣战”话题之一。与其在团队内争论不休,不如用Astyle强制执行一种清晰、一致的对齐规则。这不仅关乎美观,更关乎代码扫描时的认知负担。

1.1 精准控制指针与引用符号的位置

Astyle提供了两组独立的参数来控制指针(*)和引用(&, ^)操作符的对齐方式,这让你可以精细地分别处理它们。

  • --align-pointer=type (-k1): 将 * 或 & 紧靠类型。这是许多强调“指针是类型一部分”的开发者所青睐的风格。
  • --align-pointer=name (-k3): 将 * 或 & 紧靠变量名。这种风格强调“指针是一个变量”,操作符与变量名绑定。
  • --align-pointer=middle (-k2): 在类型和名称之间放置空格,使操作符居中。这种风格较为少见,但提供了清晰的视觉分隔。
  • --align-reference=type (-W1), --align-reference=name (-W3), --align-reference=middle (-W2): 专门用于控制引用符号 & 的对齐,与 --align-pointer 选项独立。这在C++中尤其有用,你可以让指针靠类型,而引用靠名字,或者统一风格。

注意:--align-reference 选项仅对C/C++、C++/CLI和C#文件中的引用符号生效。如果你希望指针和引用采用相同的对齐规则,直接使用 --align-pointer 即可,它会同时处理两者。

让我们看一个混合了指针和引用的例子,使用 --align-pointer=name --align-reference=type 组合:

格式化前:

char* pBuffer;
const std::string & name;
int* values;
MyClass& instance;

格式化后:

char *pBuffer;
const std::string& name;
int *values;
MyClass& instance;

可以看到,指针 * 被拉到了变量名旁边 (*pBuffer, *values),而引用 & 则紧贴类型 (string&, My

Keil MDK主题美化与代码格式化:AStyle集成全攻略 在嵌入式开发中,Keil MDK 是许多固件工程师的日常工具,但其默认的编辑器体验和代码风格管理常让人困扰。通过理解 uVision5 的主题配置原理,核心在于 global.prop 与 uv4.ini 两个文件的分工:前者控制语法高亮与配色,后者保存字体和界面状态。掌握 BGR 颜色值格式后,即可安全替换默认白底为暗色主题。代码格式化方面,AStyle 作为跨平台的开源工具,可自行编译出独立 exe,并通过 MDK 自定义工具菜单实现一键格式化。合理搭配参数,例如 allman 风格、4 空格缩进以及中 阅读详情

相关推荐

工资条批量生成打印脱敏工具

这是一款工资条批量生成器,把一张 Excel 工资总表一键变成可打印、可分开发放的工资条,省去排版和逐人拆分的功夫。自带中文图形界面,双击启动.bat 即用。交付物包含主程序脚本、启动批处理、README 说明文档(md、html、pdf 三种版本)、一份示例工资总表和界面截图,解压即用。 功能上覆盖工资条发放的两种常见场景:打印版总表模式,每个员工一块三行(表头、本人数据、空行),打印后裁开就能发;每人独立文件模式,生成对应姓名的单个 xlsx,逐个发给本人。工资总表自动识别姓名列,列多列少都能适配;身份证号、银行卡号等敏感列可以勾选打星,保留前 3 位和后 4 位,中间用星号代替,发出去的工资条不再带着完整卡号。 几个实用细节:空姓名的行会被单独挑出来记在日志里,不会混进员工文件也不会中断生成;原始工资总表全程只读,所有结果输出到同级独立文件夹,再跑一次自动另起文件夹,绝不覆盖上次结果;依赖只需要 openpyxl 一个库,装完离线可用;列宽和表头格式都已排好,打开就能打印。 适合每月要把一张工资总表变成能打印、能分别发放的工资条,还要处理身份证、银行卡敏感信息的财务和人事人员。使用时双击启动.bat,选择工资总表,选好输出模式,勾选需要脱敏的列,点开始生成工资条,跑完点打开输出文件夹就能看到结果。

风电场载荷评估与有功功率优化__2024 年中国研究生数学建模竞赛 A 题项目Matlab代码.rar

风电场载荷评估与有功功率优化__2024 年中国研究生数学建模竞赛 A 题项目Matlab代码.rar

科技中介服务机构如何提升服务的专业性与用户粘性?.docx

科技中介服务机构如何提升服务的专业性与用户粘性?

软件设计师全套备考资料

软件设计师全套备考资料

科技中介服务机构如何提升服务效率与专业性?.docx

科技中介服务机构如何提升服务效率与专业性?

高校技术转移办公室人员在对接企业技术需求时,如何降低匹配误差?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

RBF模糊神经网络自适应PID控制、传统PID控制对比仿真(m函数实现)

内容概要:本文档聚焦于RBF模糊神经网络自适应PID控制与传统PID控制的对比仿真研究,采用MATLAB m函数实现两种控制算法的编程与性能对比,重点展现RBF神经网络在动态调整PID参数方面的自适应能力与智能化优势。通过系统仿真实验,全面评估了两种控制策略在响应速度、稳态精度、超调量及抗干扰能力等方面的差异,验证了RBF模糊神经网络自适应PID控制在复杂非线性系统中 superior 的控制性能。文档同时列举了多种延伸案例,如PSO优化RBF、BP-PID、模糊PID等先进控制算法的对比分析,并配套提供了完整的仿真程序、说明文档及参考文献,便于读者复现与拓展研究。; 适合人群:具备自动控制原理基础知识和MATLAB/Simulink仿真能力的高校研究生、科研人员以及从事控制工程、电气自动化等相关领域的技术人员。; 使用场景及目标:①深入理解智能控制算法(如RBF神经网络、模糊控制)与经典PID控制在结构与性能上的本质区别;②为高精度、强鲁棒性控制系统的设计提供算法选型依据和技术验证手段;③支撑科研论文撰写、课程项目开发或实际工程中控制策略的仿真验证与优化分析; 阅读建议:建议结合m函数代码与可能的Simulink模型对照学习,重点关注RBF网络的结构设计、参数自适应律的实现机制以及不同工况下的性能指标对比曲线,同时可参考文档中列出的其他优化算法案例进行横向比较与深入探究。

产业园区运营负责人如何实现创新资源的精准匹配与高效对接?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

含中间直流的三相电力电子变压器PET仿真模型(Simulink仿真实现)

内容概要:本文详细介绍了一种含中间直流环节的三相电力电子变压器(PET)的Simulink仿真模型,基于MATLAB/Simulink平台构建,完整呈现PET系统的拓扑结构与工作原理。该模型涵盖前级三相整流、中间直流电压环节及后级逆变三大核心部分,实现了电能的高效变换、电气隔离与电压等级灵活调节。系统支持对功率双向流动、电压稳定控制、谐波抑制及动态响应特性的仿真分析,具备良好的模块化设计与可扩展性,便于集成先进控制策略如PI控制、前馈补偿、SVPWM调制等,适用于新型电力电子系统的研究与验证。; 适合人群:电气工程、自动化、电力电子与新能源系统等相关专业的高校研究生与本科生,以及从事智能电网、电力变换技术、微电网控制等领域研究的科研人员和工程技术人员。; 使用场景及目标:①用于电力电子变压器教学课程中的原理讲解与实验仿真;②支撑科研项目中对PET拓扑结构、控制算法(如电压外环电流内环双闭环控制)的设计与验证;③为新能源并网、直流配电、电能质量治理等实际工程应用提供仿真平台与技术参考; 阅读建议:建议结合电力电子技术、现代控制理论与电力系统分析等基础知识进行学习,重点关注系统各模块间的能量交互机制与控制逻辑实现,建议动手调整仿真参数并观察动态响应,以深化对PET运行特性的理解。

政府科技管理者在推动科技成果转化时,如何确保政策落实与资源精准匹配?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

科技中介服务机构如何通过平台提升服务的专业性与便捷性?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

高校技术转移办公室人员如何高效完成科技成果筛查与推介?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

完美复现基于自适应虚拟谐波阬的光储VSG并网电流谐波抑制模型(Simulink仿真实现)

内容概要:本文介绍了基于自适应虚拟谐波阬的光储VSG并网电流谐波抑制模型,通过Simulink仿真实现,旨在解决光储系统并网过程中存在的电流谐波问题。该模型融合虚拟同步发电机(VSG)技术与自适应控制策略,构建了可动态调节谐波阻抗的虚拟谐波阬结构,显著增强了系统对电网谐波扰动的抑制能力。文中系统阐述了整体系统架构设计、控制算法理论基础、关键参数整定方法及Simulink仿真模型的搭建流程,并通过多工况对比仿真验证了所提方法在不同运行条件下的有效性、鲁棒性与动态响应性能。此外,文档还配套提供了多个电力电子与新能源并网领域的仿真案例,展现了广泛的技术应用背景和研究延伸价值。; 适合人群:具备电力电子、自动控制理论及新能源系统基础知识,从事光伏发电、储能系统、微电网控制、VSG并网技术等相关方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解光储系统中VSG并网的谐波产生机理及其抑制策略;②掌握自适应虚拟谐波阬的设计原理与实现方法;③在Simulink平台上复现、调试并优化谐波抑制模型,提升对复杂电力系统控制问题的分析与工程实践能力; 阅读建议:此资源以仿真建模为核心,强调理论与实践深度融合,建议读者在透彻理解控制原理的基础上,动手搭建并反复调试Simulink模型,结合所提供的参考文献深入探究算法细节,以实现对光储VSG系统谐波问题的全面掌握与技术创新应用。

基于三次谐波注入法的Z源升压逆变器仿真、更优升压能力【有参考文献】

内容概要:本文系统研究了基于三次谐波注入法的Z源升压逆变器,重点聚焦于其在Simulink环境下的建模、仿真与升压性能优化。通过深入剖析Z源网络的独特拓扑结构与工作机理,详细阐述了三次谐波注入技术如何有效增加直通零矢量的作用时间,从而显著提升电压增益。研究对比了多种升压控制策略,突出了三次谐波最大升压控制的优越性,并结合LCL滤波器的设计与应用,有效抑制了并网电流谐波,提升了输出电能质量与系统稳定性。该资源配套提供了完整的仿真模型与权威参考文献,确保了研究的高度可复现性与实际工程应用价值。; 适合人群:适用于电气工程、自动化、新能源科学与工程等相关专业的硕士、博士研究生,以及从事电力电子变换器、新能源发电系统(如光伏、风电)和微电网技术开发的科研人员与工程技术人员;要求具备扎实的电力电子技术基础和熟练的Matlab/Simulink仿真能力。; 使用场景及目标:① 深入理解Z源逆变器区别于传统逆变器的升压原理与独特优势;② 掌握三次谐波注入法提升电压增益的理论依据与实现方法;③ 在Simulink中独立构建、调试并优化Z源逆变器的完整仿真系统,包括主电路、调制策略与LCL滤波器;④ 将所学技术应用于高升压比需求的新能源并网、电动汽车驱动、不间断电源(UPS)等前沿领域。; 阅读建议:建议学习者结合所提供的参考资料,循序渐进地搭建仿真模型,特别关注直通零矢量的精确控制、SPWM调制模块中谐波注入的实现细节以及LCL滤波器的参数设计与有源阻尼策略,通过反复仿真验证,深刻领悟谐波注入对系统动态响应和稳态性能的影响机制。

外盘期货历史高频tick数据覆盖了芝商所旗下原油、天然气、黄金、白银、标普500、纳斯达克、欧元、玉米等主流期货品种 每条行情记录精确到毫秒,字段包含合约代码、时间戳、成交价、成交量,以及盘口最优买价

外盘期货历史高频tick数据覆盖了芝商所旗下原油、天然气、黄金、白银、标普500、纳斯达克、欧元、玉米等主流期货品种。每条行情记录精确到毫秒,字段包含合约代码、时间戳、成交价、成交量,以及盘口最优买价、卖价和对应的挂单数量。部分品种还会标识成交方向。 数据源:CMES金融数据库

基于STM32与HRTIM的四开关Buck-Boost双向DC-DC电源设计实战(附源码、仿真与设计解析)

本文详细介绍了基于STM32F334的HRTIM高分辨率定时器实现四开关Buck-Boost双向DC-DC电源的设计实战。通过精准的PWM控制、双环PID算法和智能模式切换逻辑,解决了电压震荡与效率优化等关键问题,并提供了完整的源码、PSIM仿真及参数计算,为高性能电源设计提供了实用参考。

7z8x2c4v6b9的博客 288

2026年4月AI爆发周:阿里连推三款模型、字节全双工语音上线,国内大模型进入“落地竞速“新阶段

**摘要:**2026年4月初,国内AI大模型迎来密集发布,阿里、字节、腾讯分别推出新产品。阿里一周发布三款模型,覆盖通用推理、多模态轻量化和长文档处理,API价格大幅下降;字节推出全双工语音模型,实现实时交互,技术难度高;腾讯混元3.0强调工程化和生态整合,面向企业私有化部署。趋势显示,行业从性能竞赛转向落地竞赛,多模态成为主战场,API成本降低,开发者选择更丰富。国内大模型竞争重点转向实际应用和生态整合。

weixin_45526015的博客 1万+

【探秘】二维异形件重叠移除算法:从度量到消除的实战解析

本文深入解析二维异形件重叠移除算法的核心技术与实战应用,涵盖重叠度量、零件扰动策略及消除方法。通过NFP(临界多边形)技术、空间分区加速等优化手段,有效解决异形件排版中的重叠问题,提升材料利用率和计算效率。适合制造业、CAD软件开发者及算法工程师参考。

weixin_28698059的博客 249

清华数据结构列车调度AC100分

两种思路(1)将目标栈的数据和待混洗的数据逐个进行比较#pragma warning(disable:4996) #include<stdio.h> #include<string.h> #define maxn 1600005 using namespace std; char a[2*maxn][5];//记录操作命令 int stack[maxn]; char pop...

hgtjcxy的博客 920

【VAE学习笔记】全面通透地理解VAE(Variational Auto Encoder)

完整笔记:http://www.gwylab.com/note-vae.html 李宏毅老师的教程视频:https://www.bilibili.com/video/av15889450/?p=33 —————————————————————————————————   依据李宏毅老师的讲解,我整理了一番VAE的笔记。先简单介绍一下VAE,VAE作为一个生成模型,其基本思路是很容易理解的:把一堆真...

a312863063的博客 14万+

基于OkHttp3+Retrofit2+RxJava3搭建响应式网络框架

本文介绍了一个基于OkHttp3+Retrofit3+RxJava3的响应式网络框架设计。该框架采用分层架构,OkHttp3负责底层网络请求,Retrofit3封装HTTP接口,RxJava3实现响应式流处理。核心亮点包括:1)高度解耦的分层设计;2)统一的异常处理和响应体封装;3)RxJava3实现线程切换和请求管理;4)MVVM架构适配,业务层只需关注数据逻辑。框架提供了完整的实现方案,包括全局配置、拦截器、响应转换、接口声明、仓库封装等组件,并支持生产环境扩展功能如Cookie持久化、Token刷新等

fuge2008的博客 863

世界职业院校技能大赛—人工智能赛道项目逐字稿参考十二

世界职业院校技能大赛—人工智能赛道项目逐字稿参考十二

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 114

C++之2048小游戏 第二期

游戏会有初始化、绘制界面、处理输入、更新游戏状态、判断胜负等部分。所以,可能需要一个二维数组来表示4x4的网格,存储每个格子的数值。然后,需要处理键盘输入,尤其是方向键的控制,这可能需要使用EasyX的键盘事件处理函数。然后,关于图形绘制部分,每个格子的大小、颜色、数字的显示都需要设计。不同的数字对应不同的颜色,比如2是浅色,4稍深,以此类推。可能需要一个函数根据数字的值返回对应的颜色,然后在绘制时调用。接下来,处理数字的移动和合并逻辑。这是比较复杂的部分。

Lucky_Glory的博客 800

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

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

上一篇: WPF TreeView控件实战:5分钟搞定动态数据绑定(含MVVM示例)
下一篇: YOLOv8热力图可视化实战:5分钟搞定Grad-CAM++配置与效果对比
assembly8low
博客等级 码龄3年 52粉丝 1820原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值