1、引言
小屌丝:鱼哥, 最近忙啥嘞?
小鱼:啥也没干。
小屌丝:确定 没干??
小鱼:… 这话到你嘴里,咋就变为了。
小屌丝:也没有啊, 我就是确认下,你干没干。
小鱼:… 能干啥, 你想干啥 ?
小屌丝:我想请教你个问题。
小鱼:正儿八经的问题 ,是不?
小屌丝:你就看我今天这身穿的,还能不正经?
小鱼:穿新鞋走老路
小屌丝:此话咋讲?
小鱼:虚礼尽去
小屌丝:… 还整上词了。不管咋样,我还是要像你请教
小鱼:请教啥?
小屌丝:嘿嘿, 那鱼哥给我讲一讲 PyTorch呗
小鱼:麻雀讲家史、唐僧念紧箍咒、
小屌丝:这有咋讲?
小鱼:一言难尽。
小屌丝:那就慢慢讲, 又不着急
小鱼:…
2、PyTorch
2.1 PyTroch介绍
PyTorch简介
PyTorch是一个基于Python的科学计算库,它使用Tensor作为核心数据结构,并提供了强大的张量计算功能。PyTorch是由Facebook人工智能研究院(FAIR)开发并维护的,旨在为机器学习和深度学习研究者提供一个灵活、易于使用且高性能的工具。
2.2 PyTorch 核心特点
PyTorch的核心特点包括:
- 动态计算图:PyTorch使用动态计算图进行张量计算,这使得代码更加直观且易于调试。
- 可变形数组:PyTorch的张量支持可变形,这意味着它们可以在运行时改变形状和大小,这对于某些深度学习算法来说非常有用。
- 自动微分:PyTorch提供了自动微分功能,可以自动计算张量的梯度,这在深度学习中非常有用。
- GPU加速:PyTorch支持GPU加速,可以在处理大规模数据时提高计算性能。
- 丰富的API和扩展:PyTorch提供了丰富的API和扩展,可以方便地构建各种类型的神经网络模型。
2.3 PyTorch实例
2.3.1 安装
因为PyTorch是三方库,所以,要使用的话,需要安装,老规矩, 先pip 方式安装:
pip install torch torchvision torchaudio
其余安装方式,可以参照这两篇:
- 《Python3,选择Python自动安装第三方库,从此跟pip说拜拜!!》
- 《Python3:我低调的只用一行代码,就导入Python所有库!》
2.3.2 实例
- 示例1:对张量进行常规操作
# 创建一个张量
x = torch.tensor([1, 2, 3])
print(x)
# 对张量进行操作
y = x + 1
print(y)
- 示例2:定义神经网络模型
# -*- coding:utf-8 -*-
# @Time : 2023-09-25
# @Author : Carl_DJ
'''
实现功能:
定义神经网络模型
'''
import torch.nn as nn
import torch.optim as optim
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(3, 4)
self.fc2 = nn.Linear(4, 2)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
- 示例3:模型训练
创建模型实例并定义损失函数和优化器
# -*- coding:utf-8 -*-
# @Time : 2023-09-25
# @Author : Carl_DJ
'''
实现功能:
训练模型
'''
for i in range(100):
# 前向传播
inputs = torch.randn(1, 3)
labels = torch.randn(1, 2)
outputs = model(inputs)
loss = criterion(outputs, labels)
# 反向传播和优化
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 输出损失值
print('Epoch {}, Loss: {:.4f}'.format(i, loss.item()))
当然,PyTorch还有其他的功能,这里我再写一个示例,让你加深对PyTorch的了解。
- 示例4:分类手写数字
# -*- coding:utf-8 -*-
# @Time : 2023-09-25
# @Author : Carl_DJ
'''
实现功能:
实现分类手写数字
'''
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
# 定义数据预处理方法
transform = transforms.Compose([
transforms.ToTensor(), # 将图像转换为张量
transforms.Normalize((0.1307,), (0.3081,)) # 对张量进行标准化
])
# 加载 MNIST 数据集
train_dataset = datasets.MNIST('./data', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST('./data', train=False, download=True, transform=transform)
# 定义数据加载器
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=64, shuffle=True)
# 定义神经网络结构
class Net(nn.Module):
def __init__(self):
super(Net, 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 = Net()
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(train_loader, 0):
inputs, labels = data
optimizer.zero_grad() # 清空梯度缓存
outputs = model(inputs) # 前向传播
loss = criterion(outputs, labels) # 计算损失函数
loss.backward() # 反向传播
optimizer.step() # 更新权重
running_loss += loss.item() # 累加损失函数值
print('Epoch %d loss: %.3f' % (epoch + 1, running_loss / len(train_loader)))
# 测试神经网络
correct = 0
total = 0
with torch.no_grad(): # 关闭梯度计算
for data in test_loader:
images, labels = data
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print('Accuracy of the network on the test images: %d %%' % (100 * correct / total))
**小屌丝:**鱼哥,你给我解析一下,这段代码啊。
**小鱼:**这也需要解析? 我写的不够清楚啊?
小屌丝:不不不,已经够清楚了,只是我还想在继续了解一下
**小鱼:**看在你这么好学的份上,我就解析一下。
- 解析:
- 首先、加载MNIST数据集并对数据进行预处理;
- 其次、定义一个包含三个全连接层的神经网络,使用交叉熵损失函数来衡量网络的输出与标签之间的差距;
- 第三、 使用随机梯度下降(SGD)算法训练神经网络;
- 最后、测试网络的准确率。
小屌丝:奈斯。
3、总结
看到这里,今天的分享差不多就该结束了。
当然,按照惯例,我们在回顾一下今天的内容:
- PyTorch的基本概念
- PyTorch的特点:
- 动态计算图
- 可变形数组
- 自动微分
- GPU加速
- 丰富的API和扩展
- PyTorch的代码示例
在最后,小鱼再唠叨一句,在当前人工智能遍布各个行业的今天, 作为一名新生代农民工,多多少少都需要了解人工智能的知识。
我是小鱼:
- 博客专家;
- 阿里云 专家博主;
- 51CTO博客专家;
- 51认证讲师等;
- 认证金牌面试官;
- 职场面试及培训规划师;
- 多个国内主流技术社区的认证专家博主;
- 多款主流产品(阿里云等)测评一、二等奖获得者;
关注小鱼,带你学习更多更专业更前言的人工智能相关技术。