零基础 AI 入门实战(深度学习 + Pytorch)
一、引言
在当今这个科技飞速发展的时代,人工智能(AI)已经渗透到了我们生活和工作的方方面面。深度学习作为 AI 领域中的强大技术,更是展现出了巨大的应用潜力。而 Pytorch 作为一款广受欢迎的深度学习框架,为我们实现各种 AI 应用提供了便捷的工具。对于零基础跨专业的朋友们来说,可能会觉得 AI、深度学习这些概念高深莫测,但其实只要跟着一些简单易懂的实战案例一步步来,也能快速入门并提升自己的相关技能哦。接下来,咱们就开启这趟零基础 AI 入门实战之旅吧。
二、深度学习基础概念
(一)什么是深度学习
简单来说,深度学习就是让计算机模仿人类大脑的神经网络来学习和处理数据的一种技术。想象一下,人类通过不断观察、学习各种事物来积累经验并做出判断,深度学习中的神经网络也是通过大量的数据去 “学习”,然后能够对新的数据进行分类、预测等操作。比如说,我们可以给它成千上万张猫和狗的图片,让它学习分辨哪些是猫、哪些是狗,等它学习好了,再给它一张没见过的图片,它就能判断出这是猫还是狗了。
(二)神经网络的构成
神经网络是由很多神经元组成的,就好比人类大脑是由无数个神经细胞构成一样。一个基本的神经元会接收一些输入数据,然后对这些输入进行加权计算,并通过一个激活函数产生一个输出。多个这样的神经元按照不同的层次结构组合起来,就形成了神经网络。常见的神经网络结构有多层感知机(MLP)、卷积神经网络(CNN)用于处理图像数据、循环神经网络(RNN)及其变体(比如 LSTM、GRU)适合处理序列数据等。
三、Pytorch 简介
(一)Pytorch 的特点
Pytorch 是一个开源的深度学习框架,它有很多优点,对于初学者特别友好。首先,它的编程风格非常直观,采用了 Python 语言,如果你有一点 Python 的基础,上手就会很容易,就算没有也没关系,Python 本身也是一门容易学习的编程语言。其次,Pytorch 有动态计算图,这意味着我们可以在运行过程中灵活地改变计算的流程,方便调试代码和理解模型的运行机制。另外,它有强大的社区支持,遇到问题在网上一搜,就能找到很多解决办法和别人分享的经验。
(二)安装 Pytorch
安装 Pytorch 其实并不复杂,以下是大致的步骤(以常见的 Windows 和 Linux 系统为例):
Windows 系统:
确保你的电脑已经安装好了 Python,可以去 Python 官方网站下载最新版本安装包进行安装,安装过程中记得勾选添加到系统路径选项哦,方便后续在命令行里直接使用 Python 命令。
打开命令提示符(CMD),输入以下命令来安装 Pytorch(这里假设你要安装 CPU 版本,如果有 GPU 且配置好了相应环境,可以选择安装 GPU 版本,安装命令稍有不同):
bash
复制
pip install torch torchvision torchaudio
Linux 系统:
同样先安装好 Python,一般 Linux 系统自带 Python,但可能版本较低,可以通过包管理器或者源码编译等方式更新到合适版本。
打开终端,输入以下命令安装 Pytorch(以 CPU 版本为例):
bash
复制
pip install torch torchvision torchaudio
安装过程中可能会因为网络等原因出现一些小问题,耐心多试几次或者更换一下镜像源通常就能解决啦。
四、实战案例:图像分类
(一)准备数据
我们先来做一个简单的图像分类任务,把图像分为两类,比如是花朵和动物。首先要收集相关的数据,可以从网上的一些公开数据集去下载,像 CIFAR-10、Caltech 101 等,这些数据集里已经有做好分类标注的图像了。当然,如果想自己收集一些特定的图片也可以,不过需要手动标注一下类别哦。把收集好的数据整理到对应的文件夹里,比如一个文件夹放花朵图片,另一个文件夹放动物图片。
(二)数据预处理
拿到原始数据后还不能直接用它去训练模型,需要进行一些预处理操作。在 Pytorch 里,可以使用 torchvision 这个库来帮忙。常见的预处理步骤包括调整图像大小到统一尺寸(因为神经网络输入的图像尺寸一般要求固定)、归一化图像像素值(把像素值范围从 0 - 255 映射到 0 - 1 或者其他合适的范围,有助于模型训练)等。以下是一段简单的代码示例展示如何进行数据预处理:
python
复制
import torch
import torchvision.transforms as transforms
定义数据预处理的操作组合
transform = transforms.Compose([
transforms.Resize((224, 224)), # 调整图像大小为 224x224
transforms.ToTensor(), # 将图像转为张量格式,同时归一化像素值到 0-1
])
(三)构建模型
对于这个简单的图像分类任务,我们可以构建一个简单的卷积神经网络(CNN)模型。下面是一个用 Pytorch 构建的简单 CNN 模型的代码示例:
python
复制
import torch.nn as nn
class SimpleCNN(nn.Module):
def init(self):
super(SimpleCNN, self).init()
self.conv1 = nn.Conv2d(3, 16, kernel_size=3, padding=1) # 第一个卷积层,输入通道为 3(彩色图像 RGB),输出通道为 16
self.relu = nn.ReLU() # 激活函数
self.pool = nn.MaxPool2d(2, 2) # 最大池化层
self.conv2 = nn.Conv2d(16, 32, kernel_size=3, padding=1) # 第二个卷积层
self.fc1 = nn.Linear(32 * 112 * 112, 128) # 全连接层,这里的输入维度根据前面卷积池化后的结果计算得出
self.fc2 = nn.Linear(128, 2) # 输出层,输出两个类别(花朵和动物)的预测概率
def forward(self, x):
x = self.conv1(x)
x = self.relu(x)
x = self.pool(x)
x = self.conv2(x)
x = self.relu(x)
x = self.pool(x)
x = x.view(-1, 32 * 112 * 112) # 展平操作,方便输入全连接层
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
(四)训练模型
有了模型和处理好的数据后,就可以开始训练模型啦。训练过程主要包括设置好一些训练参数,比如学习率(它决定了模型每次更新参数的幅度大小,太大会导致模型训练不稳定,太小又会让训练速度很慢)、训练的轮数(也就是整个数据集反复让模型学习多少次)等,然后通过循环让模型不断地在训练数据上进行前向传播(根据输入数据得到预测结果)和反向传播(根据预测结果和真实标签的差异来调整模型的参数)。以下是一段简单的训练代码示例:
python
复制
import torch.optim as optim
创建模型实例
model = SimpleCNN()
定义损失函数,这里使用交叉熵损失函数,适合分类任务
criterion = nn.CrossEntropyLoss()
定义优化器,使用随机梯度下降(SGD)优化器,学习率设为 0.001
optimizer = optim.SGD(model.parameters(), lr=0.001)
假设我们已经把处理好的数据加载到了 data_loader 里(具体加载数据的代码这里省略,可以用 Pytorch 的 DataLoader 类来实现)
for epoch in range(10): # 训练 10 轮
running_loss = 0.0
for i, data in enumerate(data_loader, 0):
inputs, labels = data # 获取输入图像和对应的标签
optimizer.zero_grad() # 每次迭代前先把梯度清零
outputs = model(inputs) # 前向传播
loss = criterion(outputs, labels) # 计算损失
loss.backward() # 反向传播
optimizer.step() # 更新模型参数
running_loss += loss.item()
print(f'Epoch {epoch + 1}, Loss: {running_loss / len(data_loader)}')
(五)评估模型
训练好模型后,我们要看看它的效果怎么样呀,这时候就需要在一些测试数据上进行评估了。一般通过计算准确率等指标来衡量模型的好坏。以下是简单的评估代码示例:
python
复制
correct = 0
total = 0
with torch.no_grad(): # 在评估阶段不需要计算梯度,节省内存和计算资源
for data in test_loader: # 假设测试数据已经加载到 test_loader 里
images, labels = data
outputs = model(images)
_, predicted = torch.max(outputs.data, 1) # 获取预测的类别
total += labels.size(0)
correct += (predicted == labels).sum().item()
print(f'Accuracy of the model on the test images: {100 * correct / total}%')
五、总结与提升
通过这个简单的图像分类实战案例,相信零基础跨专业的朋友们对 AI 中的深度学习以及 Pytorch 框架有了一个初步的认识和实践体验啦。当然,这只是一个入门的小案例,AI 领域还有很多有趣又复杂的内容等着大家去探索呢。
可以进一步尝试不同的网络结构,比如把我们上面的简单 CNN 变得更复杂一点,增加更多的卷积层、全连接层等,看看模型的性能会不会提升。还可以尝试处理其他类型的数据,像文本数据、音频数据等,对应地学习使用不同的神经网络模型,比如用循环神经网络处理文本,用卷积神经网络处理音频的频谱图等。另外,多去学习别人优秀的项目经验,阅读相关的书籍和论文,参加一些线上线下的 AI 学习社区或者论坛,不断交流和实践,就能在 AI 这个充满魅力的领域里不断提升自己啦。希望大家都能在 AI 学习之路上收获满满哦!