Windows Hook技术实战:PC微信日志监控与自动化处理方案

基于hook开发得微信群关键词监控朋友圈关键词监控转发 在对特定的系统事件进行hook后,一旦发生已hook事件,对该事件进行hook的程序就会收到系统的通知,这时程序就能在第一时间对该事件做出响应。话不多说通过扫描二维码PC端登录,朋友圈发布任何消息和图片,可以实时自动采集,然后会实时采集这个人所发的朋友圈内容、并附上发圈人名片、图片,自动发送到指定的群里 (比如“南京”“NJ” 只要出现南京这个关键词就会实时自动采集内容,发送到指定的群里)有客户在群里问关于业务关键词问题时,自动通知提示到您设定的工作微信上发提示信息,信息可以设置。一、群设定自定义选择。 阅读详情

1. 项目概述与核心价值

最近在做一个需要深度集成微信PC端能力的项目,发现直接调用官方API的路子基本走不通,很多业务场景下的数据获取和操作自动化都成了难题。比如,你想实时监控某个关键客户的聊天动态,或者自动备份重要的群聊文件,甚至是想基于特定的消息内容触发一系列自动化工作流,这些需求在官方提供的接口里都找不到影子。这时候,很多开发者就会把目光投向更底层的技术——Hook(钩子)。我这次折腾的“PC微信日志监控”,本质上就是通过Hook技术,拦截并解析微信客户端内部产生的日志流,将其转化为结构化的、可编程处理的数据源,从而为后续的自动化操作铺平道路。

为什么是日志监控,而不是直接Hook消息收发函数?这里面的考量很实际。直接Hook核心业务函数(如发送消息、接收消息)技术门槛高、稳定性差,微信每次更新都可能让之前的Hook点失效,维护成本巨大。而日志系统相对稳定,它作为客户端内部用于记录运行状态、通信过程甚至部分业务数据的通道,虽然格式可能变化,但其输出的必要性和频率决定了它不会像业务函数那样被频繁重构。通过监控日志,我们可以以一种相对“温和”且稳定的方式,窥探到微信客户端的内部活动。本次基于3.9.12.51版本进行探索,这个思路对于其他版本甚至其他桌面应用也有一定的参考价值。这个项目适合有一定Windows桌面开发基础,对逆向工程、进程注入感兴趣,并且有强烈自动化需求的开发者。它不涉及破解或修改微信本身,而是专注于“监听”和“解读”,属于一种辅助性的开发技术。

2. 技术选型与Hook原理深度剖析

要实现日志监控,首先得确定技术路线。市面上常见的方法有几种:内存扫描定位日志缓冲区、拦截文件写操作、或者直接Hook日志输出函数。经过对比,我选择了最后一种——Hook关键的日志输出函数。原因在于,内存扫描不稳定,日志缓冲区地址易变;拦截文件写操作(例如通过 WriteFile )虽然可以,但微信的日志可能先于写入文件前在内存中处理,且会引入大量无关的磁盘I/O Hook,增加复杂度。直接Hook微信模块内部的日志函数,能够最直接、最精准地捕获到原始的日志数据流。

2.1 Hook技术的核心:Detours与MinHook

在Windows平台下,实现API Hook的成熟方案很多,我主要评估了微软官方的Detours和轻量级的MinHook。Detours功能强大且稳定,是工业级标准,但它的商业使用需要授权,对于个人或开源项目来说,MinHook是一个更友好、纯粹的选择。MinHook是一个支持x86/x64的HOOK库,它的原理是“内联钩子”(Inline Hook),通过修改目标函数头部的机器指令,将其跳转到我们自定义的代理函数(Detour Function),执行完我们的逻辑后再跳转回原函数。

这个过程可以简单理解为:微信的日志函数(比如叫 WeChatLogOutput )原本在模块A里安静地工作。我们的注入器将包含MinHook和自定义代理函数的DLL注入到微信进程。MinHook会找到 WeChatLogOutput 函数在内存中的地址,然后修改其开头的几个字节,替换为一条 JMP 指令,直接跳转到我们写在DLL里的 MyWeChatLogOutput 函数。这样,每当微信内部调用日志函数时,控制权就先到了我们手里。我们在 MyWeChatLogOutput 里可以拿到原始的日志字符串参数,进行解析、过滤、转发到我们的监控程序,然后再调用原来的 WeChatLogOutput 函数(MinHook会为我们保留原函数入口点),让日志继续它原本的旅程,不影响微信的正常运行。这种方式对目标进程的影响最小,稳定性相对较高。

2.2 定位关键日志函数:逆向分析入门

确定了Hook方案,下一个挑战是:微信的日志输出函数叫什么?在哪里?这需要一点基础的逆向分析。我们不需要成为逆向专家,但需要会用一些工具。我的常用组合是 Cheat Engine (CE)用于动态扫描和调试, IDA Pro 或 Ghidra 用于静态分析。首先,我们可以利用一个已知的日志内容来定位。例如,在微信中执行一个特定操作(如发送一条带特殊字符的消息),同时用CE附加微信进程,对内存进行字符串扫描,寻找我们刚刚发送的那条消息内容或其相关的日志文本。找到内存地址后,通过CE查看是哪些代码访问了这个地址,往往就能回溯到写入该日志的函数调用链。

更直接的方法是使用调试器下断点。假设我们通过字符串搜索或经验猜测,日志函数可能类似于 OutputDebugStringA (Windows调试输出)或者内部函数。我们可以对 OutputDebugStringA 下断点,然后在微信里操作,看是否会触发。如果触发,查看调用栈,就能找到微信内部调用它的模块和函数偏移地址。结合静态分析工具如IDA Pro,加载微信的主模块 WeChatWin.dll ,找到对应的函数偏移,分析其函数原型(参数个数、类型)。通常,一个日志函数会接收日志级别、模块名、格式化字符串和可变参数,其签名可能类似于 void LogOutput(int level, const char* module, const char* format, ...) 。通过交叉验证(如修改参数看输出变化),最终确定我们要Hook的目标函数。

注意 :逆向分析应仅用于学习与研究与自己拥有合法使用权的软件交互的可行性,以开发辅助性工具。所有操作需在本地环境进行,绝对禁止用于破解、制作外挂、窃取他人信息等非法用途。本指南旨在分享技术思路,请务必遵守法律法规和软件用户协议。

3. 监控系统架构设计与实现

整个监控系统可以划分为三个核心部分:注入器(Injector)、钩子动态库(Hook DLL)和日志处理服务(Log Processor)。它们协同工作,形成一个从数据捕获到数据消费的完整管道。

3.1 注入器(Injector)的实现

注入器的职责是将我们的Hook DLL加载到目标微信进程的地址空间中。我选择使用远程线程注入的方式,这是Windows平台最经典的方法。步骤如下:

  1. 获取目标进程权限 :
基于Hook技术的PC微信机器人实战:逆向分析与自动化实现 在Windows平台软件开发中,Hook(挂钩)技术是一种通过拦截和修改程序执行流程来实现功能扩展或监控的核心方法。其原理在于动态地将自定义代码注入目标进程,从而在关键函数调用点获取控制权,实现对程序行为的监听与干预。这项技术的价值在于能够绕过官方接口限制,实现高效、稳定的进程间通信与控制,广泛应用于自动化测试、安全监控、软件调试等领域。结合逆向工程分析定位关键函数,Hook技术能够精准对接具体应用场景,例如实现PC端应用的自动化操作。本文聚焦于PC微信机器人开发,通过Hook技术解决消息监听与自动回复等自 阅读详情

相关推荐

深入解析DLL注入与Hook技术:以微信客户端自动化监控为例

DLL注入是Windows平台下一种经典的进程间通信与代码执行技术,其核心原理在于将自定义的动态链接库加载到目标进程的内存空间,从而获得在该进程上下文中的代码执行能力。这项技术常与函数挂钩(Hook)结合使用,通过拦截或修改目标进程的API调用或内部函数执行流程,实现对程序行为的监控、分析与扩展。从技术价值看,DLL注入为软件调试、安全研究、自动化测试及遗留系统功能扩展提供了底层实现手段。在应用场景上,它常见于桌面软件自动化、游戏辅助工具开发、安全软件行为监控以及逆向工程分析等领域。本文以PC端微信客户端的

weixin_34319817的博客 405

微信Hook自动化终极指南:从原理到实战,三种方案深度解析

自动化技术旨在通过程序替代人工,执行重复性任务,从而提升效率与准确性。其核心原理在于对目标系统进行识别、交互与控制。在即时通讯与社交管理领域,自动化技术能显著解决信息过载、响应延迟与流程繁琐等痛点,广泛应用于社群运营、客户服务、消息分发等场景。其中,微信作为核心的社交与工作平台,其自动化需求尤为突出。本文聚焦微信自动化,深入剖析基于外部模拟、协议逆向与Hook注入三大技术路径。重点解析Hook技术,通过内存注入与函数挂钩,实现对微信客户端的深度、稳定控制,并探讨其与开源框架(如WeChatFerry)及自动

weixin_33966095的博客 482

微信PC端Hook机器人实战:从进程注入到消息自动化

进程注入与API Hook是Windows系统编程和软件逆向工程中的核心技术。进程注入允许外部代码加载到目标进程的内存空间,而API Hook则能拦截并修改特定函数的执行流程。这两项技术的结合,为软件功能扩展、行为监控和自动化测试提供了底层支持,在安全研究、自动化工具开发等领域有广泛应用。通过Hook技术,开发者可以深入理解应用程序的内部工作机制,并在此基础上实现定制化功能。本文以微信PC版为例,详细拆解了如何利用远程线程注入和内联Hook技术,构建一个能够拦截和处理消息的自动化机器人,涵盖了从环境搭建、偏

weixin_33892359的博客 341

PC微信自动化开发实战:vxhook2.9核心原理与避坑指南

Hook技术是Windows平台实现程序行为监控与修改的核心机制,其原理是通过拦截目标进程的函数调用或消息传递路径,插入自定义代码逻辑。这项技术在软件调试、安全监控及自动化测试领域具有重要价值,尤其适用于对闭源桌面应用进行程序化交互的场景。本文聚焦于PC端微信自动化这一具体应用,深入剖析了基于Hook技术实现的vxhook2.9方案。该方案通过注入DLL钩住微信关键消息处理函数,并对外提供HTTP/WebSocket API,实现了消息监听、自动回复、群管理等自动化功能。文中结合**版本兼容性**与**防检

culiao2169的博客 506

PC微信消息Hook实战:逆向定位与稳定获取方案解析

Hook技术是软件逆向工程与安全分析中的核心方法,它允许开发者在目标程序执行流程的关键节点插入自定义代码,从而实现对程序行为的监控、修改或数据提取。其原理是通过修改目标函数在内存中的指令,将执行流重定向到开发者控制的函数,在完成定制逻辑后再跳回原流程。这项技术的价值在于提供了从进程内部观察和干预的视角,克服了网络嗅探等外部方法的局限,广泛应用于自动化测试、安全审计、功能扩展等场景。在即时通讯软件的深度集成与自动化处理需求中,稳定获取客户端实时消息流是一个典型应用。本文以PC微信为例,深入探讨如何通过逆向分析

weixin_34050005的博客 339

基于易语言的微信PC端Hook技术实战解析

Hook(钩子)是一种拦截程序正常执行流程的技术,广泛应用于函数调用劫持、行为监控与功能扩展。在Windows系统中,Hook主要分为用户态Hook与内核态Hook两类。前者运行于应用层,通过修改进程内存中的函数入口指令实现拦截,具备开发门槛低、调试便捷的优点;后者则深入操作系统内核,可监控全局事件但需驱动支持,安全限制更严。对于微信PC客户端这类用户态应用程序,因其未提供官方API支持,开发者普遍采用用户态Hook进行功能拓展。

weixin_29050829的博客 923

wxwork-pc-api:基于Windows HOOK的企业微信PC端协议桥接方案

企业微信PC客户端采用Electron混合架构与自定义二进制协议(WebSocket+TLV+AES-CBC加密),其通信逻辑封闭且Token动态刷新,导致传统HTTP代理、OCR或内存扫描等自动化手段失效。理解其底层通信原理是实现稳定办公自动化的前提——需在数据加解密‘黄金时刻’截获原始结构体,而非逆向破解。wxwork-pc-api正是为此设计的生产级协议桥接层,通过Microsoft Detours实现安全inline hook,精准拦截ws_send_frame等关键函数,还原会话列表、消息收发等业

weixin_34252686的博客 380

C# PC微信消息监听自动回复:HOOK与内存读取实战

Windows消息钩子(HOOK)是一种在系统层面拦截窗口消息的底层技术,通过SetWindowsHookEx实现,可实时捕获进程间通信数据。其技术价值在于绕过UI自动化对控件树的依赖,直接读取内存或消息流,实现高实时性与稳定性。在客服辅助、群消息监控等场景中,该技术能自动匹配关键词并触发回复,显著降低重复劳动。结合内存读取与消息队列解耦,可构建可控的PC端微信消息监听自动回复系统,适用于有C#基础的桌面端开发者。

weixin_34101914的博客 166

Grid++Report6.7.2.zip

包含oracle数据库连接的动态库,很适合报表设计,除了vb6无法自动生成代码,其他的基本都可以,非常强大

给大一新生的蓝桥杯EDA备赛规划:从电路分析到立创EDA,如何用一年时间高效备赛?

本文为大一新生提供了一份系统的蓝桥杯EDA备赛规划,从电路分析基础到立创EDA实战操作,分阶段指导如何高效备赛。内容涵盖理论学习、软件操作、PCB设计专项提升及冲刺优化策略,帮助学生在一年内全面提升电子设计能力,为竞赛做好充分准备。

weixin_31476015的博客 287

形位公差标注的常见误区与优化策略

本文深入解析机械设计中形位公差标注的常见误区与优化策略,特别针对NX2406用户提供实用技巧。从标注冗余、基准选择到公差值设定等五大误区入手,结合工程图实例展示如何提升标注精度与效率,帮助工程师避免常见错误,优化设计流程,确保零件功能实现与制造可行性。

info6的博客 245

①电子产品拆解分析-暖手宝

电子产品拆解分析-暖手宝 ①按键三档调温暖手; ②长按进入氛围呼吸灯; ③安卓接口充电以及支持USB输出;

a6662580的博客 5295

AI智能体丨使用Coze一键生成爆款书单视频,3个月内获赞131.1w!(附保姆级教程)

这篇教程详细介绍了如何使用扣子(Coze)平台的AI智能工作流批量制作爆款书单视频。通过自动化流程,只需1-2分钟即可生成45-50秒的书单视频,效率提升近百倍。工作流包含文案生成、音频合成、图片素材获取、视频剪辑等全流程,支持随机生成8本书单、自动提取金句、智能配音等功能。教程提供了完整的操作步骤,包括剪映草稿配置、特效添加等细节,并附体验链接和示例效果。最终生成的视频包含书单展示、金句字幕、背景音乐等元素,适合书单号运营者快速批量产出内容。

李同学Lino的博客 2354

【光子 AI】AI Agent 知识体系深度研究报告

从理论基础到前沿应用:全面解析人工智能代理的核心架构、关键技术与发展趋势📅 2026 年 3 月 | 📊 深度研究报告 | 🔬 人工智能领域 | 📈 前沿技术分析**AI Agent(人工智能代理)**是一种能够感知环境、基于所获得的信息做出决策,并执行行动以影响该环境的软件系统。AI Agent 的设计旨在模仿或实现智能行为,它们可以在各种环境中操作,包括物理世界和虚拟空间。随着大语言模型(LLM)技术的突破性进展,AI Agent 正从实验室研究快速走向产业应用。根据 Gartner 发布的《2

AI天才研究院 177

5ZCM6ZGrVDllSFLkv6Hmga/ljJbnrqHnkIbns7vnu58= GetFlowDropDown SQL注入

5ZCM6ZGrVDllSFLkv6Hmga/ljJbnrqHnkIbns7vnu58=、eHR/OA一体化智慧云平台、智慧一卡通云平台、行业软件开发与定制、智慧企业管理信息化咨询与项目服务为核心业务的顾问式管理咨询和软件个性定制开发的高科技股份集团公司。同鑫T9eHR信息华管理系统存在SQL注入漏洞,攻击者可通过该漏洞上传shell。关闭互联网暴露面或接口设置访问权限。利用sqlmap进行shell。

iSee857的博客 701

信息安全管理与评估赛题解析-单机取证(含环境)

链接:https://pan.baidu.com/s/1OMzIq884dW2vAiUp0k2Ppg。链接:https://pan.baidu.com/s/1i5daMqhD53wYeQ6hYzRK6Q。链接:https://pan.baidu.com/s/1QFAjdQZK4sJ-gGRP42XPKA。链接:https://pan.baidu.com/s/1BSXvqN2ZGCQXewgFULoeyQ。链接:https://pan.baidu.com/s/1g9zu5ngBz_KMjW1eBMkJAw。

Brucye 1834

网络安全系列-四十三:使用Suricata分析恶意流量pcap文件

本文基于[网络安全系列-三十六:使用Suricata IDS分析pcap文件]和 [网络安全系列-四十二: Suricata之rulesets的激活、更新及动态加载]的基础上,使用suricata针对包含恶意流量的pcap文件进行分析,触发事件告警,并对suricata输出的日志进行逐个分析,让你掌握针对恶意流量的分析步骤,及怎么查看suricata输出的日志。

penriver的博客 2888

深度学习工具包 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语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: 唢呐海外商业化:传统乐器如何成为全球市场新机遇
下一篇: STM32同系列芯片更换实战:从CubeMX到IDE的完整流程与避坑指南
cuixie2370
博客等级 码龄10年 17粉丝 842原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值