Cpu优化大全 之 代码优化

cpp程序优化 嵌入式C C++代码优化 C C++代码优化具体方案_c++ 如何优化减少程序cpu占用 我做了很多关于程序执行速度方面优化的工(一个示例),我也看过其它人做的优化。我发现有两个最基本的优化技术总是被人所忽略。注意,这两个技术并不是避免时机不成熟的优化。并不是把冒泡排序变成快速排序(算法优化。也不是语言或是编译器的优化。也不是把 i*4 写成 i 阅读详情
前言
观察AppStore中游戏应用的评论,玩家对手机发热这一项评论的非常多。在玩家眼里这是游戏优化的不够好,太耗电。主要原因是CPU运算量大。这篇文章从两个方面介绍如何提高运算效率。其中“使用技巧”主要介绍在Unity研发中一些使用不当的方式,以及如何修正。“算法优化”项算是抛砖引玉,算法的优化总是无止境的,不同项目类型都有自己需求。

使用技巧
神奇的启动时间
在刚开发Unity项目时,遇到了一个非常棘手的问题。游戏启动时内存占用非常高(90M)。我使用二分法,排查是哪里分配的内存。但是结果令我非常的不解,因为当我用二分法,一直排除到程序启动至加载一个场景,一行代码都不执行,但App启动后内存占用缺还是很高(85M)。为了排除场景有未排除的代码, 新建了空白scene。 在google上搜索了好久关于启动内存高的问题,都没有得到答案。此刻只好怀疑到资源这块,通过删除Resources下的资源,神奇的事情发生了,启动内存降低了,自然启动速度就非常快。

直到看Unite 2006的开发者大会性能优化演讲,才看到Unity会根据Resources目录下的资源生产对应的Entity信息,在App启动时会加载所有的资源信息,资源越多,对应需要的内存越多,时间越久。这么重要的信息Unity官方尽然没有任何说明,这令我非常惊奇。

我这边的项目解决办法就是使用AssetBundle,Resources目录下放少量的资源,解决了问题。官方在Unite 2016大会上也是给出的相同的方案,希望能帮到大家。 

延迟解析
在项目设计过程中,我们经常将加载解析配置当做完整的模块,将所有配置文件加载并解析。由于许多模块都依赖配置文件,一般将配置文件启动时加载,当项目大的时候,会发现这里非常拖慢启动速度。这里将配置文件分为以下几类:
  1. 提前加载配置文件,启动时加载
    1. 尤其运行必须的配置文件,比如版本号,远端服务器地址
    2. 影响游戏启动后显示的配置,因为加载文件有卡顿的情况,所以放在loading时加载是值得的
  2. 所需及所求的文件,当使用时加载,解析,缓存
数组遍历
数组的遍历非常常见,尤其在使用Unity Api是更加需要注意,Unity Api 返回数组每次都会返回新的数组,如果每次都访问数据,不仅分配了不必要的内存,还增加cpu调用次数。
1
2
3
4
5
6
7
8
9
10
11
12
13
// bad
// 这里调用了 n的2次方 Input.touches ,n = Input.touches.Length;
for(int i = 0; i < Input.touches.Length; ++i)
{
    Touch touch = Input.touches[i];              
}
 
// good
// 这里只调用了 1次 Input.touches
Touch[] touchArr = Input.touches;
int len = touchArr.Length;
for(int i = 0; i < len; ++i)
{
    Touch touch = touchArr[i];                   
}
内联函数
C#并没有C++的内联函数,在类内部使用时使用成员变量。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Player
{
    private int m_playerId;
    public int playerId
    {
        get { return m_playerId; }
        set { m_playerId = value; }
    }
 
    private void Update(int id)
    {
        // bad
        playerId = id;             // 这里会调用 get 函数
 
        // good
        m_playerId = id;          // 直接访问成员变量
    }
}
对于继承MonoBehaviour,常用的变量如果大量调用, 可定义成员变量指向。
1
2
3
4
5
6
7
8
9
10
private Transform m_transform;
void Start()
{
    m_transform = transform;
}
 
void Update()
{
    m_transform.Translate(new Vector3(1, 1, 0), Space.World);     // 大量调用时,减少调用链
}
SendMessage()
此函数是用来向特定对象发送消息函数,由于会遍历对象所有节点,效率不高。通过监听者模式,效率更高。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static class MessageMgr
{
    public static void  RegisterMsg(string msgType, System.Action callBack)
    {
 
    }
 
    public static void DispatchMsg(string msgType)
    {
 
    }
}
 
void SendMsgToPlayer()
{
    // bad
    SendMessage("InitPlayer", this);     // 会遍历整个Object的子节点,判断是否有InitPlayer方法
 
    MessageMgr.DispatchMsg("MsgInitPlayer");     // 自定义消息管理, 定向发送消息,效率更高
}

反射
反射在编译到IOS平台时,并没有明确说明转换过程,使用时需要测试方可放心使用,下面说说遇到一个问题。
1
2
3
// 这里会在ios上分配内存,如果非要使用,并且调用次数很多,做缓存
System.Type t = System.Type.GetType("Player");         
Player p = (Player)System.Activator.CreateInstance(t);
p.playerId = 10001;
携程
携程有效的分摊cpu 最大峰值。下面的例子介绍,如何分段加载游戏场景。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void LoadLevel()
{
    int level = 2;
    StartCoroutine(LoadLevelCoroutine(level));
}
 
IEnumerator LoadLevelCoroutine(int level)
{
    // load secene
    yield return new WaitForEndOfFrame();
 
    // load ui
    yield return new WaitForEndOfFrame();
 
    // load audio
    yield return new WaitForEndOfFrame();
 
    // load actor
    yield return new WaitForSeconds(1.0f);
}
第三方库
使用效率高的库,在使用第三方库的时候,多做比较分析,得出最优的效率库。
1
2
3
4
PlayerInfo litPlayerInfo = JsonMapper.ToObject(litJsonStr);     // LitJson
 
PlayerInfo unityJsonInfo = JsonUtility.FromJson(litJsonStr);     // Unity 自带的JsonUtility 效率差很多倍

缓存
多使用缓存, 不要重复计算,下面的例子,一个是每次在使用数据时解析json,另一个是解析好后,每次调用直接使用缓存。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[System.Serializable]
class PlayerConfig
{
   public int id;
   public string name;
}
 
private PlayerConfig m_config;
private string m_jsonStr;
private PlayerConfig ParseConfig(string jsonStr)
{
    return JsonUtility.FromJson(jsonStr);
}
private void InitConfig()
{
    m_jsonStr = "{\"id\":1001, \"name\":\"lfwu\"}";
    m_config = ParseConfig(m_jsonStr);
}
 
private void Update()
{
    // bad
    int id = ParseConfig(m_jsonStr).id;
 
    // good
    id = m_config.id;                  
}
字符串
字符串比较时,.net 涉及到语言相关项,会拖累速度,建议使用string.Equals,Compare的速度很慢, 因此在使用 string.IndexOf(), string.LastIndexOf() 需要注意语言相关问题。
1
2
3
4
5
6
7
8
9
10
11
12
string str1 = "hello, world";
string str2 = "hell0, wor1d";
 
// bad
int ret = 0;
ret = string.Compare(str1, str2);     // 语言相关,速度慢
ret = str1.CompareTo(str2);           // 语言相关,速度慢
 
// good
bool isSame = false;
isSame = str1.Equals(str2);                                  
isSame = str1.Equals(str2, System.StringComparison.Ordinal);  // 速度快,按字符2进制比较
Dictionary
使用ContainsKey判断,在调用取值,调用了两次取值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dictionary<int, string=""> playerDic = new Dictionary<int, string="">
{
    { 10001, "lfwu" },
    { 10002, "xiaoy" }
};
 
int id = 10001;
if (playerDic.ContainsKey(id))
{
    return playerDic[id];
}
else
{
    return string.Empty;
}
建议使用TryGetValue。
1
2
3
4
5
6
7
8
9
10
11
Dictionary<int, string=""> playerDic = new Dictionary<int, string="">
{
     { 10001, "lfwu" },
     { 10002, "xiaoy" }
};
 
int id = 10001;
string ret = string.Empty;
playerDic.TryGetValue(id, out ret);
return ret;
内置函数
在创建脚本继承MonoBehaviour时,删掉默认不用的函数,这些函数都会被调用。
1
2
3
void Awake() {}
void Start() {}
void Update() {}
Update
在戏开发中Update调用非常常见,Unity中类继承MonoBehaviour,会自动注册Update函数。
1
2
3
4
5
6
7
8
9
private List m_updateList = new List();
private void Update()
{
    int len = m_updateList.Count;
    for(int i = 0; i < len; ++i)
    {
         m_updateList[i]();
    }
}
在一个对象里通过遍历所有对象的函数效率会比分别在每个对象里自己调用Update效率高很多

设置帧率
Unity默认帧率是60,针对不同的游戏可以设置不同的帧率,设置合理的帧率,提高性能,减少cpu调用次数。
1
Application.targetFrameRate = Config.kFrameRate;
算法优化
遇到被除数是2的时候,可以改为乘法运算。
1
2
3
4
5
// bad
float ret = dis / 2.0f;
 
// good
float ret = dis * 0.5f;
遇到两点之间的距离是否接近。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Vector3 posA = new Vector3(1, 1, 1);
Vector3 posB = new Vector3(2, 2, 2);
 
// bad
float minDis = 10.0f;
float dis = Vector3.Magnitude(posA - posB);     // 这里调用了开平方,效率比较低
 
if(dis < minDis)
{
 
}
 
// good
float sqrMinDis = 10.0f * 10.0f;
float sqrDis = Vector3.SqrMagnitude(posA - posB);     // 平方和,速度很快
if(sqrDis < sqrMinDis)
{
 
}
开平方,那让我们看下传奇Quake代码里的开平方。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
float Q_rsqrt( float number )
{
    long i;
    float x2, y;
    const float threehalfs = 1.5F;
 
    x2 = number * 0.5F;
    y  = number;
    i  = * ( long * ) &y;                      // evil floating point bit level hacking
    i  = 0x5f3759df - ( i >> 1 );              // what the fuck?
    y  = * ( float * ) &i;
    y  = y * ( threehalfs - ( x2 * y * y ) );  // 1st iteration
 
    return y;
}
总结
只有对自己对每一行代码的性能消耗胸有成竹,才能做到如庖丁解牛那般轻松。
一些C代码优化方法 指针方法的优点是,array的地址每次装入地址p后,在每次循环中只需对p增量操作。在数组索引方法中,每次循环中都必须根据t值求数组下标的复杂运算。 如果表很大,不好写,就写一个init函数,在循环外临时生成表格。 (2)、求余运算 a=a%8; 可以改为: a=a&7; 说明:位操作只需一个指令周期即可完成,而大部分的C编译器的“%”运算均是调用子程序来完成,代码长、执行速度慢。通常,只要求是求2n方的余数,均可使用位操作的方法来代替。 (3)、平方运算 a=pow(a, 2.0); 可以改为: a=aa; 阅读详情

相关推荐

电脑性能优化常用工具大全

资源名称:电脑性能优化常用工具大全资源目录:【】Gavotte Ramdisk(内存虚拟磁盘)【】一键清理系统垃圾文件【】为32位系统开启4GB以上大内存【】内存释放专家——MemEmpty【】让普通CPU拥有双核心的能力Process Lasso 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

Windows10优化系统,优化达到30多项,速度大幅提升,

Windows10优化系统,速度大幅提升

云博客_资源宝分享 2661

bat系统14项常用优化

。。。。。。优化内容介绍。。。。。。 1、电脑取消自检 2、禁用磁盘碎片整理计划任务 3、电脑虚拟内存设置为自动管理 4、取消非法关机自动修复 5、关闭防火墙 6、关掉并禁用打印机服 7、关闭电脑的update升级服务(个别插件安装时需要开启此选项) 8、关闭休眠删除休眠文件 9、显示器调成从不关闭 10、计算机休眠调成从不 11、电源选项硬盘在此时间关闭调成从不 12、电源选项在此时间关闭显示调成从不 13、将用户账户控制设置为从不通知 关闭UAC 14、关闭来宾用户

Windows 系统优化大全(完整)

Windows系统优化设置,若有不懂的请勿盲目设置,可以私信或者评论,我每天在线会及时回复。

vlogghd的博客 4734

电脑优化工具(PGWAREPcMedik)V8.1.28.2018绿色免费版

PCMedik可以优化你的电脑,让PC发挥更大的性能,大大减少死机的事件。你只须选择操作系统的类型和CPU名字,再点击[GO]按钮就会完成全部的有优化设定 2018最新版本值得你来一试! 更新日志: 8.8.1.2016 去掉了验证码代码的所有可执行文件签名的签名,因为它是即将到期。

提高电脑运行速度的软件,(附有源代码)

提高电脑运行速度的软件,(附有源代码),是个非常好的清理垃圾,还有杀死常见病毒,还有优化电脑开机。

写出漂亮代码的45个小技巧

比如在项目中不同的类型的业务可能需要上传各种各样的附件,此时就可以定义好不同的一个附件的枚举,来区分不同业务的附件。不要在代码中直接写死,不定义枚举,代码阅读起来非常困难,直接看到数字都是懵逼的。。

Huangjiazhen711的博客 2486

WIN7服务 优化代码

BAT 也就是电脑的BAT优化

windows简单命令系统优化

windows简单命令系统优化 windows简单命令系统优化 一、Gpt转mbr: 打开cmd命令 看正在挂载的磁盘 C:\Users\Administrator>diskpart 查看正在挂载磁盘列表 DISKPART> list disk 1.选择将要转换的硬盘 DISKPART> select disk 1 选择硬盘 DISKPART>clean 清除硬盘 *//...

wodty的博客 3793

别再乱删文件了!修复Print Spooler服务自动停止的3个关键检查点(附Win10/Win11实测)

本文深入解析Windows系统中Print Spooler服务自动停止的常见原因及修复方法。从第三方驱动冲突、权限与服务依赖关系到打印队列积压,提供3个关键检查点的详细排查步骤,帮助用户彻底解决打印服务异常问题,适用于Win10/Win11系统。

weixin_31569671的博客 676

基于PLC智能立体车库控制系统设计

摘要 本系统设计以三层立体车库为研究对象,通过对立体车库的原理分析、动作流程设计和一系列的软硬件设计,达到立体车库自动化控制的目的。系统采用可编程控制器作为立体车库控制系统的控制单元,实现该系统的工艺要求,通过程序仿真调试,完成系统的各种动作要求,达到自动控制的目的。系统设计分为总体设计、硬件设计以及软件设计。按照立体车库控制系统的控制策略进行图纸设计;重点分析工艺流程图,对立体车库控制系统进行程序编译和MCGS上位机调试,通过系统的调试和修改,达到了基本控制的要求。系统设计明确了工艺要求,确定

DX884164131的博客 3600

以下是一些用于电脑优化加速的专门命令

【代码】以下是一些用于电脑优化加速的专门命令。

Byh2001的博客 833

Python小白也能搞定!用you-get一键下载B站视频合集的保姆级教程

本文为Python新手提供了使用you-get工具一键下载B站视频合集的完整教程。从环境配置、基础下载操作到高级批量下载技巧,详细介绍了如何利用这个开源工具高效获取视频资源,包括解决常见问题和实用优化建议,帮助用户轻松实现离线学习。

weixin_42544663的博客 461

代码优化

Java代码优化(长期更新) 前言 2016年3月修改,结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化。在修改之前,我的说法是这样的: 就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸鱼自然饱了。 代码优化一样,也许一个两个的优化,对于提升代码的运行效率意义不大,但是只要处处都能注意代码优化,总体来说对于提升代码的运行效率就很有用了。 这个观点,在现在...

学习和工作总结,共勉! 1587

DrMOS电路仿真

将驱动电路与功率MOS集成化后既是DrMOS。把驱动芯片以及上下桥MOSFET封装在一起,这样每一相供电就有了单独的驱动芯片,并且这种高度整合的MOSFET可以通过更高的电流、发热比传统的MOSFET也小很多且更节能 自举升压同步BUCK高低侧栅驱动电路原理及仿真 ...

Srambler的博客 5041

高能物理相关软件

国内高能物理实验背景     研究物质最深层次结构及相互作用的前沿基础科学。 现代高能物理实验的要素    实例源 、 探测器、   电子学、  触发 DAQ、  原始数据、 刻度、重建 、物理分析、  成果  。 离线软件的地位和作用。    是硬件设备和物理学家的桥梁,是从数据到物理成果转化中的关键和重要的环节。 高能物理实验及其特点 独一无二性,实验规模越来越大,努力省钱(使用

Alan Zhuang的博客 3300

C++代码优化思路及27个建议

在软件开发中,代码优化是一项关键活动,尤其是在性能敏感的应用场合,如嵌入式系统、游戏开发、系统级软件以及大数据处理等领域。代码运行效率影响体验度和系统效率。代码优化不仅可以提高程序的执行效率和响应速度,还有助于减少资源消耗(如CPU时间和内存使用)和提升用户体验。今天我个人将C/C++代码优化的一些基本思路做一个简单总结,希望对大家在开发过程中的代码优化有所帮助。

程序猿老樊的博客 4393

STM32CubeMX定时器配置

因为只有当 CH2 处于 输入模式 时,硬件才能把这根脚送进滤波器(TI2FP2通道之前要滤波),再生成 TI2FP2 这条支路供 Slave-Mode 控制器使用,也就是说TI2FP2 并不是“独立存在”的,但在CubeMX配置时:如下图,我们只设置Slave Mode和TI1FP1,之后,CH1就自动配置为 Input Capture 了,下图发现,Channel1只能 Input Capture 或者Disable。哪来的主定时器和从定时器呢?把待测 PWM 的高电平当“门”,连接到ETR。

2402_89015641的博客 3188

编译原理之代码优化

文章目录代码优化的目标、对象、范围和策略代码优化的目标代码优化的对象代码优化的范围代码优化的策略一些优化的场景数据流分析实例图示半格理论 代码优化的目标、对象、范围和策略 代码优化的目标 代码优化的目标,是优化程序对计算机资源的使用。我们平常最关心的就是 CPU 资源,最大效率地利用 CPU 资源可以提高程序的性能。代码优化有时候还会有其他目标,比如代码大小、内存占用大小、磁盘访问次数、网络通讯次数等等。 代码优化的对象 从代码优化的对象看,大多数的代码优化都是在 IR 上做的,而不是在前一阶段的 AS

Carroll的博客 2973

Word公式批量转MathType终极指南:解决omml2mml.xsl缺失与格式调整难题

本文提供Word公式批量转MathType的终极解决方案,重点解决常见的omml2mml.xsl文件缺失问题,并详细讲解批量转换与格式调整技巧。通过补全文件路径、分批次转换及样式预设等方法,大幅提升学术论文公式编辑效率,适用于Office 2016及以上版本。

weixin_28419039的博客 1351

【零基础入门unity游戏开发——unity通用篇12】导入导出unity资源包、设置编程工具、创建脚本(组件)规则、MonoBehaviour基类介绍、脚本模板(基于unity6开发介绍)

导入导出unity资源包、设置编程工具、创建脚本(组件)规则、MonoBehaviour基类介绍、脚本模板(基于unity6开发介绍)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 760

Java中的代码优化技巧

好了,今天的分享就到这里了。希望这些Java代码优化技巧能对你有所帮助。记住,优化代码不仅仅是为了提升性能,更是为了写出高质量、可维护的代码。在实际开发中,我们要时刻保持对代码质量的追求,不断学习和提升自己的技能。最后,欢迎大家关注我,和我一起交流和探讨更多的技术话题。让我们在编程的道路上共同进步,不断超越自己!

weixin_46372265的博客 809

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

《C++代码优化秘籍:减少 CPU 周期,提升程序性能》

通过选择高效的数据结构、优化算法、减少函数调用开销、优化循环结构和利用编译器优化等措施,可以显著提高程序的性能,让我们的软件在各种场景下都能更加流畅地运行。如果你的程序需要快速的查找操作,哈希表或二叉搜索树可能是更好的选择。如果你的问题可以使用高效的算法解决,那么一定要选择合适的算法。在 C++中,不同的数据结构在存储和访问数据的方式上有所不同,因此会消耗不同数量的 CPU 周期。一个高效的算法可以大大减少 CPU 周期的消耗,而一个低效的算法可能会导致程序运行缓慢。搜索算法也是程序中经常使用的算法之一。

xy520521的博客 1469

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

android 蓝牙通讯demo

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

QT QML模块的代码优化

QT_QML模块代码优化的意义《QT QML模块的代码优化》第一章,QT QML模块代码优化的意义QT QML模块是QT框架的一个重要组成部分,它使用QML语言来描述用户界面和实现业务逻辑。QML语言的简洁性和易用性使得QT框架成为开发跨平台应用程序的首选工具。然而,在实际开发过程中,我们经常会遇到代码性能瓶颈和可维护性问题。因此,对QT QML模块进行代码优化具有重要意义。1.1 提高应用程序性能优化QT QML模块的代码可以显著提高应用程序的性能。

QT性能优化QT原理源码QT界面美化 2322

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

编译器设计-代码优化

编译器设计-代码优化 Compiler Design - Code Optimization 优化是一种程序转换技术,它试图通过使代码消耗更少的资源(如CPU、内存)来改进代码,并提供高速。 在优化中,高级通用编程结构被非常高效的低级编程代码所代替。代码优化过程必须遵循以下三条规则: 输出代码无论如何不能改变程序的含义。 优化应该提高程序的速度,如果可能的话,程序应该需要更少的资源。 优化本身应该是快速的,不应该延迟整个编译过程。 优化代码的工作可以在编译过程的不同级别进行。 在开始时,用户可以更改/重新排

吴建明wujianming_110117 750
上一篇: c#中的interface abstract与virtual
下一篇: Unity时间戳的使用教程
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值