深度学习基础:从入门到理解核心概念
引言
近年来,深度学习(Deep Learning)已成为人工智能领域最热门的研究方向之一。从AlphaGo战胜人类围棋冠军,到ChatGPT等大型语言模型的惊艳表现,深度学习技术正在深刻改变我们的生活和工作方式。本文将系统介绍深度学习的基础知识,帮助初学者建立对这一领域的全面认识。
一、什么是深度学习?
深度学习是机器学习的一个子领域,它通过模拟人脑神经元的工作方式,构建多层的神经网络模型,从数据中自动学习特征表示并进行预测或决策。
1.1 深度学习与机器学习的关系
- 传统机器学习:依赖人工特征工程,模型相对简单
- 深度学习:自动学习特征表示,模型复杂度高,需要大量数据
1.2 深度学习的特点
1.层次化特征学习:通过多层网络逐步提取从低级到高级的特征
2. 端到端学习:直接从原始数据学习到最终输出
3.强大的表示能力:能够建模复杂的非线性关系
4. 大数据依赖性:通常需要大量标注数据才能取得良好效果
二、神经网络基础
2.1 感知机:最简单的神经网络
感知器是神经网络的基本单元,其数学模型为:
y = f(w·x + b)
其中:
- x:输入向量
- w:权重向量
- b:偏置项
- f:激活函数
2.2 激活函数的作用
激活函数为神经网络引入非线性,常见的激活函数包括:
1. Sigmoid:σ(x) = 1/(1+e^-x),输出范围(0,1)
2. Tanh:tanh(x) = (e^x - e^-x)/(e^x + e^-x),输出范围(-1,1)
3. ReLU:f(x) = max(0,x),目前最常用的激活函数
4. Leaky ReLU:f(x) = max(αx,x),解决ReLU的"神经元死亡"问题
2.3 神经网络的结构
典型的神经网络包含:
- 输入层:接收原始数据
- 隐藏层:进行特征变换和学习
- 输出层:产生最终预测结果
三、深度学习的核心概念
3.1 前向传播与反向传播
1. 前向传播:数据从输入层流向输出层,计算预测值
2. 反向传播:根据预测误差,从输出层反向调整网络参数
3.2 损失函数
衡量模型预测与真实值差异的函数,常见的有:
- 均方误差(MSE):用于回归问题
- 交叉熵(Cross-Entropy):用于分类问题
3.3 优化算法
最常用的是梯度下降及其变种:
1. 随机梯度下降(SGD)
2. 动量法(Momentum)
3. Adam:结合了动量法和自适应学习率
3.4 正则化技术
防止过拟合的方法:
1. L1/L2正则化:在损失函数中添加参数惩罚项
2. Dropout:训练时随机丢弃部分神经元
3. Batch Normalization:规范化层输入,加速训练
四、常见的深度学习模型
4.1 卷积神经网络(CNN)
特别适合处理图像数据,核心组件:
- 卷积层:提取局部特征
- 池化层:降维,保持平移不变性
- 全连接层:最终分类
典型结构:LeNet-5, AlexNet, VGG, ResNet等
4.2 循环神经网络(RNN)
处理序列数据的网络,具有"记忆"能力:
- 基本RNN
- LSTM:解决长程依赖问题
- GRU:LSTM的简化版
应用领域:自然语言处理、语音识别、时间序列预测
4.3 生成对抗网络(GAN)
由生成器和判别器组成:
- 生成器:生成假数据
- 判别器:区分真假数据
应用:图像生成、风格迁移、数据增强
4.4 Transformer
基于自注意力机制的模型,已成为NLP领域的主流架构:
- 核心组件:Self-Attention, Multi-Head Attention
- 典型模型:BERT, GPT系列
实例
1、导入必要的模块:
import torch
print(torch.__version__)# 导入必要的模块
from torch import nn # 神经网络模块
from torch.utils.data import DataLoader # 数据加载器
from torchvision import datasets # 视觉数据集
from torchvision.transforms import ToTensor # 将图像转换为张量
2、加载数据集:
# 下载训练数据集
training_data = datasets.MNIST(root='data', # 数据保存路径train=True, # 加载训练集download=True, # 如果本地没有则下载transform=ToTensor(), # 转换为张量
)# 下载测试数据集
test_data = datasets.MNIST(root='data',train=False, # 加载测试集download=True,transform=ToTensor(),
)print(len(training_data)) # 输出训练集大小(60000)
3、数据可视化
from matplotlib import pyplot as plt# 创建图像窗口
figure = plt.figure()# 显示最后9张训练图像
for i in range(9):img, label = training_data[i+59000] # 获取图像和标签# 添加子图figure.add_subplot(3, 3, i+1)plt.title(label) # 设置标题为标签值plt.axis("off") # 不显示坐标轴plt.imshow(img.squeeze(), cmap="gray") # 显示灰度图像# squeeze()移除长度为1的维度a = img.squeeze()plt.show() # 显示图像
4、创建数据加载器:
# 创建训练数据加载器
train_dataloader = DataLoader(training_data, batch_size=64)# 创建测试数据加载器
test_dataloader = DataLoader(test_data, batch_size=64)
5、设置计算设备:
# 检测可用设备
device = "cuda" if torch.cuda.is_available() else "mps" if torch.backends.mps.is_available() else "cpu"
print(f"Using {device} device")
6、定义神经网络:
class NeuralNetwork(nn.Module):def __init__(self):super().__init__()# 定义网络层self.flatten = nn.Flatten() # 展平层(28*28 -> 784)self.hidden1 = nn.Linear(28*28, 128) # 全连接层1self.hidden2 = nn.Linear(128, 256) # 全连接层2self.out = nn.Linear(256, 10) # 输出层def forward(self, x):# 定义前向传播x = self.flatten(x)x = self.hidden1(x)x = torch.relu(x) # ReLU激活函数x = self.hidden2(x)x = torch.relu(x)x = self.out(x)return x# 创建模型实例并移动到设备
model = NeuralNetwork().to(device)
print(model)
7、定义训练和测试函数:
def train(dataloader, model, loss_fn, optimizer):model.train() # 设置为训练模式batch_size_num = 1for X, y in dataloader: # 遍历数据批次X, y = X.to(device), y.to(device) # 数据移动到设备# 前向传播pred = model(X) # 计算预测值loss = loss_fn(pred, y) # 计算损失# 反向传播optimizer.zero_grad() # 梯度清零loss.backward() # 计算梯度optimizer.step() # 更新参数# 打印训练信息loss_value = loss.item()if batch_size_num % 100 == 0:print(f'loss:{loss_value:>7f} [number:{batch_size_num}]')batch_size_num += 1def test(dataloader, model, loss_fn):size = len(dataloader.dataset) # 数据集大小num_batches = len(dataloader) # 批次数量model.eval() # 设置为评估模式test_loss, correct = 0, 0with torch.no_grad(): # 禁用梯度计算for X, y in dataloader:X, y = X.to(device), y.to(device)pred = model(X) # 计算预测# 累计损失和正确预测数test_loss += loss_fn(pred, y).item()correct += (pred.argmax(1) == y).type(torch.float).sum().item()# 计算平均损失和准确率test_loss /= num_batchescorrect /= sizeprint(f'Test result: \n Accuracy: {(100*correct)}%, Avg loss: {test_loss}')
8、模型的训练和评估:
# 定义损失函数和优化器
loss_fn = nn.CrossEntropyLoss() # 交叉熵损失
optimizer = torch.optim.Adam(model.parameters(), lr=0.01) # Adam优化器# 训练多个epoch
epochs = 16
for epoch in range(epochs):print(f"Epoch {epoch+1}\n-------------------------------")train(train_dataloader, model, loss_fn, optimizer)test(test_dataloader, model, loss_fn)print("Done!")
结果显示:

结语
深度学习作为人工智能的核心技术,正在各个领域展现出强大的能力。掌握深度学习的基础知识是进入这一领域的第一步。希望本文能为初学者提供一个系统的知识框架,更多深入的内容还需要在实践中不断学习和探索。
相关文章:
深度学习基础:从入门到理解核心概念
引言 近年来,深度学习(Deep Learning)已成为人工智能领域最热门的研究方向之一。从AlphaGo战胜人类围棋冠军,到ChatGPT等大型语言模型的惊艳表现,深度学习技术正在深刻改变我们的生活和工作方式。本文将系统介绍深度学习的基础知识࿰…...
科技项目验收测试报告有哪些作用?需要多长时间和费用?
在当今快速发展的科技环境中,科技项目的有效验收至关重要。对于公司、开发团队以及客户来说,科技项目验收测试报告更是一个不可缺少的一项重要环节。 科技项目验收测试报告是对一个项目在开发完成后所进行的一系列测试结果的总结。这份报告不仅用于证明…...
redis-事务(MULTI、EXEC、DISCARD、WATCH与lua脚本、包含lua脚本的简单介绍、乐观锁抢购案例的实现)
https://juejin.cn/post/6891158857708797959 首先Redis事务在实际的场景应用上也占着比较重要的地位,例如在秒杀场景中,我们就可以利用Redis事务中的watch命令监听key,实现乐观锁,保证不会出现冲突,也防止商品超卖。 …...
【Linux】su、su-、sudo、sudo -i、sudo su - 命令有什么区别?分别适用什么场景?
目录 su su- sudo sudo -i sudo su - /etc/sudoers su 该命令将启动非登录shell,即虽然以该用户身份启动shell,但使用的是原始用户的环境设置。普通用户账户运行 su 命令切换到另一用户账户,需提供要切换的账户的密码。root用户&…...
CCLinkIE转ModbusTCP借网关之力打破组态王与三菱PLC通讯隔阂
在某自动化生产线项目中,客户采用了三菱PLC作为现场控制核心,该PLC支持CCLinkIE现场总线协议。同时,客户希望使用组态王上位机软件进行生产过程的监控与管理,然而组态王上位机更擅长与ModbusTCP协议设备进行通讯。为了解决这一协议…...
MyBatis-Plus 通过 ID 更新数据为NULL总结
在使用 MyBatis-Plus 通过 ID 更新数据时,若需将字段值设为 null,可参考以下解决方案: 方法一:使用 TableField 注解 在实体类字段上添加注解,指定更新策略为忽略非空检查: public class User {TableFie…...
Linux网络编程第一课:深入浅出TCP/IP协议簇与网络寻址系统
知识点1【网络发展简史】 **网络节点:**路由器和交换机组成 交换机的作用:拓展网络接口 路由:网络通信路径 1、分组交换 分组的目的: 数据量大,不能一次型传输,只能分批次传输,这里的每一批…...
深入解析布尔注入:原理、实战与防御
目录 一、布尔注入的原理与核心逻辑 二、布尔注入的实战步骤 三、关键函数与绕过技巧 四、实战案例:获取数据库名称 五、防御策略与最佳实践 六、总结 一、布尔注入的原理与核心逻辑 布尔注入(Boolean-Based Blind SQL Injection)是一种…...
GESP2023年12月认证C++七级( 第三部分编程题(2)纸牌游戏)
参考程序: #include <iostream> #include <cstring> // for memset #include <vector> using namespace std;const int max_n 1005; int n; int a[max_n], b[max_n], c[max_n]; // a[]: 得分系数;b[]: 换牌惩罚;c[]: …...
不同的人机验证的机制
目录 Cloudflare Turnstile验证 reCAPTCHA V2 GeeTest CAPTCHA Arkose Labs 验证码(FunCaptcha) 图像(图片)验证码 亚马逊验证码 (AWS/WAF) Cloudflare Turnstile验证 Cloudflare Turnstile 验证码以隐形方式运行…...
HarmonyOS学习 实验九:@State和@Prop装饰器的使用方法
HarmonyOS应用开发:父子组件状态管理实验报告 引言 在HarmonyOS应用开发领域,组件之间的状态管理是一个至关重要的概念。通过有效的状态管理,我们可以确保应用的数据流动清晰、可预测,从而提升应用的稳定性和可维护性。本次实验…...
基于瑞芯微RK3562 四核 ARM Cortex-A53 + 单核 ARM Cortex-M0——Linux应用开发手册
前 言 本文主要介绍TL3562-MiniEVM评估板的AMP(Asymmetric Multi-processing)开发案例,适用开发环境如下: Windows开发环境:Windows 7 64bit、Windows 10 64bit Linux开发环境:VMware16.2.5、Ubuntu20.04.6 64bit U-Boot:U-Boot-2017.09 Kernel:Linux-5.10.209 Lin…...
Java c线程等待ab线程执行完再执行
1、LockSupport AtomicInteger LockSupport.park() 函数表示挂起当前线程LockSupport.unpark© 函数表示解除线程c的阻塞状态AtomicInteger.decrementAndGet() 函数表示将该变量减一,并返回当前变量值(线程安全的原子类) 2、CountDownL…...
ubuntu20.04 Android14编译环境配置
ubuntu 更新和必要安装 sudo apt update sudo apt install git sudo apt install python2-minimal sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2 sudo upda…...
优化 Dockerfile 性能之实践(Practice of Optimizing Dockerfile Performance)
优化 Dockerfile 性能之实践 构建 Docker 镜像时,Dockerfile 的性能会显著影响构建过程的效率。经过优化的 Dockerfile 可以缩短构建时间、最小化镜像大小并提高整体容器性能。在本文中,我们将探讨优化 Dockerfile 性能的最佳实践。 尽量减少层数 影响…...
【Ai】MCP实战:手写 client 和 server [Python版本]
什么是mcp MCP 是一个开放协议,它为应用程序向 LLM 提供上下文的方式进行了标准化。你可以将 MCP 想象成 AI 应用程序的 USB-C 接口。就像 USB-C 为设备连接各种外设和配件提供了标准化的方式一样,MCP 为 AI 模型连接各种数据源和工具提供了标准化的接口…...
解决 AWS RDS MySQL mysqldump 导入sql SET @@GLOBAL 权限不足问题
在使用 mysqldump 导出数据库时,导出的 SQL 文件通常会包含一些 SET 语句,例如 SET MYSQLDUMP, SET SESSION, SET GLOBAL 等,这些语句用于设置会话或全局变量以确保数据一致性和兼容性。然而,在 AWS RDS MySQL 环境中,…...
Java与C在典型场景下的性能对比深度剖析
🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:AI 【前言】 在计算机编程领域,Java和C语言都是举足轻重的编程语言。Java以其跨平台性、自动内存管理和丰富…...
多智能体 AI 游戏框架(开源程序):竞争、发展、适应
一、软件介绍 文末提供程序和源码下载 SamoAI 在人类和 AI 之间创建了一个无缝的多代理叙事层,实现了跨多个平台的自然协作。通过一致的身份保留和情境记忆,它允许通过一系列行动随着时间的推移而演变的交互,就像人际关系一样。 二、核心概念…...
从 BI 与 SQL2API 的差异,看数据技术的多元发展路径
在数据驱动的商业世界里,商业智能(BI)与 SQL2API 如同两颗闪耀的星星,各自散发着独特的光芒。BI 早已在企业中广泛应用,成为数据分析领域的中流砥柱;而 SQL2API 作为新兴技术,虽潜力巨大&#x…...
java实现二叉树的前序、中序、后序遍历(递归和非递归方式)以及层级遍历
java实现二叉树的前序、中序、后序遍历以及层级遍历 一、二叉树节点定义二、递归方式1.前序遍历2.中序遍历3.后序遍历 三、非递归方式1.前序遍历2.中序遍历3.后序遍历4.层级遍历5.分层打印 四、测试用例 一、二叉树节点定义 class TreeNode {int val;TreeNode left;TreeNode r…...
Solr admin 更新文档
<add><doc><field name"id">1904451090351546368</field><field name"companyName" update"set">测试科技有限公司</field></doc> </add>...
【Netty篇】EventLoopGroup 与 EventLoop 详解
目录 开场白:话说 Netty 江湖第一段:EventLoopGroup——“包工头”的角色第二段:EventLoop——“身怀绝技的工人”第三段:EventLoop 如何处理 I/O 事件、普通任务和定时任务第四段:Handler 执行中如何换人?…...
操作系统之shell实现(上)
🌟 各位看官好,我是maomi_9526! 🌍 种一棵树最好是十年前,其次是现在! 🚀 今天来学习C语言的相关知识。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更…...
考研数据结构之图的遍历:深度优先搜索(DFS)与广度优先搜索(BFS)(包含真题及解析)
考研数据结构之图的遍历:深度优先搜索(DFS)与广度优先搜索(BFS) 图的遍历是图论中的核心操作之一,主要包括深度优先搜索(DFS)和广度优先搜索(BFS)。本文将详…...
数据结构与算法——链表OJ题详解(2)
文章目录 一、前言二、OJ续享2.1相交链表2.2环形链表12.2环形链表2 三、总结 一、前言 哦了兄弟们,咱们上次在详解链表OJ题的时候,有一部分OJ题呢up并没有整理完,这一个星期呢,up也是在不断的学习并且沉淀着,也是终于…...
Linux 基础知识详解
Linux 基础知识详解 一、快照与克隆 1. 📸快照(Snapshot) 快照是虚拟机当前运行状态的一次“瞬间拷贝”,包括内存、磁盘、配置等信息。这使得管理员能够快速恢复到某个特定的时间点。 用途: 安全实验前保存状态&am…...
MySQL慢SQL优化方案详解:从诊断到根治的完整指南
MySQL慢SQL优化方案详解:从诊断到根治的完整指南 一、慢SQL的致命影响 当数据库响应时间超过500ms时,系统将面临三大灾难链式反应: 用户体验崩塌 页面加载超时率上升37%用户跳出率增加52%核心业务转化率下降29% 系统稳定性危机 连接池耗…...
centOs7配置有限网络
最简单快速的是使用nmtui命令,采用图形页面修改。 点击编辑连接并回车: 选中编辑然后回车: 千万记住DNS服务器就是子网掩码,不是常说的DNS域名。把地址,网关,子网掩码配置好。只要ip不冲突,网…...
C语言 —— 指尖跃迁 刻印永恒 - 文件操作
目录 1. 什么是文件 1.1 程序文件 1.2 数据文件 1.3 文件名 2. 二进制文件和文本文件 3. 文件的打开与关闭 3.1 流和标准流 3.2 文件指针 3.3 文件的打开与关闭 fopen fclose 4. 文件的顺序读写 4.1 fgetc和fputc fgetc fputc 4.2 fgets和fputs fgets fputs…...
