# 返回 AI book [ AI book](http://www.gitcc.com/ai1/ai-book) ## 深度学习 ### 深度学习入门手册 以下是一份深度学习的入门手册,旨在帮助你理解深度学习的基本概念、工具和技术,并通过简单的代码示例来展示如何使用深度学习解决实际问题。 **深度学习入门手册** # 一、深度学习简介 深度学习是机器学习的一个子领域,它基于人工神经网络,试图从大量的数据中自动学习特征表示。与传统的机器学习方法相比,深度学习模型可以自动学习数据的层次化表示,通常在处理图像、音频、文本等复杂数据时表现出色。 ## (一)核心概念 - **神经网络**:深度学习的基础,由许多相互连接的神经元组成,这些神经元按照层状结构排列,包括输入层、隐藏层和输出层。每个神经元接收输入,进行加权求和,并通过激活函数产生输出。 - **激活函数**:引入非线性,使得神经网络可以学习非线性关系。常见的激活函数有 Sigmoid、ReLU(Rectified Linear Unit)、Tanh 等。 - **损失函数**:衡量模型预测结果与真实结果之间的差异,常见的有均方误差(MSE)、交叉熵损失(Cross Entropy Loss)等,用于训练过程中优化模型。 - **优化器**:根据损失函数的梯度更新神经网络的权重,以最小化损失。常见的优化器有随机梯度下降(SGD)、Adam、RMSProp 等。 - **书籍**:《Deep Learning》(深度学习),由 Ian Goodfellow 等人编写,是深度学习领域的经典著作。 [DeepLearning 深度学习的图书](http://deep.gitpp.com/chap1.html) - **论文**:在 arXiv 和顶级会议(如 NeurIPS、ICML、ICLR)上阅读最新的深度学习论文,了解前沿研究。 # 中科院计算所 智能计算系统 AI Computing Systems 陈云霁 一套完整的智能计算体系,课件+源代码 [智能计算系统 AI Computing Systems 陈云霁](http://www.gitcc.com/hipo-ai/aics) # 最好的学习就是干项目 ## 实例 [基于深度学习的垃圾分类]( http://www.gitcc.com/ai100/dl-wastesort) http://www.gitcc.com/ai100/dl-wastesort [深度学习识别网站验证码](http://www.gitcc.com/ai100/captcha) 使用深度学习对人体心电数据进行多分类 [使用深度学习对人体心电数据进行多分类](http://www.gitcc.com/ai100/ecg-with-deep-learning) 工业场景:基于深度学习的滚动轴承故障诊断方法 [基于深度学习的滚动轴承故障诊断方法](http://www.gitcc.com/ai100/fault-diagnosis-dp) # 了解的一些项目,不一定是要做,但是看看真实的项目,培养感觉 1 轴承数据集故障诊断的仿真平台 用了简单的几个深度学习算法 [轴承数据集故障诊断的仿真平台](http://www.gitcc.com/robot101/bearingplatform_hua) ### 深度学习常见算法 以下是深度学习中的一些常见算法: ## 一、多层感知机(Multilayer Perceptron,MLP) - **算法介绍**: - MLP是一种最基本的前馈神经网络,由输入层、一个或多个隐藏层和输出层组成。每层包含多个神经元,神经元之间全连接。每个神经元接收上一层神经元的输出,经过加权求和和激活函数处理后传递给下一层。 - 激活函数用于引入非线性,常见的激活函数有 Sigmoid、ReLU、Tanh 等。 - MLP可以处理各种类型的数据,如分类、回归等任务,但在处理图像、音频、文本等复杂数据时,可能需要更多的预处理和特征工程。 - **代码示例**: ```python import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision import datasets, transforms # 数据预处理 transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) ]) # 加载MNIST数据集 trainset = datasets.MNIST(root='./data', train=True, download=True, transform=transform) trainloader = DataLoader(trainset, batch_size=64, shuffle=True) # 定义MLP模型 class MLP(nn.Module): def __init__(self): super(MLP, self).__init__() self.fc1 = nn.Linear(28 * 28, 512) self.fc2 = nn.Linear(512, 256) self.fc3 = nn.Linear(256, 10) def forward(self, x): x = x.view(-1, 28 * 28) x = torch.relu(self.fc1(x)) x = torch.relu(self.fc2(x)) x = self.fc3(x) return x model = MLP() # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(model.parameters(), lr=0.01) # 训练模型 for epoch in range(10): running_loss = 0.0 for i, data in enumerate(trainloader, 0): inputs, labels = data optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() if i % 100 == 99: print(f'Epoch {epoch + 1}, Batch {i + 1}, Loss: {running_loss / 100:.3f}') running_loss = 0.0 ``` - **代码解释**: - 首先,我们使用 `transforms` 对 MNIST 数据集进行预处理,将图像转换为张量并标准化。 - 定义 `MLP` 模型,包含三个全连接层,使用 `ReLU` 作为激活函数。 - 采用 `CrossEntropyLoss` 作为损失函数,`SGD` 作为优化器。 - 在训练过程中,对每个 `batch` 进行前向传播、计算损失、反向传播和参数更新。 ## 二、卷积神经网络(Convolutional Neural Network,CNN) - **算法介绍**: - CNN是专门为处理具有网格结构数据(如图像)而设计的网络。它由卷积层、池化层、全连接层等组成。 - 卷积层使用卷积核在输入上滑动进行卷积操作,提取局部特征。池化层(如最大池化、平均池化)对特征图进行降维操作,减少参数和计算量。 - 常见的 CNN 架构包括 LeNet、AlexNet、VGG、ResNet 等,用于图像分类、目标检测、图像分割等任务。 - **代码示例**: ```python import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision import datasets, transforms # 数据预处理 transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) ]) # 加载MNIST数据集 trainset = datasets.MNIST(root='./data', train=True, download=True, transform=transform) trainloader = DataLoader(trainset, batch_size=64, shuffle=True) # 定义简单的CNN模型 class SimpleCNN(nn.Module): def __init__(self): super(SimpleCNN, self).__init__() self.conv1 = nn.Conv2d(1, 32, 3, 1) self.conv2 = nn.Conv2d(32, 64, 3, 1) self.fc1 = nn.Linear(64 * 5 * 5, 128) self.fc2 = nn.Linear(128, 10) def forward(self, x): x = torch.relu(self.conv1(x)) x = torch.max_pool2d(x, 2) x = torch.relu(self.conv2(x)) x = torch.max_pool2d(x, 2) x = torch.flatten(x, 1) x = torch.relu(self.fc1(x)) x = self.fc2(x) return x model = SimpleCNN() # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # 训练模型 for epoch in range(10): running_loss = 0.0 for i, data in enumerate(trainloader, 0): inputs, labels = data optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() if i % 100 == 99: print(f'Epoch {epoch + 1}, Batch {i + 1}, Loss: {running_loss / 100:.3f}') running_loss = 0.0 ``` - **代码解释**: - 定义了一个简单的 `CNN` 模型,包含两个卷积层、两个池化层和两个全连接层。 - 卷积层使用 `Conv2d` 模块,池化层使用 `max_pool2d` 模块。 - 使用 `Adam` 优化器进行训练,训练过程与 `MLP` 类似。 ## 三、循环神经网络(Recurrent Neural Network,RNN) - **算法介绍**: - RNN 主要用于处理序列数据,如时间序列、文本等。它具有内部的循环结构,允许信息在序列中传递。 - 基本的 RNN 存在梯度消失和梯度爆炸问题,因此发展出了 LSTM(Long Short-Term Memory)和 GRU(Gated Recurrent Unit)等变种,通过门控机制解决这些问题。 - 可用于文本生成、机器翻译、语音识别等任务。 - **代码示例**: ```python import torch import torch.nn as nn import torch.optim as optim # 定义简单的RNN模型 class SimpleRNN(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(SimpleRNN, self).__init__() self.rnn = nn.RNN(input_size, hidden_size, batch_first=True) self.fc = nn.Linear(hidden_size, output_size) def forward(self, x): out, _ = self.rnn(x) out = self.fc(out[:, -1, :]) return out # 输入和输出维度 input_size = 10 hidden_size = 20 output_size = 1 # 创建模型、损失函数和优化器 model = SimpleRNN(input_size, hidden_size, output_size) criterion = nn.MSELoss() optimizer = optim.Adam(model.parameters(), lr=0.01) # 输入数据 x = torch.randn(1, 5, input_size) y = torch.randn(1, output_size) # 训练模型 for epoch in range(100): optimizer.zero_grad() output = model(x) loss = criterion(output, y) loss.backward() optimizer.step() ``` - **代码解释**: - 定义了一个简单的 `RNN` 模型,包含一个 `RNN` 层和一个全连接层。 - `batch_first=True` 表示输入数据的维度顺序为 `(batch, seq_length, input_size)`。 - 使用 `MSELoss` 作为损失函数,`Adam` 作为优化器,对随机生成的数据进行训练。 ## 四、长短时记忆网络(Long Short-Term Memory,LSTM) - **算法介绍**: - LSTM 是一种特殊的 RNN,具有记忆单元和三个门(输入门、遗忘门、输出门),可以更好地处理长序列中的长期依赖问题。 - 能够在处理序列数据时选择性地记住或忘记信息,使其在自然语言处理、时间序列预测等任务中表现出色。 - **代码示例**: ```python import torch import torch.nn as nn import torch.optim as optim # 定义简单的LSTM模型 class SimpleLSTM(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(SimpleLSTM, self).__init__() self.lstm = nn.LSTM(input_size, hidden_size, batch_first=True) self.fc = nn.Linear(hidden_size, output_size) def forward(self, x): out, _ = self.lstm(x) out = self.fc(out[:, -1, :]) return out # 输入和输出维度 input_size = 10 hidden_size = 20 output_size = 1 # 创建模型、损失函数和优化器 model = SimpleLSTM(input_size, hidden_size, output_size) criterion = nn.MSELoss() optimizer = optim.Adam(model.parameters(), lr=0.01) # 输入数据 x = torch.randn(1, 5, input_size) y = torch.randn(1, output_size) # 训练模型 for epoch in range(100): optimizer.zero_grad() output = model(x) loss = criterion(output, y) loss.backward() optimizer.step() ``` - **代码解释**: - 定义了一个简单的 `LSTM` 模型,包含一个 `LSTM` 层和一个全连接层。 - `batch_first=True` 表示输入数据的维度顺序为 `(batch, seq_length, input_size)`。 - 训练过程与 `RNN` 类似,但使用 `LSTM` 层处理序列数据。 ## 五、生成对抗网络(Generative Adversarial Network,GAN) - **算法介绍**: - GAN 由生成器(Generator)和判别器(Discriminator)组成。生成器试图生成逼真的数据,判别器试图区分真实数据和生成器生成的数据。 - 两者通过对抗训练,最终生成器可以生成高质量的模拟数据,可用于图像生成、数据增强、风格迁移等任务。 - **代码示例**: ```python import torch import torch.nn as nn import torch.optim as optim # 定义生成器 class Generator(nn.Module): def __init__(self, input_size, output_size): super(Generator, self).__init__() self.main = nn.Sequential( nn.Linear(input_size, 128), nn.ReLU(), nn.Linear(128, 256), nn.ReLU(), nn.Linear(256, output_size), nn.Tanh() ) def forward(self, x): return self.main(x) # 定义判别器 class Discriminator(nn.Module): def __init__(self, input_size): super(Discriminator, self).__init__() self.main = nn.Sequential( nn.Linear(input_size, 128), nn.LeakyReLU(0.2), nn.Linear(128, 64), nn.LeakyReLU(0.2), nn.Linear(64, 1), nn.Sigmoid() ) def forward(self, x): return self.main(x) # 输入和输出维度 input_size = 100 output_size = 784 # 创建生成器和判别器 generator = Generator(input_size, output_size) discriminator = Discriminator(output_size) # 定义损失函数和优化器 criterion = nn.BCELoss() optimizer_G = optim.Adam(generator.parameters(), lr=0.0002) optimizer_D = optim.Adam(discriminator.parameters(), lr=0.0002) # 训练过程 for epoch in range(100): # 训练判别器 optimizer_D.zero_grad() real_data = torch.randn(64, output_size) real_labels = torch.ones(64, 1) fake_data = generator(torch.randn(64, input_size)) fake_labels = torch.zeros(64, 1) real_output = discriminator(real_data) fake_output = discriminator(fake_data.detach()) loss_D_real = criterion(real_output, real_labels) loss_D_fake = criterion(fake_output, fake_labels) loss_D = loss_D_real + loss_D_fake loss_D.backward() optimizer_D.step() # 训练生成器 optimizer_G.zero_grad() fake_data = generator(torch.randn(64, input_size)) fake_output = discriminator(fake_data) loss_G = criterion(fake_output, real_labels) loss_G.backward() optimizer_G.step() ``` - **代码解释**: - 生成器将随机噪声作为输入,输出模拟数据。判别器将输入数据判断为真或假。 - 使用 `BCELoss` 作为损失函数,`Adam` 作为优化器。 - 训练过程中,先训练判别器区分真假数据,再训练生成器生成更逼真的数据。 ## 六、自编码器(Autoencoder) - **算法介绍**: - 自编码器是一种无监督学习算法,由编码器和解码器组成。编码器将输入数据压缩为低维表示(隐层),解码器将隐层表示还原为原始数据。 - 可用于数据降维、特征提取、去噪等任务。 - **代码示例**: ```python import torch import torch.nn as nn import torch.optim as optim # 定义自编码器 class Autoencoder(nn.Module): def __init__(self): super(Autoencoder, self).__init__() self.encoder = nn.Sequential( nn.Linear(784, 128), nn.ReLU(), nn.Linear(128, 64), nn.ReLU(), nn.Linear(64, 32) ) self.decoder = nn.Sequential( nn.Linear(32, 64), nn.ReLU(), nn.Linear(64, 128), nn.ReLU(), nn.Linear(128, 784), nn.Tanh() ) def forward(self, x): x = self.encoder(x) x = self.decoder(x) return x model = Autoencoder() # 定义损失函数和优化器 criterion = nn.MSELoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # 输入数据 x = torch.randn(1, 784) # 训练模型 for epoch in range(100): optimizer.zero_grad() outputs = model(x) loss = criterion(outputs, x) loss.backward() optimizer.step() ``` - **代码解释**: - 编码器将输入数据降维,解码器将其还原。 - 使用 `MSELoss` 作为损失函数,`Adam` 作为优化器,训练过程旨在最小化重构误差。 这些深度学习算法是深度学习领域的基础,每个算法都有其独特的特点和适用场景,在实际应用中,可根据具体任务选择合适的算法并进行相应的调参和优化。 深度学习领域在不断发展,新的算法和改进不断涌现,你可以通过阅读学术论文、参加在线课程、参与开源项目等方式不断更新知识,提升技能。 ### 深度学习一般都是一个流程,所以很容易就会发明 框架 以下是深度学习的一般流程: **一、问题定义** - 明确你想要解决的问题,例如图像分类、目标检测、语义分割、文本翻译、语音识别等。确定问题的类型(分类、回归、生成等)和性能指标(如准确率、召回率、F1分数、均方误差等),这将指导后续的模型选择和评估方法。 **二、数据收集与预处理** - **数据收集**: - 从各种来源收集相关数据,如公开数据集(如MNIST、CIFAR-10、ImageNet等),或通过网络爬虫、传感器采集、用户输入等方式获取数据。 - 确保数据的多样性和代表性,以保证模型能够学习到不同情况下的特征。 - **数据预处理**: - **数据清洗**:去除噪声数据、处理缺失值和异常值。例如,在处理文本数据时,可能需要删除无效字符;对于图像数据,可能需要修复损坏的图像。 - **数据归一化或标准化**:将数据缩放到合适的范围,例如将图像像素值归一化到[0, 1]或[-1, 1]区间,以加快模型收敛速度和提高稳定性。 - **数据增强**:对于图像和音频数据,可通过旋转、翻转、裁剪、添加噪声等方式增加数据的多样性,防止过拟合。在自然语言处理中,可通过同义词替换、词序调整等进行数据增强。 - **数据分割**:将数据划分为训练集、验证集和测试集。通常,大部分数据用于训练,一小部分用于验证和测试,比例可以是 70:15:15 或 80:10:10 等。 **三、选择深度学习模型** - 根据问题类型和数据特征选择合适的模型架构,例如: - **图像任务**: - 对于图像分类,可选择卷积神经网络(CNN),如经典的 AlexNet、VGG、ResNet、Inception 等。 - 对于目标检测,可选择 YOLO、Faster R-CNN、SSD 等。 - 对于图像分割,可选择 U-Net、Mask R-CNN 等。 - **序列数据任务**: - 对于文本处理,可选择循环神经网络(RNN)及其变种 LSTM、GRU,或更现代的 Transformer 架构,如 BERT、GPT 等。 - 对于时间序列预测,可选择 LSTM、GRU 或 Prophet 等。 - **生成任务**: - 可选择生成对抗网络(GAN)或变分自编码器(VAE)等。 **四、模型构建** - **定义模型架构**: - 使用深度学习框架(如TensorFlow、PyTorch)构建模型。 - 确定网络的层数、每层的神经元数量、激活函数(如ReLU、Sigmoid、Tanh)、池化层(如最大池化、平均池化)、正则化(如 L1、L2 正则化)等。 - 对于复杂任务,可能需要构建更复杂的架构,如编码器-解码器结构或多分支结构。 - **损失函数选择**: - 对于分类任务,可使用交叉熵损失(如二元交叉熵、多分类交叉熵)。 - 对于回归任务,可使用均方误差(MSE)、平均绝对误差(MAE)等。 - 对于生成任务,可使用如生成对抗网络中的二元交叉熵。 - **优化器选择**: - 常见的优化器有随机梯度下降(SGD)及其变种(如 SGD with momentum、Adagrad、Adadelta、RMSProp、Adam 等)。选择合适的学习率,并可根据需要调整优化器的其他参数,如动量(momentum)。 **五、模型训练** - **初始化模型参数**:随机初始化或使用预训练的参数。 - **设置训练超参数**:如学习率、批次大小、训练轮次(epochs)等。 - **训练过程**: - 将训练数据分批输入模型,进行前向传播,计算损失。 - 进行反向传播,使用优化器更新模型参数。 - 通常会使用验证集评估模型在训练过程中的性能,以监控过拟合或欠拟合情况,可使用早停法(Early Stopping)避免过拟合。 **六、模型评估与优化** - **评估**:使用测试集评估模型的性能,根据之前确定的性能指标计算得分。 - **优化**: - 如果性能未达到预期,可调整超参数(如学习率、批次大小、网络结构等),或尝试不同的优化器、损失函数。 - 也可收集更多数据或对现有数据进行更精细的预处理。 - 采用集成学习方法,将多个模型的结果进行组合,提高性能。 **七、模型部署与应用** - 将训练好的模型部署到实际应用中,例如: - 对于图像分类模型,可部署在移动设备或服务器上,用于图像识别应用。 - 对于自然语言处理模型,可集成到聊天机器人、文本分类系统等。 - 对于生成模型,可用于生成新的数据,如生成图像、文本等。 **八、持续改进** - 收集新的数据,不断更新和优化模型,以适应新的情况或提高性能。 深度学习是一个迭代的过程,在不同阶段都可能需要根据实际情况进行调整和优化,以获得最佳性能。通过不断的实验和学习,可以逐步提高对深度学习的掌握和应用能力。 如果你需要更深入的信息,如每个步骤的代码示例或对某个阶段的详细解释,可以继续向我询问。 # 二、深度学习框架 目前有许多深度学习框架可供选择,以下是几个常用的: - **TensorFlow**:由 Google 开发,功能强大且灵活,提供了从简单到复杂的各种深度学习模型的实现。 - **PyTorch**:以其动态计算图和易于使用的接口而受到欢迎,特别适合研究和开发。 - **Keras**:一个高级的神经网络 API,可以在 TensorFlow 或 Theano 上运行,提供了简洁的接口,适合快速开发。 # 三、深度学习入门步骤 ## (一)环境搭建 以下是使用 PyTorch 搭建深度学习环境的示例: ```bash pip install torch torchvision torchtext ``` ## (二)数据准备 深度学习的第一步是准备数据。以图像分类任务为例,我们可以使用 `torchvision` 中的 `MNIST` 数据集。 ```python import torch import torchvision import torchvision.transforms as transforms # 定义数据预处理 transform = transforms.Compose( [transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))] ) # 下载训练集和测试集 trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform) trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True, num_workers=2) testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform) testloader = torch.utils.data.DataLoader(testset, batch_size=64, shuffle=False, num_workers=2) ``` - **解释**: - `transforms.ToTensor()` 将图像转换为 PyTorch 的 `Tensor` 类型。 - `transforms.Normalize((0.5,), (0.5,))` 对数据进行标准化,使其范围在 -1 到 1 之间。 - `torch.utils.data.DataLoader` 用于将数据集封装为可迭代的数据加载器,便于批量处理。 ## (三)构建神经网络 下面是一个简单的全连接神经网络的 PyTorch 实现: ```python import torch.nn as nn import torch.nn.functional as F class SimpleNet(nn.Module): def __init__(self): super(SimpleNet, self).__init__() self.fc1 = nn.Linear(28 * 28, 128) # 输入层到第一个隐藏层 self.fc2 = nn.Linear(128, 64) # 第一个隐藏层到第二个隐藏层 self.fc3 = nn.Linear(64, 10) # 第二个隐藏层到输出层 def forward(self, x): x = x.view(-1, 28 * 28) # 将图像展平 x = F.relu(self.fc1(x)) # 第一个隐藏层,使用 ReLU 激活函数 x = F.relu(self.fc2(x)) # 第二个隐藏层,使用 ReLU 激活函数 x = self.fc3(x) # 输出层 return x net = SimpleNet() ``` - **解释**: - `nn.Linear` 表示全连接层。 - `forward` 方法定义了数据的前向传播路径,将输入通过各层和激活函数。 ## (四)定义损失函数和优化器 选择合适的损失函数和优化器: ```python import torch.optim as optim criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9) ``` - **解释**: - `nn.CrossEntropyLoss()` 用于多分类任务。 - `optim.SGD` 是随机梯度下降优化器,`lr` 是学习率,`momentum` 可以加速收敛。 ## (五)训练模型 以下是训练网络的代码: ```python # 训练周期 epochs = 10 for epoch in range(epochs): running_loss = 0.0 for i, data in enumerate(trainloader, 0): inputs, labels = data # 清零梯度 optimizer.zero_grad() # 前向传播 outputs = net(inputs) loss = criterion(outputs, labels) # 反向传播和优化 loss.backward() optimizer.step() running_loss += loss.item() if i % 200 == 199: print(f'Epoch {epoch + 1}, Batch {i + 1}, Loss: {running_loss / 200:.3f}') running_loss = 0.0 print('Finished Training') ``` - **解释**: - 每个 `epoch` 遍历整个数据集,`optimizer.zero_grad()` 清除梯度。 - `outputs = net(inputs)` 是前向传播,`loss.backward()` 是反向传播,`optimizer.step()` 更新权重。 ## (六)测试模型 以下是测试模型性能的代码: ```python correct = 0 total = 0 with torch.no_grad(): for data in testloader: inputs, labels = data outputs = net(inputs) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item() print(f'Accuracy of the network on the 10000 test images: {100 * correct / total}%') ``` - **解释**: - `torch.no_grad()` 表示在测试阶段不计算梯度。 - `torch.max(outputs.data, 1)` 找出每个样本输出概率最大的类别作为预测类别。 ## (七)保存和加载模型 保存和加载训练好的模型: ```python # 保存模型 torch.save(net.state_dict(), 'simplenet.pth') # 加载模型 net = SimpleNet() net.load_state_dict(torch.load('simplenet.pth')) ``` # 四、深度学习的应用 深度学习在许多领域都有广泛的应用,包括但不限于: - **图像识别**:如物体识别、人脸识别、场景分类等。 - **自然语言处理**:文本分类、机器翻译、情感分析等。 - **语音识别**:语音转文本、语音命令识别等。 # 五、进阶学习资源 - **在线课程**:Coursera 上的“深度学习专项课程”,由 Andrew Ng 教授讲授,涵盖深度学习的基础知识和实践。 - **书籍**:《Deep Learning》(深度学习),由 Ian Goodfellow 等人编写,是深度学习领域的经典著作。 [DeepLearning 深度学习的图书](http://deep.gitpp.com/chap1.html) - **论文**:在 arXiv 和顶级会议(如 NeurIPS、ICML、ICLR)上阅读最新的深度学习论文,了解前沿研究。 # 最好的学习就是干项目 ## 实例 商业级别 到这个水平 可以卖钱,接项目了 1) 基于深度学习高性能中文车牌识别 [基于深度学习高性能中文车牌识别](http://www.gitcc.com/ai100/hyperlpr-dp) 2)基于深度学习的滚动轴承故障诊断方法 [基于深度学习的滚动轴承故障诊断方法](http://www.gitcc.com/ai100/fault-diagnosis-dp) 3)基于深度学习的肿瘤辅助诊断系统 [基于深度学习的肿瘤辅助诊断系统](http://www.gitcc.com/datashow/gpp-ct) 4)一个基于深度学习的中文语音识别系统 [一个基于深度学习的中文语音识别系统](http://www.gitcc.com/hugindata/asrt_speechrecognition) 5)利用卫星和航空图像进行深度学习的技术 [利用卫星和航空图像进行深度学习的技术](http://www.gitcc.com/techniques/techniques) 当然,还有我们自己开源的 基于深度学习的工业低代码平台 https://www.gitcc.com/democode/ai-demo-hub # 返回 AI book [ AI book](http://www.gitcc.com/ai1/ai-book)