文章四《深度学习核心概念与框架入门》

文章4:深度学习核心概念与框架入门——从大脑神经元到手写数字识别的奇幻之旅


引言:给大脑装个"GPU加速器"?

想象一下,你的大脑如果能像智能手机的GPU一样快速处理信息会怎样?这正是深度学习的终极目标!今天,我们将从零开始搭建一个能"看懂"手写数字的小型AI大脑。准备好你的Python和显卡(别担心,笔记本CPU也能跑通代码!),让我们开始这场神经网络冒险吧!


一、深度学习与神经网络基础:大脑的"数字克隆"

1.1 神经元的数字化重生

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
(想象这是一张神经元结构图,每个突触对应权重,树突接收输入,轴突输出信号)

数学表达式:
y = σ ( w 1 x 1 + w 2 x 2 + . . . + b ) y = \sigma(w_1x_1 + w_2x_2 + ... + b) y=σ(w1x1+w2x2+...+b)

  • x i x_i xi:输入信号(比如像素值)
  • w i w_i wi:突触权重(需要学习的参数)
  • b b b:偏置项(打破对称性的关键)
  • σ \sigma σ:激活函数(决定神经元"兴奋程度")

1.2 前向传播:快递员的送货路线

把输入数据想象成包裹,前向传播就是从仓库到客户的完整送货路径:

def forward(input_data):layer1 = activation(weights1 @ input_data + bias1)output = activation(weights2 @ layer1 + bias2)return output

1.3 反向传播:快递员的反向寻路

当包裹地址错误时(模型预测错误),我们需要通过"误差"追踪路线问题:

# 简化版反向传播伪代码
loss = calculate_error(predicted, actual)
loss.backward()  # 自动计算所有路径的误差贡献度
optimizer.step()  # 根据误差调整所有权重

1.4 损失函数:快递公司的KPI

  • 均方误差(MSE):适合回归任务,像计算快递距离误差
  • 交叉熵损失(Cross Entropy):分类任务的黄金标准,惩罚"过于自信的错误"

二、全连接网络实战:TensorFlow vs PyTorch

2.1 教练与球员的比喻

  • TensorFlow(Keras):像组织严密的足球俱乐部
  • PyTorch:更像灵活的街头足球团队

2.2 代码对决:搭建相同神经网络

TensorFlow 2.x 版本(静态图思维)
from tensorflow.keras import layers, modelsmodel = models.Sequential([layers.Dense(128, activation='relu', input_shape=(784,)),layers.Dense(10, activation='softmax')
])model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
PyTorch 版本(动态图思维)
import torch.nn as nnclass Net(nn.Module):def __init__(self):super().__init__()self.fc = nn.Sequential(nn.Linear(784, 128),nn.ReLU(),nn.Linear(128, 10),nn.Softmax(dim=1))def forward(self, x):return self.fc(x.view(-1, 784))

关键差异对比表

特性TensorFlow(Keras)PyTorch
运行模式默认静态图(编译后再运行)动态计算图(即时执行)
数据流控制高阶API抽象手动控制张量流动
GPU加速自动检测可用设备需显式调用.cuda()
调试友好性图结构复杂,断点调试困难支持逐层调试

三、激活函数与优化器:神经网络的"兴奋剂"和"教练"

3.1 激活函数的选择艺术

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(-5,5,100)
plt.figure(figsize=(12,4))# ReLU激活函数
plt.subplot(131)
plt.plot(x, np.where(x>0, x, 0))
plt.title("ReLU: 0或线性输出")# Sigmoid激活函数
plt.subplot(132)
plt.plot(x, 1/(1+np.exp(-x)))
plt.title("Sigmoid: 挤进0-1区间")# Tanh激活函数
plt.subplot(133)
plt.plot(x, np.tanh(x))
plt.title("Tanh: 在-1到1间摇摆")
plt.show()

3.2 优化器的进化史

# 不同优化器的"训练哲学"
optimizers = {'SGD': torch.optim.SGD(model.parameters(), lr=0.1),'Adam': torch.optim.Adam(model.parameters(), lr=0.001),'RMSprop': torch.optim.RMSprop(model.parameters(), lr=0.01)
}# 实验建议:尝试更换优化器,观察训练曲线

四、实战案例:让AI认数字(MNIST手写识别)

4.1 数据集可视化:看看这些"抽象画"

import torchvision
from matplotlib import pyplot as plt# 加载训练数据
transform = torchvision.transforms.ToTensor()
trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
images = trainset.data[:10].numpy()plt.figure(figsize=(10,2))
for i in range(10):plt.subplot(1,10,i+1)plt.imshow(images[i], cmap='gray')plt.axis('off')
plt.show()

4.2 训练过程可视化:看模型如何"开窍"

# 训练时实时绘制曲线
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter('runs/mnist_experiment')for epoch in range(epochs):# ...训练代码...writer.add_scalar('Training Loss', loss.item(), epoch)writer.add_scalar('Accuracy', accuracy, epoch)# 运行 tensorboard --logdir=runs 查看实时可视化

4.3 训练成果:模型预测表演秀

test_image = testset.data[0].unsqueeze(0).float()/255.0
prediction = model(test_image).argmax().item()plt.imshow(test_image[0][0], cmap='gray')
plt.title(f"I think this is a {prediction}!")
plt.show()

五、进阶彩蛋:神经网络的"黑箱"揭秘

5.1 权重可视化:看看神经元都学了什么

# 查看第一层卷积核(假设用了卷积层)
filters = model.conv1.weight.detach().numpy()
fig = plt.figure(figsize=(8,8))
for i in range(16):ax = fig.add_subplot(4,4,i+1)ax.imshow(filters[i][0], cmap='viridis')ax.axis('off')
plt.suptitle("第一层神经元的'视觉'偏好")

5.2 消失/爆炸梯度的侦探游戏

# 检查梯度分布
for name, param in model.named_parameters():if param.grad is not None:print(f"Layer {name}: grad mean={param.grad.mean():.4f}, std={param.grad.std():.4f}")

结语:你已拥有改变世界的基础能力!

现在,你不仅会用Python搭建神经网络,还能像科学家一样理解其运作原理。记住:

  • TensorFlow适合企业级部署PyTorch适合科研探索
  • ReLU是隐层的标配激活函数
  • Adam优化器是懒人的最佳选择

下次当你看到数字时,不妨想一想——你的AI"学生"现在已经开始用它自己的方式理解这个世界了!

课后挑战:尝试修改网络结构(添加Dropout层、调整学习率),看看模型表现如何变化?把你的"最佳实践"发到GitHub,让全世界的AI新手都能学习你的经验!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/79115.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于CSDN创作的常用模板内容

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 好文评论新文推送 📃文章前言 &…

linux的信号量初识

Linux下的信号量(Semaphore)深度解析 在多线程或多进程并发编程的领域中,确保对共享资源的安全访问和协调不同执行单元的同步至关重要。信号量(Semaphore)作为经典的同步原语之一,在 Linux 系统中扮演着核心角色。本文将深入探讨…

《Android 应用开发基础教程》——第十一章:Android 中的图片加载与缓存(Glide 使用详解)

目录 第十一章:Android 中的图片加载与缓存(Glide 使用详解) 🔹 11.1 Glide 简介 🔸 11.2 添加 Glide 依赖 🔸 11.3 基本用法 ✦ 加载网络图片到 ImageView: ✦ 加载本地资源 / 文件 / UR…

AE模板 300个故障干扰损坏字幕条标题动画视频转场预设

这个AE模板提供了300个故障干扰损坏字幕条标题动画视频转场预设,让您的视频具有炫酷的故障效果。无论是预告片、宣传片还是其他类型的视频,这个模板都能带给您令人惊叹的故障运动标题效果。该模板无需任何外置插件或脚本,只需一键点击即可应用…

在 Python 中,以双下划线开头和结尾的函数(如 `__str__`、`__sub__` 等)

在 Python 中,以双下划线开头和结尾的函数(如 __str__、__sub__ 等)被称为特殊方法(Special Methods)或魔术方法(Magic Methods)。它们确实是 Python 内置的,用于定义类的行为&#…

git问题记录-如何切换历史提交分支,且保留本地修改

问题记录 我在本地编写了代码&#xff0c;突然想查看之前提交的代码&#xff0c;并且想保留当前所在分支所做的修改 通过git stash对本地的代码进行暂存 使用git checkout <commit-hash>切换到之前的提交记录。 查看完之后我想切换回来&#xff0c;恢复暂存的本地代码…

Github开通第三方平台OAuth登录及Java对接步骤

调研起因&#xff1a; 准备搞AI Agent海外项目&#xff0c;有相当一部分用户群体是程序员&#xff0c;所以当然要接入Github这个全球最大的同性交友网站了&#xff0c;让用户使用Github账号一键完成注册或登录。 本教程基于Web H5界面进行对接&#xff0c;同时也提供了spring-…

期刊、出版社、索引数据库

image 1、研究人员向期刊或者会议投稿&#xff0c;交注册费和相应的审稿费等相关费用[1]&#xff1b; 2、会议组织者和期刊联系出版社&#xff0c;交出版费用&#xff1b; 3、出版社将论文更新到自己的数据库中&#xff0c;然后将数据库卖给全世界各大高校或企业&#xff1b; 4…

Transformer 模型及深度学习技术应用

近年来&#xff0c;随着卷积神经网络&#xff08;CNN&#xff09;等深度学习技术的飞速发展&#xff0c;人工智能迎来了第三次发展浪潮&#xff0c;AI技术在各行各业中的应用日益广泛。 注意力机制&#xff1a;理解其在现代深度学习中的关键作用&#xff1b; Transformer模型…

zynq7035的arm一秒钟最多可以支持触发多少次中断

一、概述 1.关于zynq7035的ARM处理器一秒能够支持多少次中断触发&#xff0c;需要综合来考虑。需要确定ARM处理器的参数&#xff0c;目前zynq7000系列&#xff0c;使用的双核Cortex-A9处理器。其中主频大概在500MHZ~1GHZ左右&#xff0c;不同的用户配置的主频可能稍微有差别。 …

数据结构与算法:图论——最短路径

最短路径 先给出一些leetcode算法题&#xff0c;以后遇见了相关题目再往上增加 最短路径的4个常用算法是Floyd、Bellman-Ford、SPFA、Dijkstra。不同应用场景下&#xff0c;应有选择地使用它们&#xff1a; 图的规模小&#xff0c;用Floyd。若边的权值有负数&#xff0c;需要…

[android]MT6835 Android 关闭selinux方法

Selinux SELinux is an optional feature of the Linux kernel that provides support to enforce access control security policies to enforce MAC. It is based on the LSM framework. Working with SELinux on Android – LineageOS Android 关闭selinux MT6835 Android…

【Linux网络编程】http协议的状态码,常见请求方法以及cookie-session

本文专栏&#xff1a;Linux网络编程 目录 一&#xff0c;状态码 重定向状态码 1&#xff0c;永久重定向&#xff08;301 Moved Permanently&#xff09; 2&#xff0c;临时重定向&#xff08;302 Found&#xff09; 二&#xff0c;常见请求方法 1&#xff0c;HTTP常见Hea…

当神经网络突破摩尔定律:探索大模型时代的算力新纪元

当摩尔定律熄灭后&#xff1a;AI算力革命如何重塑技术文明的底层逻辑 一、摩尔定律的黄昏&#xff1a;物理极限与经济理性的双重困境 当英特尔在1965年提出摩尔定律时&#xff0c;没有人预料到这个每18-24个月将芯片晶体管数量翻倍的预言会成为现代计算文明的基石。半个世纪以…

位运算题目:寻找重复数

文章目录 题目标题和出处难度题目描述要求示例数据范围进阶 前言解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 解法三思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;寻找重复数 出处&#xff1a;287. 寻找重复数 难度 6 级 题目描述 要…

Elasticsearch:没有 “AG” 的 RAG?

作者&#xff1a;来自 Elastic Gustavo Llermaly 了解如何利用语义搜索和 ELSER 构建一个强大且视觉上吸引人的问答体验&#xff0c;而无需使用 LLMs。 想要获得 Elastic 认证&#xff1f;查看下一期 Elasticsearch Engineer 培训的时间&#xff01; Elasticsearch 拥有众多新…

linux下安装ollama网不好怎么办?

文章目录 前言kkgithub下载脚本,而不是直接运行修改脚本修改权限还是不行?前言 今天想在linux上面更新一下ollama,于是去到官网: https://ollama.com/download/linux linux下安装ollama还是挺简单的: curl -fsSL https://ollama.com/install.sh | sh我也是特别嗨皮地就…

相机-IMU联合标定:相机-IMU外参标定

文章目录 📚简介🚀标定工具kalibr🚀标定数据录制🚀相机-IMU外参标定📚简介 在 VINS(视觉惯性导航系统) 中,相机-IMU外参标定 是确保多传感器数据时空统一的核心环节,其作用可概括为以下关键点: 坐标系对齐(空间同步),外参误差会导致视觉特征点投影与IMU预积…

基于 Java 的实现前端组装查询语句,后端直接执行查询方案,涵盖前端和后端的设计思路

1. 前端设计 前端负责根据用户输入或交互条件,动态生成查询参数,并通过 HTTP 请求发送到后端。 前端逻辑: 提供用户界面(如表单、筛选器等),让用户选择查询条件。将用户选择的条件组装成 JSON 格式的查询参数。发送 HTTP 请求(如 POST 或 GET)到后端。示例: 假设用…

[STM32] 4-2 USART与串口通信(2)

文章目录 前言4-2 USART与串口通信(2)数据发送过程双缓冲与连续发送数据发送过程中的问题 数据接收过程TXE标志位&#xff08;发送数据寄存器空&#xff09;TC标志位&#xff08;发送完成标志位&#xff09;单个数据的发送数据的连续发送 接收过程中遇到的问题问题描述&#xf…