【Python性能分析工具大揭秘】:掌握这5款神器,轻松定位代码瓶颈

第一章:Python性能分析工具概述

在开发高性能Python应用时,识别程序瓶颈是优化工作的首要任务。Python生态系统提供了多种性能分析工具,帮助开发者测量函数执行时间、内存使用情况以及调用关系,从而有针对性地进行代码优化。

内置性能分析模块 cProfile

Python标准库中的 cProfile 是最常用的性能分析工具之一,能够统计函数调用次数和执行耗时。使用该模块可快速定位耗时最长的函数。
import cProfile
import pstats

def slow_function():
    return sum(i * i for i in range(100000))

# 执行性能分析
profiler = cProfile.Profile()
profiler.enable()
slow_function()
profiler.disable()

# 输出分析结果
stats = pstats.Stats(profiler)
stats.sort_stats('cumulative')
stats.print_stats(10)  # 显示耗时最多的前10个函数

内存使用分析工具 memory_profiler

除了CPU时间,内存消耗也是性能优化的关键维度。memory_profiler 可逐行监控内存使用情况,适合发现内存泄漏或高内存占用代码段。
  1. 安装工具:pip install memory-profiler
  2. 在目标函数上方添加 @profile 装饰器
  3. 运行命令:python -m memory_profiler example.py

常用性能分析工具对比

工具名称分析类型是否需安装适用场景
cProfileCPU 时间否函数级性能分析
memory_profiler内存使用是逐行内存监控
line_profiler行级 CPU是精确到代码行的耗时分析

第二章:cProfile——官方推荐的性能分析利器

2.1 cProfile核心原理与工作机制解析

cProfile 是 Python 内置的性能分析工具,基于函数调用计时机制,通过挂钩函数调用、返回和异常事件来统计执行时间与调用关系。
工作流程概述
在程序运行期间,cProfile 注册一个调试钩子,监听每个函数的进入与退出。每当函数被调用时,它记录调用者、被调用者、调用时间及执行耗时。
关键数据结构
分析结果包含以下核心字段:
  • ncalls:函数被调用的次数
  • tottime:函数内部消耗的总时间(不含子函数)
  • percall:每次调用平均耗时(tottime/ncalls)
  • cumtime:累计时间,包含子函数执行时间
import cProfile
def slow_function():
    return sum(i ** 2 for i in range(10000))

cProfile.run('slow_function()')
该代码片段启动性能分析,运行 slow_function 并输出各函数的调用次数与时间消耗,底层通过 PyEval_SetProfile 激活 C 级别的事件追踪。

2.2 使用cProfile进行函数级性能统计

性能分析入门
Python内置的cProfile模块可对程序进行细粒度的函数级性能统计。通过它,开发者能准确识别耗时最多的函数调用路径。
基本使用方法
import cProfile
import pstats

def slow_function():
    return sum(i * i for i in range(100000))

profiler = cProfile.Profile()
profiler.enable()
slow_function()
profiler.disable()

stats = pstats.Stats(profiler)
stats.sort_stats('cumulative')
stats.print_stats(5)
该代码启用性能分析器,执行目标函数后输出耗时最长的前5个函数。其中cumulative表示函数自身及子函数总耗时。
关键字段说明
字段含义
ncalls调用次数
tottime函数内耗时(不含子函数)
cumtime累计耗时(含子函数)

2.3 分析输出结果:理解调用次数、消耗时间与累积时间

在性能分析中,调用次数、消耗时间和累积时间是评估函数执行效率的核心指标。调用次数反映函数被触发的频率,高频调用可能暗示优化机会。
关键指标解析
  • 调用次数(Calls):函数被执行的总次数,区分原生调用与递归调用。
  • 消耗时间(Self Time):函数自身执行耗时,不包含子函数调用时间。
  • 累积时间(Total Time):函数及其所有子函数的总耗时。
示例输出解析

         100    5.2s   52ms    8.1s   81ms    main.ProcessData
                 ^       ^             ^
              调用次数  消耗时间     累积时间
该结果显示 ProcessData 被调用 100 次,平均每次消耗 52ms,但累积时间达 81ms,说明其子函数占用了额外 29ms,存在潜在优化空间。

2.4 结合pstats模块优化分析流程

在完成性能数据采集后,pstats 模块提供了强大的接口用于程序化地分析和过滤 cProfile 输出结果,显著提升调优效率。
加载与排序性能数据
通过 pstats.Stats 类可加载保存的性能文件,并按指定维度排序:

import pstats

# 加载性能数据
stats = pstats.Stats('profile_output.prof')

# 按累计执行时间排序,输出前10条记录
stats.sort_stats(pstats.SortKey.CUMULATIVE).print_stats(10)
上述代码中,SortKey.CUMULATIVE 表示按函数累计运行时间排序,适用于定位耗时最长的核心函数。print_stats(10) 限制输出条目数,便于聚焦关键瓶颈。
筛选与过滤函数调用
支持基于函数名、文件路径等条件进行过滤,精准定位目标模块:
  • stats.strip_dirs():去除文件路径中的目录信息,提升可读性
  • stats.filter('my_module'):仅显示来自指定模块的调用记录
  • stats.dump_stats('filtered.prof'):将处理后的数据重新保存供后续分析

2.5 实战案例:定位Web服务中的高耗时函数

在一次生产环境性能优化中,某Go语言编写的Web服务出现响应延迟突增。通过pprof工具对运行中的进程进行CPU剖析,快速定位到一个高频调用但未缓存的JSON解析函数。
性能剖析步骤
  • 启用net/http/pprof导入并启动调试端口
  • 使用go tool pprof连接服务采集CPU profile数据
  • 执行火焰图分析,发现json.Unmarshal占用超过60%的CPU时间
关键代码片段
func parseRequest(data []byte) (*Request, error) {
    req := &Request{}
    // 每次请求都执行完整反序列化,无缓存机制
    if err := json.Unmarshal(data, req); err != nil {
        return nil, err
    }
    return req, nil
}
该函数在高并发场景下频繁调用,且输入数据结构固定,存在明显的缓存优化空间。引入结构体模板缓存后,CPU占用下降至12%,平均响应时间缩短75%。

第三章:line_profiler——逐行剖析代码性能

3.1 line_profiler的设计理念与适用场景

line_profiler 是一个专为 Python 设计的逐行性能分析工具,其核心设计理念是**精确到行级的时间消耗测量**,帮助开发者识别函数内部的性能瓶颈。
设计哲学:精准定位热点代码
不同于 cProfile 仅提供函数级别的耗时统计,line_profiler 能深入函数体内部,记录每一行代码的执行次数与耗时。这对于优化复杂逻辑、循环密集型操作尤为关键。
典型适用场景
  • 调试长时间运行的函数,查找最耗时语句
  • 优化算法实现中的低效循环或重复计算
  • 验证性能优化前后某几行代码的实际改进效果
@profile
def compute_sum(n):
    total = 0
    for i in range(n):
        total += i  # 每行耗时将被精确记录
    return total
使用 @profile 装饰器标记目标函数后,通过命令行运行:
kernprof -l -v script.py,即可输出每行的执行时间与命中次数,为精细化调优提供数据支撑。

3.2 安装配置与@profile装饰器使用技巧

要使用 @profile 装饰器进行性能分析,首先需安装 py-spy 或启用 line_profiler。通过 pip 安装:

pip install line_profiler

安装后,将 @profile 直接应用于目标函数,无需导入,因为该装饰器由分析工具在运行时注入。

装饰器使用示例
@profile
def compute_heavy_task(n):
    total = 0
    for i in range(n):
        total += i ** 2
    return total

上述代码中,@profile 会记录每一行的执行时间。运行程序时需通过 kernprof -l -v script.py 启动,以激活分析功能。

常见配置技巧
  • 避免在生产环境保留 @profile,仅用于开发调试;
  • 可结合条件判断动态启用,提升灵活性;
  • 分析结果按行显示执行次数与耗时,便于定位瓶颈。

3.3 实战演练:识别循环中的性能热点

定位高频执行路径
在性能调优中,循环往往是热点代码的集中地。通过分析执行频率高、耗时长的循环结构,可显著提升程序效率。
示例:低效循环的识别

for i := 0; i < len(data); i++ {
    result = append(result, expensiveCalc(data[i])) // 每次调用开销大
}
上述代码在每次迭代中调用 expensiveCalc,若该函数涉及内存分配或复杂计算,则构成性能瓶颈。
优化策略对比
策略说明
预分配内存使用 make([]T, size) 避免动态扩容
函数内联将小函数展开以减少调用开销
性能分析流程:采样 → 定位热点 → 重构 → 验证

第四章:memory_profiler——内存使用情况深度监控

4.1 内存泄漏常见成因与memory_profiler作用机制

内存泄漏通常由未释放的动态内存、循环引用或缓存无限制增长引发。在Python中,垃圾回收机制虽能处理大部分情况,但对循环引用或大型对象仍可能失效。
常见成因
  • 对象引用未及时解除,导致无法被垃圾回收
  • 全局缓存持续累积数据
  • 回调函数注册后未注销,持有对象引用
memory_profiler的工作机制
该工具通过逐行监控内存消耗,利用psutil获取进程内存信息。启用装饰器后,可精确追踪函数级内存变化:

@profile
def leaky_function():
    data = []
    for i in range(10000):
        data.append(str(i) * 100)
    return data
上述代码中,@profile触发memory_profiler注入监控逻辑,每行执行前后记录内存使用量。参数data持续追加字符串,导致内存占用阶梯式上升,工具可捕获该趋势并输出详细报告。

4.2 实时监控脚本内存消耗:mprof命令详解

在Python应用开发中,内存泄漏或异常增长往往难以察觉。`mprof` 是一个强大的工具,能够实时追踪脚本的内存使用情况。
安装与基本用法
首先通过pip安装:
pip install memory-profiler
该命令安装了 `mprof` 可执行程序,用于记录和可视化内存消耗。
监控并绘制内存曲线
运行以下命令启动监控:
mprof run your_script.py
执行完成后生成 `.mprofile` 数据文件,随后可绘制图形:
mprof plot
这将调用matplotlib显示内存随时间的变化趋势,清晰标识出内存峰值。
高级选项说明
  • --interval=N:设置采样间隔(秒),默认为0.1秒;
  • --include-children:包含子进程内存,适用于多进程应用;
  • mprof clean:清理旧的性能数据文件。

4.3 基于函数粒度的内存分析实践

在性能敏感的应用中,定位内存分配热点需深入至函数级别。通过 Go 的 pprof 工具结合运行时采样,可精准识别高开销函数。
采集内存分配数据
使用如下命令获取堆内存快照:
go tool pprof http://localhost:6060/debug/pprof/heap
该接口由 import _ "net/http/pprof" 自动注册,持续收集运行时堆分配信息。
分析关键函数的内存行为
在 pprof 交互界面中执行:
top --cum --lines
输出结果将按累积内存占用排序,突出跨调用链的内存消耗主力函数。
  • Focus on allocation rate:频繁小对象分配可能比大块内存更影响GC周期
  • Check escape analysis:使用 go build -gcflags="-m" 确认变量是否逃逸至堆
结合调用图与热点函数上下文,可针对性优化数据结构复用或池化策略。

4.4 案例驱动:优化大数据处理任务的内存占用

在处理大规模数据集时,内存占用常成为性能瓶颈。某日志分析系统在读取TB级日志时频繁触发OOM,经排查发现其采用全量加载方式。
问题定位与内存分析
通过JVM堆转储分析,发现List对象占用了超过70%的内存。原始代码如下:

List logs = Files.readAllLines(Paths.get("huge.log"));
logs.stream()
    .filter(line -> line.contains("ERROR"))
    .forEach(System.out::println);
该实现将整个文件加载至内存,造成资源浪费。应改用流式处理避免中间集合膨胀。
优化方案:流式处理
使用Files.lines()实现惰性加载:

Files.lines(Paths.get("huge.log"))
     .filter(line -> line.contains("ERROR"))
     .forEach(System.out::println);
此方式以管道形式逐行处理,内存中仅驻留当前行,峰值内存下降约85%。
方案峰值内存执行时间
全量加载1.8 GB210s
流式处理180 MB195s

第五章:总结与工具选型建议

技术栈评估维度
在微服务架构中,选择合适的通信协议至关重要。gRPC 与 REST 各有优劣,需结合延迟、吞吐量和开发成本综合判断。
指标gRPCREST/JSON
性能高(基于 HTTP/2 和 Protobuf)中等(文本解析开销)
跨语言支持优秀良好
调试便利性较低(需专用工具)高(浏览器可读)
典型场景推荐方案
  • 内部高性能服务间通信:优先选用 gRPC,尤其适用于实时数据处理系统
  • 对外公开 API:采用 REST + JSON,便于第三方集成与调试
  • 混合架构:通过 Envoy 或 gRPC-Gateway 实现协议转换,兼顾性能与兼容性
代码生成实践
使用 Protocol Buffers 定义接口后,可通过以下命令生成 Go 代码:
protoc --go_out=. --go-grpc_out=. api/service.proto
// 生成的代码包含 Service 接口与消息结构体
// 可直接注入 Gin 或 gRPC Server 中
[客户端] → HTTP/JSON → [gRPC-Gateway] ⇨ [gRPC 服务集群]
对于初创团队,建议从 REST 开始,逐步引入 gRPC 关键路径服务。某电商系统在订单处理链路切换至 gRPC 后,P99 延迟下降 60%。

相关推荐

UE4 Instanced Mesh 半透明渲染顺序不对解决

以绿色方块为Instanced Mesh为例。 正确的半透应该是这样的: 这是一般蓝图Actor方块,其半透是正常的。 然而Instanced Mesh因为过多,UE4不给你缓存正确的渲染顺序。所以,在不改代码的情况下,想解决Instanced Mesh半透问题,是不可能的。不正确的半透如下: 注意到错误发生在Instanced Mesh的方块与方块之间。 但我就是要解决,...

qq_41524721的博客 5569

通过mprof plot打印出图分析内存泄漏代码

putty -load ubuntu直接命令行进入putty 1。先删除3个文件,恢复运行前初始状态 rm workspace/*.log rm workspace/*.h5 rm workspace/jobs/* 这个也可能没有文件 rm mprofile_20170630073530.dat 删除dat文件,可删可不删 2、 编辑py文件,比如注释掉某一行 vi crawl

qq_23392341的博客 1415

天融信防火墙NGFW4000(TG-4628)安装配置笔记

配置一台全新的天融信防火墙NGFW4000,配置完后,内网用户10.10.1.0/24和10.10.2.0/24可以通过防火墙上网,外网用户可以通过访问防火墙的外网接口地址来访问内网的WEB服务器10.10.1.200,并且内网用户也可以通过WEB服务器的外网地址进行访问。 网络说明: 防火墙外网接口地址:218.90.123.121/30 防火墙内网接口地址:19...

weixin_33671935的博客 4460

Python内存分析工具:memory_profiler

上官网地址:https://pypi.org/project/memory-profiler/ 安装: pip install -U memory_profiler 使用: 方式一,直接运行文件,或者命令行运行: # _*_coding:utf-8_*_ # Python程序内存分析 from memory_profiler import profile @profile(precision=4) # 统计内存的精度 def my_func(): import time ..

一碗烈酒的博客 1万+

Python 爬虫:获取网页数据的 5 种方法

requests:适用于简单的静态网页抓取,易于使用。requestslxml:适合需要高效解析大规模网页内容的情况,支持 XPath 和 CSS 选择器。Selenium:适用于动态网页(JavaScript 渲染)的抓取,模拟浏览器行为获取动态数据。Scrapy:强大的爬虫框架,适合大规模的网页抓取任务,支持异步请求和高级功能。PyQuery:基于 jQuery 语法,适合快速开发,提供简洁的 CSS 选择器语法。

想看什么文章都可以私信给我,综合性博客。 5516

ifix5.8连接ab plc的点-通过rslinx

以ifix连接ab plc的点为例 1.先在rslinx上把plc的点导出为opc server 2.使用opc power tool 作为opc client 去连接 3.保存到项目的PDB文件夹下面,并且以节点名命名。 也可以不以节点名命名,系统自动会生成一个以节点名命名的这种文件,就显得很乱。 同时,项目的PDB目录下面必须还得拷过来一个de...

中国智造2025 4114

python性能分析、debug工具

cprofile如果你的python脚本执行很慢,有很多种方法对它的性能进行分析,比如cProfile就很好。如果你想对正在运行的python进程进行性能分析,cProfile则无能为力,因为程序已经在运行,如果是生产环境,不可能为了配合你分析性能而重新启动程序。Py-spy可以对正在运行的python进程进行分析,其原理是获取调用堆栈,在linux系统下,通过process_vm_readv,在mac下使用vm_read,在windows上使用ReadProcessMemory。

一起学习 4433

树莓派教程(基于python编程)--入门篇

一:格式化SD卡 SD卡插入读卡器连接电脑,使用SDFormatter对SD卡进行格式化 (重装烧录也要进行着SD卡格式化操作) 二:下载官方镜像 http://downloads.raspberrypi.org/raspbian_latest 三:烧录SD卡 使用Win32DiskImager将镜像烧录到格式化后的SD卡 SD卡盘根目录(/boot)下新建一个命名为ssh的...

qq_42109746的博客 6万+

memory_profiler python 代码内存性能分析

python 内存优化思路。可视化工具 mprof。

哦豁灬 1万+

【VisDrone数据集】YOLOX训练VisDrone数据集步骤与结果

YOLOX训练VisDrone数据集步骤与结果。

Gorgeous_wxd 2234

【ARM CoreLink 系列 5.3 -- CI-700 SLC memory 系统组件详细介绍】

在 CI-700 系统级缓存(SLC)内存系统中,HN-F 节点负责管理缓存一致性和数据传输。每个 HN-F 节点可以发送三种类型的 Snoop 请求,以确保系统中多核处理器和缓存之间的一致性。CI-700 中的系统级缓存(SLC)内存系统通过 HN-F 节点支持 TrustZone® 技术。以下是 CI-700 支持的 SN 类型以及配置方法的简要介绍。ARM CI-700 系统级缓存(SLC)是一个分布式、主要排他性(mostly exclusive) 的最后一级缓存,集成在 HN-F 节点内。

CodingCos的博客 898

如何用chengfeng-videocut-skills彻底解决剪映的2大痛点?语义理解+专业词典双管齐下

如果你经常使用剪映的"智能剪口播"功能,可能会遇到两个让人头疼的问题:重复说的句子识别不出来,专业术语经常被识别错误。今天,我要向你介绍一个革命性的解决方案——**chengfeng-videocut-skills**,一个基于Claude Code Skills构建的智能视频剪辑Agent,专门为口播视频设计,彻底解决剪映的两大痛点! ## 🔍 剪映的痛点:为什么传统工具不够用? ###

gitblog_00226的博客 1139

深度学习实战12(进阶版)-利用Dewarp实现文本扭曲矫正

大家好,我是微学A1, 我们在生活中会看到一些拍摄扭曲的图片,我们在通过OCR识别的时候,因为扭曲的厉害,而无法识别,我们需要对图片进行处理。

微学AI的博客 3157

Python EXE解压神器:5分钟快速提取封装代码的终极方案

你是否遇到过这样的情况:收到一个Python打包的EXE文件,却无法查看其中的源代码?面对PyInstaller、PyOxidizer等工具封装的程序,传统的逆向方法往往束手无策。今天,就让我为你介绍一款简单易用的Python EXE解压工具,让你在5分钟内轻松提取所有隐藏代码! ## 🔍 为什么需要Python EXE解压工具? 在日常开发和安全分析中,我们经常需要处理各种Python打包

gitblog_00603的博客 1211

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

这款神器,能把 Python 代码执行过程看地一清二楚

本文转自机器之心,禁止二次转载对于一些刚入门 Python 的朋友来说,代码稍微复杂些就难以搞懂代码内部到底是怎么运行的了,而且有时一运行就报错,难以一下发现错误,只会用 Prin...

weixin_38754349的博客 184

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python代码执行过程_推荐一款神器:让你看透Python 代码执行过程

本文转自机器之心,禁止二次转载对于一些刚入门 Python 的朋友来说,代码稍微复杂些就难以搞懂代码内部到底是怎么运行的了,而且有时一运行就报错,难以一下发现错误,只会用 Print 去慢慢找异常的地方,效率很低下。所以对程序进行监控和调试很重要。今天就给大家分享一个由国外大神制作的 Python 神工具,可以实时动态地监控 Python 程序的运行情况,逐行追踪代码的运行时间,整个过程是可视化的...

weixin_39782394的博客 144

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Spark性能分析神器sparkMeasure:10分钟快速上手指南

Apache Spark是大数据处理领域最流行的分布式计算框架之一,但在实际应用中,性能优化和故障排查往往是开发者和数据工程师面临的最大挑战。sparkMeasure作为一个专业的Spark性能分析工具,为这个问题提供了终极解决方案。这个开源库简化了Spark任务和阶段指标的收集、聚合和导出过程,让性能分析变得简单高效。 ## 🔍 什么是sparkMeasure? sparkMeasure是

gitblog_00340的博客 970

如何快速上手视觉定位神器LocateAnything-3B:从零到精确定位的完整指南 [特殊字符]

想要让AI模型理解"图片中穿红衬衫的人在哪里"这样的指令并精准定位吗?LocateAnything-3B正是为此而生!这款由NVIDIA开发的视觉语言定位模型,能够在2.5倍于传统方法的速度下,实现高质量的视觉定位功能。无论是目标检测、文本定位还是GUI元素识别,它都能轻松应对。本文将通过简洁实用的方式,带你快速掌握这个强大的视觉定位工具。 ## 🌟 为什么选择LocateAnything-3

gitblog_00239的博客 397

Selective Context:上下文压缩神器,突破 LLM 长文本处理瓶颈

Selective Context 完成压缩的核心技术在于自信息测量。在信息论中,自信息衡量与一个事件相关的惊讶或不确定性水平;罕见事件传递更多信息,因此具有更高的自信息,而常见事件传递较少信息,自信息较低。在语言建模中,自信息可以用来评估词汇单元(如单词、短语或句子)的信息量。自信息较低的词汇单元信息量较少,更可能从上下文中推断出来,因此在 LLM 推理过程中,这些输入部分可以被视为冗余。

ck_reboot的博客 2253

chatgpt赋能python:如何编译Python代码

编译Python代码是将Python源代码转换成机器码,在不同的计算机中直接运行。这种方式带来的好处是运行速度得到了显著提升,因为不需要在每次运行时进行解释。这对于一些需要高性能的应用场景尤为重要。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于。

boRRjxBZRf的博客 385

5分钟打造Python开发神器:vim-plug插件管理器极简指南

vim-plug是一款极简的Vim插件管理器,它以简洁的设计、超快的速度和稳定的性能著称,能帮助Python开发者轻松管理Vim插件,提升开发效率。无论是新手还是资深用户,都能在几分钟内快速上手,让Vim瞬间变身强大的Python开发环境。 [![vim-plug标志](https://raw.gitcode.com/gh_mirrors/vi/vim-plug/raw/d72ac8734f64

gitblog_00702的博客 472

通义千问2.5代码解释器:分析Python脚本,开发者必备工具

本文介绍了基于星图GPU平台自动化部署“通义千问2.5-7B-Instruct大型语言模型 二次开发构建by113小贝”镜像的方法,助力开发者快速搭建AI代码分析环境。该镜像可高效解析Python脚本,支持多文件项目理解与依赖识别,典型应用于开源项目学习、模型微调及AI应用开发,显著提升代码理解与调试效率。

GoldenleafHawk37的博客 724

Python缓存优化神器:cachetools 5.5.0让应用性能飙升80% [特殊字符]

还在为Python应用响应缓慢而苦恼?**cachetools** 5.5.0版本正式发布,这个强大的Python缓存库能够彻底解决重复计算问题,让你的应用性能实现质的飞跃!作为Python生态中最全面的缓存解决方案之一,cachetools提供了多种记忆化集合和装饰器,包括标准库`@lru_cache`的增强变体,让开发者能够轻松实现高性能缓存策略。 ## 为什么你需要cachetools缓存

gitblog_00917的博客 319

AI代码工具实战避坑指南:5大认知断层与提效真相

AI编程助手不是智能补全插件,而是需要深度协同的‘认知协作者’。其核心原理在于对自然语言需求的多层语义解析、上下文信号的精准提取、执行环境的严格对齐、生成结果的业务化验证,以及团队协作中的规范收敛。技术价值体现在将隐性工程经验(如Redis锁策略、JWT签发约束、错误码体系)转化为可复用的Prompt资产和自动化守卫规则。典型应用场景包括Django登录接口开发、跨服务埋点API生成、遗留系统重构等真实交付任务。本文基于6个项目、4类技术栈的实测数据,直击AI编码中需求翻译失真、上下文理解偏差、沙盒环境错配

weixin_34242509的博客 427

Python抢票神器DamaiHelper:三分钟配置,轻松搞定热门演出门票

还在为抢不到心仪演唱会门票而烦恼吗?DamaiHelper是一款基于Python开发的自动化抢票助手,专门为音乐爱好者和技术用户设计,帮助你在激烈的票务竞争中脱颖而出。这款开源工具支持大麦网、淘票票、缤玩岛等多个主流票务平台,从登录验证到下单支付全程自动化,让抢票变得简单高效。 ## 🎯 为什么选择DamaiHelper抢票助手? 在热门演出开票的瞬间,手动操作往往难以应对秒杀级别的竞争压力

gitblog_00945的博客 234
上一篇: 如何用Python设计可扩展系统?5个工业级OOP案例深度剖析
下一篇: 【Python爬虫Cookie处理终极指南】:掌握会话管理核心技术,提升爬取效率90%
CodeIsle
博客等级 码龄1年 145粉丝 1966原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值