【8周通关Python-游戏测试工程师 】105Python 函数

第33章 YOLO+OpenCV:视频流网络传输 本案例演示用视觉处理库连接网络视频流并逐帧显示画面。程序先打开流地址,再循环取帧、显示、等待按键退出,并用重试计数应对连接失败与读取中断。验证时关注窗口能否稳定出画、是否长时间卡顿黑屏、退出后终端有无报错。🌈 阅读详情


第1周 周五 Python学习执行方案(游戏测试定向)

今日学习时长:60分钟(30分钟理论 + 30分钟实战)
核心目标:掌握 Python 函数定义/调用 + 函数参数,把前4天的日志分析逻辑封装成可复用函数,实现「一次编写、多次调用」,让脚本从「临时工具」升级为「可复用测试组件」
前置衔接:完全复用前4天知识点(字符串操作、条件判断、循环语句),无超纲内容,核心是「逻辑封装」,这是游戏测试脚本复用的关键技能!


一、 理论学习(30分钟)

✅ 核心知识点1:函数的定义与调用(游戏测试脚本复用的核心)

1. 为什么需要函数?(解决前4天脚本的痛点)
前4天写的日志分析脚本,逻辑和数据混在一起:

  • 换一批日志要重新改代码;
  • 分级逻辑要重复写多次;
  • 脚本乱、难维护、不能复用。

函数的作用:把「日志拆分、等级判断、批量分析」这些固定逻辑抽离出来,封装成独立的函数,后续想分析日志时,直接调用函数就行,不用重复写代码!

2. 函数的定义语法(必记)

def 函数名(参数1, 参数2, ...):
    """函数说明文档:描述函数的作用(可选但建议写)"""
    # 函数体:封装的固定逻辑
    执行的代码
    return 返回值  # 可选:函数执行完后返回的结果

3. 函数的调用语法(必记)

# 调用函数:直接用函数名+参数,获取返回值
结果 = 函数名(参数1, 参数2)

游戏测试场景实操(必练)

# 实战1:封装「日志等级判断」函数(前4天的核心逻辑)
def get_log_level(log_line):
    """判断单条日志的等级:Crash>Error>Warning>Normal"""
    if "Crash" in log_line:
        return "【严重等级】"
    elif "Error" in log_line:
        return "【普通错误】"
    elif "Warning" in log_line:
        return "【警告等级】"
    else:
        return "【正常日志】"

# 调用函数:分析任意一条日志,直接获取结果
log = "2026-01-24 [Login] Crash:服务器崩溃"
level = get_log_level(log)
print(level)  # 输出:【严重等级】

✔️ 关键:函数内的逻辑是固定的,传入不同的日志参数,就能得到不同的结果,实现复用!

✅ 核心知识点2:函数的参数(让函数更灵活)

函数的参数决定了「函数能接收多少外部数据」,游戏测试中常用2种参数:

1. 必选参数(默认)
调用函数时必须传入的参数,不传就报错,适合「核心数据」(比如要分析的日志、角色名)。

# 必选参数:log_line是必传的,不传会报错
def parse_log(log_line):
    # 拆分日志的时间和模块(前4天的拆分逻辑)
    log_parts = log_line.split(" ", 3)
    log_time = log_parts[0] + " " + log_parts[1]
    log_module = log_parts[2]
    return log_time, log_module  # 函数可以返回多个值

# 调用:必须传log_line参数
log = "2026-01-24 10:00 [Prop] Error:道具发放失败"
time, module = parse_log(log)
print(f"时间:{time},模块:{module}")

2. 默认参数
调用函数时可以不传的参数,有默认值,适合「可选配置」(比如日志的分隔符、筛选的模块)。

# 默认参数:default_module默认值是"All",不传就用默认值
def filter_log(logs, default_module="All"):
    """筛选指定模块的日志,默认筛选所有模块"""
    result = []
    for log in logs:
        if default_module == "All" or default_module in log:
            result.append(log)
    return result

# 调用1:不传默认参数,筛选所有模块
all_logs = ["[Login] 登录成功", "[Prop] 道具错误"]
print(filter_log(all_logs))  # 输出所有日志

# 调用2:传默认参数,只筛选Login模块
login_logs = filter_log(all_logs, "Login")
print(login_logs)  # 只输出["[Login] 登录成功"]

✅ 今日理论学习【自测检查点】(全过=掌握)

  1. 能定义一个函数,封装「日志等级判断」逻辑;
  2. 能调用函数,传入不同日志获取等级;
  3. 能给函数加默认参数,实现「可选模块筛选」;
  4. 能让函数返回多个值(比如日志的时间和模块)。

二、 游戏测试实战任务(30分钟,核心:封装前4天的日志分析脚本)

✅ 任务场景(100%贴合工作)
把前4天写的「批量日志分析」脚本,拆分成 3个可复用函数,实现:

  1. parse_log():拆分单条日志的时间、模块、内容;
  2. get_log_level():判断单条日志的等级;
  3. batch_analyze_logs():批量分析日志列表,生成标准化报告;
    最终实现:换一批日志,不用改任何逻辑,直接调用函数就能分析!

✅ 完整可运行代码(文件名:game_log_function_analysis.py)

# ============== 游戏测试专用 - 日志分析函数封装版 ==============
# 函数1:拆分单条日志的时间、模块、内容(封装字符串操作逻辑)
def parse_log(log_line):
    """
    拆分单条游戏日志
    :param log_line: 原始日志字符串
    :return: log_time(时间), log_module(模块), log_content(内容)
    """
    log_parts = log_line.split(" ", 3)
    log_time = log_parts[0] + " " + log_parts[1]
    log_module = log_parts[2]
    log_content = log_parts[3]
    return log_time, log_module, log_content

# 函数2:判断单条日志的等级(封装条件判断逻辑)
def get_log_level(log_line):
    """
    判断日志等级:Crash>Error>Warning>Normal
    :param log_line: 原始日志字符串
    :return: 日志等级字符串
    """
    if "Crash" in log_line:
        return "【严重等级】"
    elif "Error" in log_line:
        return "【普通错误】"
    elif "Warning" in log_line:
        return "【警告等级】"
    else:
        return "【正常日志】"

# 函数3:批量分析日志列表(封装循环+筛选逻辑,调用上面2个函数)
def batch_analyze_logs(log_list, target_module="All"):
    """
    批量分析游戏日志,生成标准化报告
    :param log_list: 日志列表
    :param target_module: 要筛选的模块,默认All(所有模块)
    :return: 无返回值,直接打印分析报告
    """
    print("===== 游戏日志批量分析报告【函数封装版】=====\n")
    abnormal_count = 0  # 异常日志计数
    # 循环遍历日志(核心逻辑和前4天一致,但封装成了函数)
    for log in log_list:
        # 跳过非目标模块的日志(默认不跳过)
        if target_module != "All" and target_module not in log:
            continue
        # 调用函数拆分日志、判断等级
        log_time, log_module, log_content = parse_log(log)
        log_level = get_log_level(log)
        # 统计异常日志
        if log_level != "【正常日志】":
            abnormal_count += 1
        # 打印单条日志分析结果
        print(f"{log_level} | 时间:{log_time} | 模块:{log_module} | 内容:{log_content}")
    # 打印统计信息
    print(f"\n📊 分析完成:共分析{len(log_list)}条日志,发现{abnormal_count}条异常日志")

# ============== 调用函数:直接分析日志,不用改上面的逻辑 ==============
if __name__ == "__main__":
    # 测试日志列表1:可以直接替换成工作中的真实日志
    test_logs_1 = [
        "2026-01-24 09:00:00 [Login] 玩家-星河-登录成功",
        "2026-01-24 09:05:00 [Prop] Error:道具ID=2001发放失败",
        "2026-01-24 09:10:00 [Combat] Warning:技能冷却时间异常",
        "2026-01-24 09:15:00 [Login] Crash:服务器验证超时崩溃"
    ]

    # 调用1:分析所有模块的日志
    batch_analyze_logs(test_logs_1)

    # 调用2:只分析Login模块的日志(传target_module参数)
    print("\n" + "-"*50 + "\n")
    batch_analyze_logs(test_logs_1, target_module="Login")

✅ 运行结果(标准化报告,直接可用)

===== 游戏日志批量分析报告【函数封装版】=====

【正常日志】 | 时间:2026-01-24 09:00:00 | 模块:[Login] | 内容:玩家-星河-登录成功
【普通错误】 | 时间:2026-01-24 09:05:00 | 模块:[Prop] | 内容:道具ID=2001发放失败
【警告等级】 | 时间:2026-01-24 09:10:00 | 模块:[Combat] | 内容:技能冷却时间异常
【严重等级】 | 时间:2026-01-24 09:15:00 | 模块:[Login] | 内容:服务器验证超时崩溃

📊 分析完成:共分析4条日志,发现3条异常日志

--------------------------------------------------

===== 游戏日志批量分析报告【函数封装版】=====

【正常日志】 | 时间:2026-01-24 09:00:00 | 模块:[Login] | 内容:玩家-星河-登录成功
【严重等级】 | 时间:2026-01-24 09:15:00 | 模块:[Login] | 内容:服务器验证超时崩溃

📊 分析完成:共分析4条日志,发现1条异常日志

✅ 实战验收标准(做完即达标)

  1. 脚本运行无报错,输出和上面一致;
  2. 新增一批日志(比如加2条Combat模块的日志),直接传入batch_analyze_logs()函数,不用改函数逻辑,就能正确分析;
  3. 只分析Prop模块的日志,传入target_module="Prop"参数,验证是否只输出Prop模块的内容。

三、 今日知识点 查漏补缺 + 游戏测试扩展技巧

✔️ 今日函数核心知识点总结

  1. 函数定义:用def关键字,把固定逻辑封装起来,实现复用;
  2. 函数调用:函数名+参数,想分析日志时直接调用,不用重复写代码;
  3. 函数参数:
    • 必选参数:必须传值(比如log_line),保证函数能运行;
    • 默认参数:可选传值(比如target_module),让函数更灵活;
  4. 函数返回值:用return返回结果,可以返回单个值,也可以返回多个值(用逗号分隔);
  5. 核心价值:一次封装,多次调用 → 这是游戏测试脚本从「一次性」到「可复用」的关键!

✔️ 游戏测试扩展小技巧(学完马上用)

  1. 替换真实日志:把test_logs_1列表换成工作中的真实游戏日志,直接调用batch_analyze_logs()函数,就能生成分析报告;
  2. 增加异常日志导出:在batch_analyze_logs()函数里加一行代码,把异常日志写入txt文件(with open("异常日志.txt", "w") as f: f.write(log)),方便提交bug单;
  3. 封装角色数据生成函数:把周一的角色信息管理逻辑封装成函数generate_role_data(count),传入count参数(生成角色数量),就能批量生成指定数量的角色数据。

四、 今日打卡与复盘表(直接填写)

打卡项目完成情况(√/×)复盘记录
理论学习30分钟(函数定义/调用/参数/返回值)1. 已掌握:函数的定义语法、调用方法、必选/默认参数、多值返回
2. 疑问点:
编写 game_log_function_analysis.py 脚本并运行成功1. 运行结果:是否成功运行,有无报错
2. 遇到的报错及解决方法:
例:忘记写return → 函数没有返回值,补充return语句
游戏测试场景关联思考该脚本可用于测试中:
① 测试服每日日志分析,直接调用函数,不用重复写代码
② 筛选指定模块的日志,快速定位模块问题
③ 封装成通用工具,分享给同事使用
第一周学习复盘(5天知识点汇总)第一周核心技能:变量/数据类型 → 字符串操作 → 条件判断 → 循环 → 函数封装
已实现:从「写零散代码」到「封装可复用函数」的跨越,能解决游戏测试中80%的批量数据处理问题

五、 第一周学习总结

第一周核心成果(你已经掌握的技能)

  1. 基础语法:变量、数据类型(int/str/list)、输入输出(print/input);
  2. 核心操作:字符串拆分/拼接/查找(split/join/find);
  3. 逻辑控制:条件判断(if-elif-else)、循环(for/while)、循环控制(break/continue);
  4. 进阶技能:函数定义/调用/参数/返回值 → 实现代码复用;
  5. 实战能力:能独立编写「游戏日志批量分析脚本」和「角色数据生成脚本」,直接用于工作提效!
大模型应用开发 100 天:Python + LLM 从入门到精通 day35~链(Chains):将组件串联成工作流 链(Chain)本质上是一个有向无环图(DAG)节点:各个组件(Prompt、LLM、Parser、Tool 等)边:数据流向(前一个组件的输出 → 后一个组件的输入)fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;链的本质:有向无环图输出: messages输出: text输出: dict输出: result组件 APrompt。 阅读详情

相关推荐

Vivado+VCS+Verdi三件套实战:如何高效仿真AXI VIP并快速查看波形

本文详细介绍了如何利用Vivado+VCS+Verdi工具链高效仿真AXI VIP并快速查看波形。通过环境配置、Vivado工程准备、VCS编译与仿真优化以及Verdi波形分析技巧,实现仿真速度的数量级提升,显著提高FPGA开发效率。

red88的博客 992

【8周通关Python-游戏测试工程师 】周计划

本文提供了一个为期8周的Python游戏测试自动化学习计划,计划采用“理论+实践”的每日学习模式(60分钟/天),通过真实游戏测试场景驱动技能提升,最终实现编写实用测试脚本、优化测试流程的目标。

u013625540的博客 1036

vivado生成及调用自定义IP的方法

开发环境:vivado 2018.2 1.将整个工程封装为自定义IP 将整个工程封装为自定义IP主要有以下步骤: 步骤1.选中工程中的top模块。点击Tools ------> Create and Package New IP,如图1所示 图1 步骤2.弹出界面后,点击next至图2界面,选择Package your current project,然后继续点击next 图2 步骤3.选择生成的IP路径,如图3所示。这个路径就是后续添加该IP的路径 图3 步骤4.继续点击next,然后选择fi

进击的阿日比 4722

python熟手-排序类问题

sorted()和sort()都支持key和reverse传参。跟上面排序是一类问题,但是如果直接用排序,快排时间复杂度O(Nlog(N)),成本相对高。改用小顶堆复杂度会降低到O(N)。key=lambda x: x[1] # 按下标 1。key=lambda x: x["score"] # 按字典字段。key=lambda x: x.age # 按对象属性。key=lambda x: (x[1], x[0]) # 多条件排序。

Codnn的专栏 146

【小白教程】本地部署VLM-R1模型(使用Docker)

通过Docker本地部署VLM-R1大模型,详细教程。

m0_69855053的博客 2929

从原理图到PCB:基于Allegro的8槽PXIe背板高速设计实战

本文详细介绍了基于Allegro软件进行8槽PXIe背板高速设计的完整实战流程。从理解规范、原理图设计、PCB布局规划,到高速PCIe差分对与精密时钟的布线艺术,再到电源与地处理以及最终的设计验证与生产文件输出,系统性地阐述了确保背板信号完整性、电源完整性和系统稳定性的关键技术与工程实践。

weixin_28312391的博客 196

4 个 Agent 从空手到屠龙

当上下文过长时,智能体会对上下文做压缩处理;提示指令要求智能体记住那些压缩后不能丢失的信息,例如正在进行的(work in progress)工作、后续计划步骤(next steps)。可以借鉴到日常的智能体开发中。

wangkai6666的博客 179

全网首发--Unet3+改进16:在不同位置添加RepLKBlock超大卷积核

本文提出了一种基于大核卷积的神经网络架构RepLKNet,旨在缩小CNN与ViTs之间的性能差距。通过重新审视CNN中的大核设计,研究证明使用少量大卷积核替代多个小核能获得更强大的性能。提出的RepLKNet采用31×31大卷积核,在ImageNet和下游任务上取得了与SwinTransformer相当或更好的结果,同时具有更低延迟。文章详细介绍了实现步骤:(1)创建RepLKBlock模块文件;(2)在模型层中添加注意力机制;(3)在UNet模型中集成RepLKBlock;(4)完成训练流程。该方法展现了

AIcurator的博客 586

计算机毕设推荐:基于深度学习的动物图像识别方法研究(Python+Django+PyTorch)

本文围绕基于深度学习的动物图像识别方法研究,介绍一套从数据到网站都能跑通的完整方案。数据用Kaggle公开数据集,共15类动物,按原图分组划分训练、验证和测试集,避免相近图片跨集让指标虚高。模型用PyTorch做迁移学习,主模型选ResNet-50,另训ViT和EfficientNet两个对比模型,在相同条件下评估。网站用Django加Vue搭建,支持图片、视频、摄像头三种识别,带识别历史和统计大屏。

WEIXIN_JSJBSZDS的博客 227

大模型的实践应用31-基于通义千问大模型改进台风和海浪预测研究,利用机器学习与通义千问结合的思路实现对台风和海浪预测分析

通义千问大模型是阿里巴巴云推出的一款大规模语言模型,旨在通过强大的自然语言处理能力提供更广泛的服务。从最初的构想到如今的广泛应用,通义千问的发展见证了人工智能领域尤其是自然语言处理技术的巨大进步。自发布以来,通义千问不断迭代升级,不仅在规模上实现了飞跃式的增长,在性能方面也得到了显著提升。本次研究尝试将通义千问强大的自然语言处理能力与经典的时间序列预测算法相结合,旨在提高对未来天气状况预测的精度。具体来说,首先使用通义千问生成高质量的文字描述来增强特征表达力;

微学AI的博客 926

【YOLO26实战全攻略】10——YOLO26+SAM3实战:从检测到像素级分割的全流程指南(含PCB缺陷检测案例)

本文聚焦YOLO26与SAM3的融合应用,系统讲解“检测+分割”的三种核心模式:YOLO26原生分割(轻量高效)、YOLO26检测+SAM3精细分割(精度极致)、SAM3自动标注+YOLO26蒸馏(低成本冷启动)。从环境搭建、数据集准备、模型训练、性能优化到边缘部署,提供 step-by-step 实操教程,配套完整可运行代码与执行结果。结合虚拟PCB缺陷检测案例,展示像素级缺陷识别与几何参数测量的工业级应用流程。本文兼顾新手入门与进阶提升,注重实用价值,读者可直接参考搭建自己的分割系统。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 613

Python 浏览器自动化:Selenium vs Playwright 底层原理、实现细节 + Codex 大模型为什么能自主操控浏览器登录填表

Selenium。缺点维护成本高,不适合对接 AI。Playwright,CDP+AX 语义树是核心优势。用自然语言代替硬编码选择器,让 AI 看懂网页语义,自主完成多步网页任务。传统自动化是 “人告诉程序每一步点击哪里”;AI 浏览器 Agent 是 “人告诉程序目标,AI 自己观察页面,决定点哪里,自主完成任务”。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 317

推荐11个顶级的Claude Code Skills

ClaudeCode的Skills系统为程序员提供了11个强大的AI辅助工具,包括代码审查、重构建议、单元测试生成、API文档自动生成、性能分析、安全扫描、数据库迁移脚本生成、CI/CD配置、依赖管理、ER图生成和日志分析等功能。这些"技能包"可大幅提升开发效率,从代码质量到协作沟通全方位优化工作流程。用户可根据需求选择2-3个核心功能开始尝试,熟练后还可自定义Skills。该系统需要配合Anthropic的API使用,建议先在小型项目测试再应用于核心业务。

分享AI、区块链技术及应用,未来已来 1825

【Harness】Claude Code 开发 Python 项目:编码规范控制的完整方案

本文提出一套基于Claude Code的Python开发规范体系,强调以Ruff、mypy、pytest等工具为核心,结合pre-commit与CI实现质量门禁。通过分层架构:CLAUDE.md定义规则,.claude/rules/细化编码标准,skills/固化开发流程,hooks/自动触发检查,确保代码风格统一、类型安全、测试完备。项目结构清晰,职责分明,真正实现“规范可执行、质量可保障”。

I'm Zz. 291

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

6-1.Python 异常处理 - 异常处理引入(异常引入、异常捕获)

6-1.Python 异常处理 - 异常处理引入(异常引入、异常捕获)

weixin_52173250的博客 214

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

《Java版数据结构 & 集合类剖析》Map & Set & 反射:“从哈希碰撞到红黑树转换,反射帮你扒开 HashMap 的桶数组看个究竟”

本文系统剖析Java中Map与Set的数据结构基础——二叉搜索树(BST),涵盖其插入、查找、删除等核心操作,并通过代码实现展示其实现逻辑。重点分析了BST的性能瓶颈及其在极端情况下的退化问题,引出平衡二叉树(如红黑树)的重要性。进一步阐述了TreeMap与TreeSet底层基于红黑树的实现机制,揭示其高效动态查找能力。最后结合键值对模型,说明Map与Set在实际应用中如何支持高效的动态搜索,为理解Java集合框架中的高级数据结构奠定基础。

2401_88739751的博客 237

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

老显卡可以提高NVIDIA 显卡驱动(Driver)、 CUDA 版本以适配更高版本 PyTorch:完整操作指南

本文详细介绍了如何通过升级NVIDIA驱动并安装对应版本的CUDAToolkit,提升系统支持的CUDA版本以兼容更高版本的PyTorch。核心步骤包括:确认显卡型号、更新驱动至最新版(通过官网下载),确保nvidia-smi显示的CUDAVersion提升;随后根据驱动上限和PyTorch需求,下载安装匹配的CUDAToolkit(注意避免覆盖驱动);最后安装对应CUDA版本的PyTorch。关键点为驱动版本 ≥ CUDA版本 ≥ PyTorch版本,且多版本可共存,通过环境变量切换。建议使用虚拟环境隔离

qq_60074111的博客 144

【Python】标准多态和鸭子多态

【Python】标准多态和鸭子多态

qq_43494013的博客 172

PyTorch 线性层nn.Linear底层数学原理

揭示本质nn.Linear并不是什么魔法,它的底层就是yxWTbyxWTb的矩阵运算。权重互通:PyTorch 的模型参数可以无缝导出到 NumPy 进行自定义计算,反之亦然(只要维度对齐)。调试与理解:通过手动复现,开发者可以深入理解神经网络每一层的数据流向和变换过程,这对于调试模型或实现自定义算子非常有帮助。一句话概括:这段代码展示了如何用纯数学公式(NumPy)完美复刻 PyTorch 线性层的计算过程,证明了框架底层的数学原理。

m0_57307213的博客 360

【第62期】导数有限差分步长过小反而变差:偏导、梯度与方向导数完整实验

系列:《从小白到 AI 大模型开发工程师的进阶之路》 技术点:AI-0216 导数与偏导数 主人公:小蓝伞 前置:AI-0211 标量、向量和张量 本期产出:独立实验脚本、原始输出、失败样本和验收清单小蓝伞在教学演练中校验指数函数的导数,将步长从千分之一缩到万亿分之一,结果却离解析值更远。本文用可复跑的数据解释这条反直觉曲线。本期按准备环境、运行完整脚本、读取结果和复验失败的顺序完成实践。偏导固定其他坐标,只观察一个坐标的局部变化;梯度把所有偏导组织成向量;单位方向导数是梯度与单位方向向量的内积。

qq_36085846的博客 453

如何用 Python 计算信息比率(IR)和跟踪误差?

衡量你「相对基准(比如沪深300)每承担一单位超额波动,能换来多少超额收益」——它是夏普比率的「相对版」。先用 AlphaFeed 取个股与基准指数的,算出每日,主动收益的年化均值就是分子、年化标准差(即)就是分母,相除即得 IR。IR 越高,说明超额收益越稳、越不是靠运气。

2601_96288572的博客 257

欧盟电子发票(XRechnung/Peppol/ZUGFeRD)踩坑记:用 Python 不装 Java 跑官方校验规则

德法比推行企业间结构化电子发票(EN 16931)。本文讲金额怎么算才能过校验、怎么用 Python + saxonche 不装 Java 跑 XRechnung/Peppol 官方 Schematron,以及 Leitweg-ID 校验位这类官方规则查不到的坑,并介绍开源工具 eu-einvoice。

weixin_38859100的博客 233

【从0-1学习Python | 第八篇】封装

本文以Car类为例,阐述Python封装机制:通过命名约定(单/双下划线)区分公有与私有成员,双下划线成员经名称改写为_类名__原名,实现有限保护。虽可通过改写名访问私有成员,但Python遵循“君子协议”——允许访问,不建议使用。封装旨在提供稳定接口,避免外部依赖内部实现,强调应通过公有方法而非直接操作内部状态来交互。

一个持续进化的java+ai学习者博客:AI Agent 工具链(Codex、Harness、Claude Code、MCP、Skills)实战笔记 + 后端开发教程,每周稳定更新。 187

GLM5.3 CyberSec w4A16本地部署[4]:显存预算与上下文优化

GLM5.3 CyberSec w4A16本地部署[4]:显存预算与上下文优化

缘友一世的博客 409

3d 网格布尔几何 Manifold

3d 网格布尔几何 Manifold

jacke121的专栏 150

Python 赋值运算符详解 | 从 = 到 +=,一张记账单讲清复合赋值

用一个小账本,把赋值运算符和复合赋值一次认全。

夜晚回家 241
上一篇: 【8周通关Python-游戏测试工程师 】104循环语句(for+while)+循环控制(break/continue)
下一篇: 【8周通关Python-游戏测试工程师 】106整合第一周全部知识点(变量/字符串/条件判断/循环/函数)
HWC.K
博客等级 码龄13年 15粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HWC.K

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值