QQ数据库解密实战:全平台密钥提取与SQLite数据恢复指南

QQ聊天记录全平台解密:从密钥提取到数据库解析实战指南 数据加密是保护用户隐私的核心技术,其原理是通过特定算法和密钥将明文信息转换为不可读的密文。SQLCipher作为SQLite数据库的加密扩展,采用每页加密的方式,在本地存储中构建了安全防线。理解密钥生成与存储机制,对于实现跨平台数据迁移、深度分析与合规取证具有重要技术价值。在即时通讯、数据归档等应用场景中,自主解密能力能有效解决官方工具的功能限制。本文聚焦QQ聊天记录解密,通过逆向工程与动态调试技术,系统拆解Windows、Android等多平台的密钥提取方案,并深入解析SQLCipher加密体系与内存驻留 阅读详情

1. 项目概述与核心价值

最近在整理旧电脑资料时,发现一个困扰很多人的问题:那些年用QQ聊过的天,记录下的重要信息、珍贵的回忆,都静静地躺在加密的数据库文件里。无论是想找回一段重要的对话凭证,还是单纯想备份自己的数字记忆,面对QQ那层加密外壳,很多人往往无从下手。网上虽然有零散的教程,但要么语焉不详,要么只针对特定平台,缺乏一个清晰、完整、能贯穿始终的实战指南。

这正是“快速掌握QQ数据库解密”这个项目的核心价值所在。它不是一个简单的工具介绍,而是一套从原理到实操,覆盖Windows、macOS、Android、iOS、Linux等全平台的系统性解决方案。其目标非常明确:让你不仅能拿到那个被加密的.db文件,更能亲手解开它,将里面的聊天记录、图片、文件等元数据,以一种可读、可分析、可备份的格式恢复出来。整个过程涉及逆向工程、内存分析、密钥提取、数据库操作等多个层面的知识,但别被这些术语吓到,我会用最直白的方式,带你一步步走通。

对于普通用户,这可能是数据自救的最后手段;对于开发者或安全研究者,这是一个理解现代应用数据存储与加密机制的绝佳案例。无论你的动机是怀旧、取证还是纯粹的技术好奇,掌握这套方法,都意味着你拿回了对自己数据的部分控制权。接下来,我将拆解整个流程,从设计思路到每一步的实操细节,并分享我踩过的坑和总结的经验。

2. 核心思路与方案选型:为什么是“内存提取密钥”

在深入操作之前,我们必须先理解QQ(包括PCQQ和新的QQ NT架构)保护聊天记录的基本逻辑。它并非使用一个固定的、用户设置的密码,而是采用了一种“运行时动态密钥”的加密方案。简单来说,当你登录QQ时,客户端会在内存中生成一个密钥,并用这个密钥来加密/解密本地的SQLite数据库文件。这个密钥通常与你的登录态、设备信息等强相关,且不会明文存储在硬盘上。因此,解密的根本在于,如何在你登录QQ后,从它的进程内存中找到这个“正在使用”的密钥。

基于这个核心原理,社区衍生出了几种主流方案,各有优劣:

方案一:静态逆向与特征码搜索 这是最“硬核”的方法。通过反汇编工具(如IDA Pro)分析QQ的主程序文件,寻找数据库操作相关的函数(如SQLite的 sqlite3_key 调用),并定位密钥生成或传递的代码逻辑。一旦找到密钥的计算方法或存储位置,就可以编写脚本模拟生成密钥。这种方法通用性强,一次分析可长期使用,但技术门槛极高,需要深厚的逆向工程功底,且随着QQ版本更新,特征位置可能会偏移,需要重新分析。

方案二:动态调试与内存Hook 这是目前主流工具(如 qq-win-db-key 项目)采用的方法。其核心思想是:既然密钥必然在运行时出现在内存中,那我们就在它出现的时候“抓住”它。通过注入调试器(如GDB for Linux)或脚本引擎(如Frida for Android/iOS)到QQ进程,在关键函数(如打开数据库的函数)执行时设置断点或钩子,直接打印或导出此时传入的密钥参数。这种方法相对“温和”,不需要完全理解所有加密逻辑,只需定位到关键API调用点即可。它对不同平台的适应性也更好,因为Hook的往往是标准库函数或系统API。

方案三:备份文件提取(仅限移动端) 对于Android和iOS平台,存在一条“捷径”。系统或应用自身的备份功能(如Android的ADB备份、iOS的iTunes加密备份)有时会包含已解密的数据库文件,或者包含用于解密的密钥材料。通过解析这些备份包,有可能直接获得解密所需的信息。这种方法风险最低,不涉及修改或调试正在运行的应用,但成功率取决于备份的实现方式,并非百分百可靠。

为什么我们主要采用方案二(动态调试)? 在综合评估了可行性、成功率、跨平台一致性以及对普通用户的友好度后,动态调试提取密钥是目前最平衡的选择。它避免了静态逆向的复杂性和版本依赖问题,也比备份提取更直接、更可控。 qq-win-db-key 项目为我们提供了各个平台现成的脚本和明确的Hook点,大大降低了操作门槛。我们的实战将围绕这一方案展开,同时也会在适当环节提及备份提取作为补充或备选方案。

注意:风险评估与道德边界 任何涉及进程注入、内存调试的操作,都存在一定风险。轻则导致QQ客户端崩溃,当前聊天窗口未保存的信息丢失;重则可能触发客户端的反调试机制,导致账号被暂时冻结或功能限制(尽管不常见)。 因此,所有操作必须在虚拟机、备用电脑或不常用的设备上进行,并务必提前通过QQ自带的“消息记录迁移”功能或导出MHT格式,做好官方渠道的完整备份。 本指南仅用于学习数据恢复技术与个人数据备份,严禁用于窥探他人隐私或任何非法用途。

3. 环境准备与工具全平台解析

工欲善其事,必先利其器。不同平台的操作系统和QQ版本差异巨大,所需的工具链也完全不同。下面我将分平台列出核心工具及其作用,并说明选择它们的理由。

3.1 Windows平台(PCQQ / QQ NT)

这是用户基数最大的平台,也是工具链最成熟的场景。

  1. 目标QQ客户端 :建议使用官方安装包安装最新稳定版。同时,准备一个用于调试的QQ账号在虚拟机或备用电脑上登录。 绝对不要在主用账号、主用电脑上直接进行调试操作。

  2. Python 3.8+ :这是运行解密脚本的基石环境。大部分辅助脚本(如 pcqq_get_key.py )都是用Python编写的。推荐使用Anaconda或Miniconda创建独立的虚拟环境,避免包冲突。

    # 示例:创建并激活虚拟环境
    conda create -n qq_decrypt python=3.10
    conda activate qq_decrypt
    
  3. qq-win-db-key 项目代码 :从GitHub克隆或下载该仓库。这是我们获取密钥的核心工具包。

    git clone https://github.com/QQBackup/qq-win-db-key.git
    cd qq-win-db-key
    
  4. 调试器/注入器 :

    • 对于传统的PCQQ(旧版) :项目可能依赖 WinAppDbg 或直接使用Python的 ctypes 进行内存读取。需要确保你的Python环境能正常调用Windows API。
    • 对于QQ NT(新版) :由于架构变化,密钥获取方式不同。项目提供了 windows_ntqq_get_key.ps1 ,这是一个PowerShell脚本,它利用了Windows系统本身的诊断工具或特定的API来尝试定位密钥,有时比Python脚本更有效。
  5. 数据库查看工具 :获取密钥后,你需要用它来解密数据库。推荐使用 DB Browser for SQLite (SQLiteStudio) 。这是一个图形化工具,可以方便地打开解密后的.db文件,执行SQL查询,导出数据。

选择理由 :Python生态在逆向和自动化领域有巨大优势,库丰富,脚本易于修改。PowerShell是Windows原生强大的脚本工具,能深度集成系统功能,适合处理NT架构的新情况。图形化的SQLite工具则降低了后续数据查看的门槛。

3.2 macOS平台

macOS同样有QQ NT版本,但由于系统安全机制(SIP,系统完整性保护),操作限制更多。

  1. 目标QQ客户端 :从官网下载安装。
  2. Python 3 :通过Homebrew安装最为便捷: brew install p
QQ聊天记录本地数据库解密:逆向工程与数据恢复实战指南 在数据安全与取证分析领域,数据库加密是保护敏感信息的核心技术,其原理通常涉及密钥管理与加密算法。SQLite作为轻量级数据库,常被用于存储应用本地数据,而SQLCipher等扩展为其提供了透明的加密层。理解加密原理与密钥派生机制,对于数据恢复、合规审计及安全研究具有重要价值。在实际应用中,通过逆向工程分析内存数据或进程交互,可以探索在授权环境下提取密钥的方法。本文聚焦于即时通讯应用本地数据的保护机制,结合逆向工程与动态分析技术,系统阐述了QQ聊天记录数据库的加密演进、密钥提取原理及全平台解密流程,为合法场景 阅读详情

相关推荐

全平台QQ聊天记录数据库密钥提取与SQLCipher解密实战指南

SQLite作为轻量级嵌入式数据库,广泛应用于客户端数据存储,其通过SQLCipher扩展实现了透明的页级加密,核心技术涉及AES算法与PBKDF2密钥派生。这种加密机制在保护本地数据隐私的同时,也为合法数据恢复和迁移带来了挑战。在数据备份、取证分析和应用逆向工程等场景中,掌握密钥提取方法具有重要价值。本文聚焦于即时通讯软件QQ,其聊天记录采用SQLCipher加密存储于本地SQLite数据库。针对Windows、macOS、Linux、Android及iOS全平台,文章深入解析了QQ客户端在不同架构下的密

weixin_33736649的博客 534

QQ数据库解密与逆向分析:跨平台密钥提取与数据恢复实战

SQLite数据库作为移动应用和桌面软件广泛采用的本地数据存储方案,其安全性直接关系到用户隐私保护。SQLCipher作为SQLite的加密扩展,通过AES-256等强加密算法为数据库文件提供透明加密,确保数据在存储介质上的机密性。在数据恢复、司法取证和安全评估等场景中,理解加密原理并提取密钥成为关键。逆向工程通过静态分析与动态调试相结合,能够定位密钥派生函数,解析其依赖的设备标识符、用户账号等因子。以QQ数据库为例,其加密体系涉及多层密钥派生,需借助Frida等工具进行跨平台Hook,最终获取可用于解密的

weixin_33713350的博客 619

QQ数据库解密实战:逆向工程与数据恢复技术指南

数据加密是保护用户隐私的核心技术,其原理是通过特定算法将明文信息转换为不可读的密文,确保数据在存储和传输过程中的机密性。在本地数据存储场景中,常见的加密方式包括对称加密算法如AES、DES,以及非对称加密等。这些技术对于保护即时通讯、文件存储等应用的用户数据至关重要。从工程实践角度看,理解数据加密机制不仅有助于安全架构设计,也是进行合法数据恢复、司法取证和跨平台迁移的基础。例如,当用户需要迁移或恢复本地加密的聊天记录时,就需要涉及逆向工程分析加密流程、提取解密密钥等关键技术环节。本文聚焦于QQ数据库的解密实

weixin_34296641的博客 429

QQ聊天记录本地数据库解密:跨平台密钥提取与SQLCipher实战指南

在数据安全与隐私保护领域,本地加密存储是保护用户敏感信息的关键技术。其核心原理是通过加密算法对数据库文件进行整体或页级加密,确保未经授权无法直接访问。SQLCipher作为SQLite的加密扩展,广泛应用于各类应用的本地数据保护,通过动态密钥实现透明加解密。这项技术的价值在于平衡了数据安全性与访问便捷性,在数据备份、迁移、司法取证等场景中尤为重要。本文聚焦于QQ聊天记录本地存储,深入解析其SQLCipher加密机制,并详细介绍如何通过提取加密凭证、解密密钥材料、计算最终密钥的完整链条,实现跨平台(Windo

weixin_33831673的博客 454

QQ全平台数据库解密:逆向工程与SQLCipher实战指南

SQLite作为轻量级数据库,因其高效、可靠和跨平台特性,在移动应用和桌面软件中被广泛用于本地数据存储。为了保护用户隐私,开发者常使用SQLCipher等加密扩展对数据库进行透明加密,其原理是在SQLite核心之上集成加密模块,对数据页进行加密后存储。这项技术对于实现客户端数据安全、满足合规要求具有重要价值,常见于即时通讯、金融、健康等敏感数据应用场景。理解其加密机制,结合逆向工程进行密钥分析,是进行安全审计、数据恢复和深度开发的关键。本文以QQ数据库为例,详细解析如何通过静态分析与动态调试(如使用Frid

weixin_29327525的博客 359

QQ数据库解密与聊天记录恢复:逆向工程与AES加密实战

数据加密是保护用户隐私的核心技术,其原理是通过算法将明文转换为不可读的密文,确保数据在存储和传输过程中的机密性。对称加密算法如AES因其高效和安全性,被广泛应用于各类应用的数据保护中,其技术价值在于平衡了安全性与性能。在数据恢复、合规取证或安全研究等场景下,理解特定应用的加密机制成为关键。本文聚焦于即时通讯软件本地数据存储的逆向分析,深入探讨如何通过分析存储结构、识别加密算法(如AES-256)及推导密钥,实现对加密数据库文件的解密与内容提取,为数据恢复和移动应用安全研究提供实践思路。

weixin_30644369的博客 435

论文阅读4——一种宽频带圆极化微带天线的设计

论文阅读——一种宽频带圆极化微带天线的设计(现在才觉得开始弄懂了一点,懂了一点之后又更糊涂了……)

weixin_64612422的博客 2319

避坑指南:CentOS7.9安装Python3.8.16后yum报错的快速修复方法

本文详细解析了在CentOS7.9系统安装Python3.8.16后导致yum报错的原因,并提供了快速修复方法。通过修改yum配置文件指向Python2解释器,以及使用alternatives工具管理多版本Python,有效解决兼容性问题。同时推荐使用虚拟环境隔离开发环境,避免影响系统稳定性。

weixin_26908317的博客 498

Cadence Allegro 17.4学习记录开始02-原理图Capture CIS 17.4

Allegro的第一方网表与第三方网表有以下几个区别点;Ø 与Allegro实现交互式操作的是第一方网表,第三方网表时不可以实现交互式操作;Ø 第三方网表不能将器件的Value属性导入到PCB中,输出时以封装属性来代替Value属性,第一方网表是可以的;Ø 网表导入到PCB中时,第三方的网表需要指定事先指定好PCB封装库文件,并产生Device文件,才可以将网表导入到PCB中,第一方网表则可以直接导入。

qq_31444421的博客 1万+

【DRAM存储器五十六】LPDDR5介绍--WCK2CK Leveling和Read gate training

简述LPDDR5 WCK2CK leveling和read gate traning基本原理与操作步骤

highman110的博客 8798

华为ensp、思科eve、华为ensp pro中通过cloud桥接本地网络和联通互联网的方法

华为ensp、思科eve中通过cloud桥接本地网络和联通互联网的方法

suofen9703的博客 425

1、符号回归:原理、应用与实践

本文全面介绍了符号回归(Symbolic Regression)的原理、发展历程、核心算法及其在科学与工程领域的广泛应用。文章从基本概念出发,详细阐述了基于遗传编程的符号回归机制,并探讨了其在游艇水动力学、化学过程、锂离子电池、生物医学等多个领域的实际应用。同时,博文还涵盖了高级技术如知识集成、系数优化、预测区间计算及微分方程发现等内容,对比了开源与商业软件工具,并展望了未来发展趋势,旨在为研究人员和从业者提供一本实用的符号回归指南。

ipfs8storage的博客 250

手把手教你写上位机软件(c#、winform)

上位机软件模板

qq_34059233的博客 7万+

《用 R 探索医药数据科学》目录(持续更新,已超 250 万字)|订阅前说明

我们重磅推出《用 R 探索医药数据科学》专栏!本文作为专栏【订阅后首读】的核心内容,堪称开启学习之旅的 “入门钥匙”,也是整个专栏最关键的一篇指引文。文中不仅完整呈现了专栏 9 大核心篇章 + 问答板块的详细目录,更囊括了订阅后必知的核心要点 —— 从阅读设备、实操工具的使用建议,到学习路径、更新规则的清晰说明,再到问题反馈、感悟记录的实用方法,一站式帮你摸清专栏框架、找准学习方向。建议各位订阅者务必认真阅读、吃透内容,这能让你后续的学习更高效、少走弯!

MD Code 1万+

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

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

上一篇: 华硕路由器Samba高危漏洞CVE-2025-59366:认证绕过原理与安全加固指南
下一篇: 从AI小白到实战:深度学习成长路径与实战技巧
java_mail_test
博客等级 码龄18年 1粉丝 299原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值