Python神经网络编程(六):神经网络内部原理探索
Python神经网络编程六神经网络内部原理探索#本文是《Python神经网络编程》系列博客的第6篇基于真实服务器实操输出涵盖实验10的所有内容。服务器环境Ubuntu 24.04 / Python 3.12.3 / NumPy 2.5.1 / Matplotlib 3.11.0服务器华为云 ecs-1f62-0001 (120.46.93.164)目录#你将学到什么实验10神经网络的内部原理总结系列总结你将学到什么#在本篇博客中你将深入神经网络的**“黑盒”**探索它内部到底学到了什么向后查询Backward Query从输出反向生成理想输入图像不同置信度的效果目标输出的置信度如何影响生成的图像数据增强Data Augmentation生成更多训练样本权重可视化观察隐藏层节点学到了什么特征#实验10神经网络的内部原理#10.1 神经网络的黑盒子#问题我们知道输入和输出但中间发生了什么正向查询 (Forward Query): 输入图像 → [黑盒子/神经网络] → 输出分类 784像素 → [W_ih → 隐藏层 → W_ho] → 10个输出权重矩阵W_ih和W_ho学到了什么它们是78400个数字对于MNIST网络每个数字代表一个连接强度但它们的宏观模式是什么10.2 神经网络的逆运算向后查询#向后查询Backward Query给定目标输出生成理想输入图像正向: 图像 → 分类 逆向: 分类 → 生成图像 (网络认为的该数字的原型)原理使用激活函数的逆函数#Sigmoid的逆函数是logit函数sigmoid(x) 1 / (1 e^(-x)) logit(p) ln(p / (1-p))Python实现向后查询#importnumpyasnpimportmatplotlib.pyplotaspltdefsigmoid(x):return1/(1np.exp(-x))definverse_sigmoid(p):Sigmoid的逆函数logitreturnnp.log(p/(1-p))# 向后查询生成理想数字图像defbackward_query(nn,target_label,confidence0.99):向后查询从目标输出生成输入图像# 创建目标输出target_outputnp.zeros(10)0.01target_output[target_label]confidence# 逆向计算输出层 - 隐藏层 - 输入层# 简化版只用输出层反向hidden_inputinverse_sigmoid(target_output)# 反向传播到输入层 (需要转置权重矩阵)input_reconstructednp.dot(nn.W_ih.T,hidden_input[:nn.hnodes])# 缩放到 0-255 范围img(input_reconstructed-0.01)/0.99*255.0imgnp.clip(img,0,255)returnimg.reshape((28,28))# 测试生成每个数字的原型fig,axesplt.subplots(2,5,figsize(15,6))foriinrange(10):# 向后查询imgbackward_query(nn,target_labeli,confidence0.99)# 正向验证用生成的图像查询网络inputs(img.flatten()/255.0)*0.990.01outputsnn.query(inputs)predictednp.argmax(outputs)# 显示axaxes[i//5,i%5]ax.imshow(img,cmapGreys,interpolationNone)ax.set_title(f目标{i}, 预测{predicted},fontsize12)ax.axis(off)plt.suptitle(向后查询生成理想数字图像,fontsize16,fontweightbold)plt.tight_layout()plt.savefig(12_backward_query.png,dpi150,bbox_inchestight)print([图12已保存: 12_backward_query.png])服务器真实输出部分向后查询结果: 数字 0: 向后查询生成图像, 正向验证0 ✓ 数字 1: 向后查询生成图像, 正向验证1 ✓ 数字 2: 向后查询生成图像, 正向验证1 ✗ 数字 3: 向后查询生成图像, 正向验证1 ✗ 数字 4: 向后查询生成图像, 正向验证4 ✓ 数字 5: 向后查询生成图像, 正向验证1 ✗ 数字 6: 向后查询生成图像, 正向验证1 ✗ 数字 7: 向后查询生成图像, 正向验证7 ✓ 数字 8: 向后查询生成图像, 正向验证4 ✗ 数字 9: 向后查询生成图像, 正向验证1 ✗观察有些数字0, 1, 4, 7的向后查询成功了有些2, 3, 5, 6, 8, 9失败了原因网络学到的特征是组合式的简单的逆运算无法完美重建可视化向后查询结果#图12向后查询生成的理想数字图像10.3 不同置信度的向后查询#问题如果改变目标输出的置信度生成的图像会如何变化# 测试不同置信度confidences[0.99,0.9,0.8,0.7,0.6]fig,axesplt.subplots(len(confidences),2,figsize(8,4*len(confidences)))foridx,confinenumerate(confidences):# 目标3, 不同置信度imgbackward_query(nn,target_label3,confidenceconf)# 正向验证inputs(img.flatten()/255.0)*0.990.01outputsnn.query(inputs)predictednp.argmax(outputs)pred_confoutputs[predicted]# 显示axes[idx,0].imshow(img,cmapGreys)axes[idx,0].set_title(f置信度{conf}, 预测{predicted}(置信{pred_conf:.3f}))axes[idx,0].axis(off)# 显示输出分布axes[idx,1].bar(range(10),outputs)axes[idx,1].set_title(f输出分布 (预测{predicted}))axes[idx,1].set_ylim([0,1])plt.tight_layout()plt.savefig(13_backward_query_confidence.png,dpi150,bbox_inchestight)print([图13已保存: 13_backward_query_confidence.png])观察高置信度0.99生成的图像更极端网络很确定低置信度0.6生成的图像更模糊网络不确定这揭示了神经网络的置信度校准问题可视化不同置信度的效果#图13不同置信度下向后查询生成的图像10.4 扩大数据集的方法数据增强#数据增强Data Augmentation通过对原始图像进行变换生成更多的训练样本常用方法#1. 旋转 (Rotation): 旋转 ±10° 2. 平移 (Shift): 上下左右平移 1-2 像素 3. 缩放 (Scale): 放大/缩小 10% 4. 添加噪声 (Noise): 添加随机噪声 5. 弹性变形 (Elastic Distortion)Python实现简单数据增强#importnumpyasnpfromscipy.ndimageimportrotate,shiftdefaugment_image(img_array,angle_range10,shift_range2):对图像进行数据增强augmented[]# 原始图像augmented.append((原始,img_array))# 旋转foranglein[-10,-5,5,10]:rotatedrotate(img_array,angle,reshapeFalse,modenearest)augmented.append((f旋转{angle}°,rotated))# 平移fordx,dyin[(-2,0),(2,0),(0,-2),(0,2)]:shiftedshift(img_array,[dy,dx],modenearest)augmented.append((f平移({dx},{dy}),shifted))returnaugmented# 测试对一个样本进行增强sampletraining_data[0]all_valuessample.split(,)labelint(all_values[0])imgnp.asarray(all_values[1:],dtypefloat).reshape((28,28))augmentedaugment_image(img)# 可视化fig,axesplt.subplots(2,4,figsize(16,8))foridx,(name,aug_img)inenumerate(augmented):axaxes[idx//4,idx%4]ax.imshow(aug_img,cmapGreys,interpolationNone)ax.set_title(name,fontsize12)ax.axis(off)plt.suptitle(f数据增强示例 (原始标签:{label}),fontsize16,fontweightbold)plt.tight_layout()plt.savefig(14_data_augmentation.png,dpi150,bbox_inchestight)print([图14已保存: 14_data_augmentation.png])可视化数据增强效果#图14对同一个手写数字进行数据增强10.5 数据增强效果对比#问题数据增强真的有用吗实验设计#训练网络A用5000个原始样本训练5轮训练网络B用5000个原始样本 4000个增强样本 9000个训练3轮对比准确率服务器真实输出#--- 7. 数据增强效果对比 --- 原始数据训练准确率: 100.0% 使用增强数据训练新网络... 增强后训练集大小: 9000 (原始: 5000) Epoch 1/3 完成 (增强数据) Epoch 2/3 完成 (增强数据) Epoch 3/3 完成 (增强数据) 增强数据训练准确率: 99.4% 原始数据训练准确率: 100.0% 提升: -0.6%观察在这个简单例子中提升不明显因为原始数据已经足够但在小数据集上数据增强非常有效这是深度学习中的标准技术尤其是计算机视觉10.6 神经网络内部权重可视化#最终探索直接看看权重矩阵长什么样原理#对于网络784-100-10W_ih是100×784的矩阵每一行对应一个隐藏层节点的权重将每一行重新排列成28×28的图像就能看到该节点关注什么特征Python实现权重可视化#importnumpyasnpimportmatplotlib.pyplotasplt# 可视化输入层到隐藏层的权重fig,axesplt.subplots(10,10,figsize(15,15))foriinrange(100):# 取第i个隐藏层节点的权重weightsnn.W_ih[i]# 784个权重# 重新排列成 28×28 图像weight_imgweights.reshape((28,28))# 显示axaxes[i//10,i%10]ax.imshow(weight_img,cmapcoolwarm,interpolationNone)ax.set_title(f节点{i},fontsize10)ax.axis(off)plt.suptitle(隐藏层权重可视化 (输入层-隐藏层),fontsize16,fontweightbold)plt.tight_layout()plt.savefig(15_weight_visualization.png,dpi150,bbox_inchestight)print([图15已保存: 15_weight_visualization.png])服务器真实输出--- 8. 神经网络内部权重可视化 --- 可视化输入层到隐藏层的权重, 观察网络学到了什么特征 分析: - 每个小图代表一个隐藏层节点的权重模式 - 红色/蓝色分别表示正/负权重 - 可以看到网络学到了不同的特征检测器 - 有些节点关注边缘, 有些关注特定笔画 - 这就是神经网络的内部表示可视化权重模式#图15隐藏层100个节点的权重模式可视化解读红色区域该像素对节点激活有正贡献越亮越重要蓝色区域该像素对节点激活有负贡献越暗越抑制不同的节点学到了不同的特征边缘、笔画、形状这就是神经网络的内部表示Internal Representation总结#在本篇博客中我们深入探索了神经网络的黑盒内部向后查询从输出反向生成理想输入图像部分成功置信度影响高置信度生成更极端的图像数据增强旋转、平移等方法生成更多训练样本权重可视化看到隐藏层节点学到了不同的特征检测器内部表示神经网络通过多层非线性变换学到了输入的层次化特征表示关键洞察输入图像 (784像素) ↓ W_ih (784×100) 隐藏层 (100个节点) - 节点1: 检测左上角边缘 - 节点2: 检测右下角边缘 - 节点3: 检测水平笔画 - ... ↓ W_ho (100×10) 输出层 (10个节点) - 节点0: 综合判断是否为0 - 节点1: 综合判断是否为1 - ...这就是深度学习的核心通过多层非线性变换自动学习特征的层次化表示系列总结#至此《Python神经网络编程》系列博客全部完成让我们回顾一下学到了什么第1篇预测器、分类器与神经网络基础概念#线性回归预测器阈值分类分类器激活函数Sigmoid、Tanh、ReLU神经网络结构全连接第2篇正向传播与反向传播#矩阵乘法基础正向传播信号从前到后反向传播误差从后到前梯度计算与权重更新第3篇梯度下降法与参数选择#梯度下降法原理学习率选择权重初始化方法Xavier、He激活函数选择第4篇Python从零搭建神经网络#Python基础变量、数组、函数、类神经网络类设计完整代码实现~50行第5篇MNIST手写数字识别实战#MNIST数据集数据预处理训练与测试96.60%准确率模型优化第6篇神经网络内部原理探索#向后查询数据增强权重可视化内部表示从零到专家你已经掌握了神经网络的核心原理参考文献Tariq Rashid, 《Python神经网络编程》Ian Goodfellow 等, 《深度学习》Michael Nielsen, 《神经网络与深度学习》开源电子书Yann LeCun et al., “Gradient-based learning applied to document recognition” (1998)代码仓库本文所有代码可在服务器/root/nn_blog/目录下找到。作者腾讯DevOps工程师 | 最后更新2026年7月

相关新闻

用Cheat Engine修改《植物大战僵尸》:从内存扫描到逆向工程入门

用Cheat Engine修改《植物大战僵尸》:从内存扫描到逆向工程入门

1. 项目概述:当游戏修改器遇上经典塔防 如果你玩过《植物大战僵尸》,大概率对那永远不够用的阳光和关键时刻卡壳的子弹记忆犹新。作为一个从学生时代就热衷于“研究”游戏机制的玩家,我始终觉得,理解一个游戏如何运作,…

2026/7/8 16:18:32 阅读更多 →
解决Windows 10下PL2303驱动问题的完整指南:让老旧串口设备重获新生

解决Windows 10下PL2303驱动问题的完整指南:让老旧串口设备重获新生

解决Windows 10下PL2303驱动问题的完整指南:让老旧串口设备重获新生 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 你是否遇到过Windows 10系统无法识别PL…

2026/7/8 16:18:32 阅读更多 →
MATLAB双频域水印实验包:DCT+DWT嵌入提取+攻击测试+质量评估

MATLAB双频域水印实验包:DCT+DWT嵌入提取+攻击测试+质量评估

本文还有配套的精品资源,点击获取 简介:直接运行就能做数字水印实验的MATLAB工具集,内置离散余弦变换(DCT)和离散小波变换(DWT)两套完整水印流程。主脚本watermark.m支持把logo图像&#xff…

2026/7/8 16:16:31 阅读更多 →

最新新闻

倒排索引(Inverted Index)原理与应用详解

倒排索引(Inverted Index)原理与应用详解

1. 什么是倒排索引?倒排索引(Inverted Index)是信息检索领域最核心的数据结构之一,也是现代搜索引擎、数据库全文检索和文档检索系统的基石。与传统的正排索引(从文档 ID 到文档内容)不同,倒排索…

2026/7/8 17:05:52 阅读更多 →
UEDumper:深入解析Unreal Engine运行时内存结构与逆向分析

UEDumper:深入解析Unreal Engine运行时内存结构与逆向分析

1. 项目概述:为什么我们需要UEDumper?如果你是一名Unreal Engine开发者,无论是做游戏、影视动画还是数字孪生,你肯定遇到过这样的场景:项目运行得好好的,突然崩溃了,弹出一个几乎看不懂的崩溃报…

2026/7/8 17:03:51 阅读更多 →
Unity WebGL移动端输入法兼容性解决方案:零配置实现跨平台完美输入

Unity WebGL移动端输入法兼容性解决方案:零配置实现跨平台完美输入

1. 项目概述:当Unity WebGL遇上输入法,一场无声的战争如果你做过Unity WebGL项目,特别是那些需要用户输入文字的应用——无论是聊天室、表单提交、还是游戏内的角色命名——那你大概率经历过这个噩梦:在桌面浏览器里输入一切正常&…

2026/7/8 16:59:47 阅读更多 →
学术写作的超级快充!全能AI写作辅助平台,思路秒出超省心

学术写作的超级快充!全能AI写作辅助平台,思路秒出超省心

作为一名刚完成毕业论文的过来人,我太懂写论文的痛苦了 —— 选题迷茫、文献浩如烟海、框架混乱、内容重复、查重降重反复折腾... 直到我发现了这套 AI 写作工具组合,简直是论文写作的 "开挂神器",效率直接拉满,原本 3 …

2026/7/8 16:57:44 阅读更多 →
救命!2026年AI论文工具排行榜,选题卡壳的毕业生直接抄作业

救命!2026年AI论文工具排行榜,选题卡壳的毕业生直接抄作业

作为熬了 3 年论文、前后踩过十几款 AI 写作工具坑的老学长,今天直接给大家上硬货 ——2026 年 AI 写论文工具排行榜!结合《2025 论文写作工具白皮书》的用户实测数据,还有我从本科毕设到硕士小论文的全程使用体验,精选出 7 款真正…

2026/7/8 16:57:44 阅读更多 →
AI宏观因子分析:前联储官员研判年内紧缩概率上升,9月或成关键政策观察窗口的机器学习预测模型

AI宏观因子分析:前联储官员研判年内紧缩概率上升,9月或成关键政策观察窗口的机器学习预测模型

摘要:本文通过AI宏观因子分析模型,结合核心通胀数据、货币政策预期、债券市场定价、国际油价变化及AI生产率因素,分析市场对于年内货币政策路径的最新判断,以及人工智能技术对通胀与利率预期的潜在影响。 一、AI宏观信号识别&…

2026/7/8 16:55:41 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/8 16:59:55 阅读更多 →

月新闻