《大语言模型开发:用开源模型开发本地系统》分享2:深度学习框架:PyTorch
<p><span style="font-family:Microsoft YaHei;"><span style="font-size:16px;">深度学习是人工智能领域中的非常重要的一个领域,深度学习框架中比较知名的有TransorFlow、Pytorch、Keras等。今天的分享就介绍Pytorch以及用Pytorch编码的神经网络代码。</span></span></p><p><span style="font-family:Microsoft YaHei;"><strong><span style="font-size:20px;">PyTorch简介</span></strong><br />
<span style="font-size:16px;">在开始之前,让我们先来简单了解一下PyTorch。PyTorch是由Facebook的人工智能研究团队开发的一个开源机器学习库,它广泛用于计算机视觉和自然语言处理等应用。PyTorch以其动态计算图、易用性和灵活性而闻名,这使得它成为了许多研究者和开发者的首选工具。</span></span></p>
<p><span style="font-family:Microsoft YaHei;"><strong><span style="font-size:20px;">PyTorch安装</span></strong><br />
<span style="font-size:16px;">在开始使用PyTorch之前,我们需要先进行安装。</span></span></p>
<p><span style="font-family:Microsoft YaHei;"><span style="font-size:16px;">Pytorch网址是<a href="https://pytorch.org" target="_blank">https://pytorch.org</a>/,提供了PyTotch框架的不同安装方式</span></span></p>
<p> </p>
<p><span style="font-family:Microsoft YaHei;"><span style="font-size:16px;">安装PyTorch的过程非常简单,我们可以通过Python的包管理器pip来安装。在命令行中输入以下命令即可:</span></span></p>
<pre>
<code>pip install torch torchvision</code></pre>
<p><br />
<span style="font-family:Microsoft YaHei;"><span style="font-size:16px;">这样,PyTorch及其视觉库vision就安装完成了。安装完成后,我们可以通过简单的代码来测试是否安装成功:</span></span></p>
<pre>
<code>import torch
print(torch.__version__)</code></pre>
<p><span style="font-family:Microsoft YaHei;"><span style="font-size:16px;">如果输出了版本号,那么恭喜您,PyTorch已经成功安装在您的机器上了。</span></span></p>
<p><span style="font-family:Microsoft YaHei;"><strong><span style="font-size:20px;">张量</span></strong><br />
<span style="font-size:16px;">在PyTorch中,张量(Tensor)是最基本的数据结构,类似于NumPy中的数组。张量可以包含标量、向量、矩阵或高维数据。PyTorch的张量操作非常灵活,支持各种数学运算,例如加法、乘法等。</span></span><br />
</p>
<pre>
<code># 创建一个张量
tensor = torch.tensor()
print(tensor)
# 张量运算
result = tensor + 2
print(result)</code></pre>
<p><br />
<span style="font-family:Microsoft YaHei;"><strong><span style="font-size:20px;">梯度计算</span></strong><br />
<span style="font-size:16px;">在深度学习中,梯度计算是一个核心概念。PyTorch提供了自动梯度计算的功能,这大大简化了我们对模型进行训练的过程。当我们需要计算某个张量的梯度时,只需调用.backward()方法。</span></span><br />
</p>
<pre>
<code># 需要计算梯度的张量
x = torch.tensor(, requires_grad=True)
# 计算梯度
y = x ** 2
y.backward(torch.tensor())
# 输出梯度
print(x.grad)</code></pre>
<p><br />
<span style="font-family:Microsoft YaHei;"><strong><span style="font-size:20px;">反向传播</span></strong><br />
<span style="font-size:16px;">反向传播是神经网络训练中的关键步骤,它通过计算损失函数关于模型参数的梯度来更新参数。在PyTorch中,我们通常不需要手动实现反向传播,因为框架会自动为我们处理。</span></span><br />
</p>
<pre>
<code># 定义一个简单的函数
def f(x):
return x ** 2
# 计算梯度
x = torch.tensor(, requires_grad=True)
f(x).backward()
print(x.grad)</code></pre>
<p><br />
<span style="font-family:Microsoft YaHei;"><span style="font-size:20px;"><strong>torch.nn模块构建神经网络</strong></span><br />
<span style="font-size:16px;">torch.nn模块是PyTorch中用于构建神经网络的核心模块。它提供了一系列的类和函数,可以帮助我们快速构建各种类型的神经网络层。</span></span><br />
</p>
<pre>
<code>import torch.nn as nn
# 定义一个简单的神经网络
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(10, 5)
self.fc2 = nn.Linear(5, 2)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
# 实例化网络
net = Net()</code></pre>
<p><br />
<span style="font-family:Microsoft YaHei;"><strong><span style="font-size:20px;">torch.optim优化器</span></strong><br />
<span style="font-size:16px;">在训练神经网络时,优化器是调整模型参数以最小化损失函数的关键组件。torch.optim模块提供了多种优化算法,如SGD、Adam等。</span></span><br />
</p>
<pre>
<code>import torch.optim as optim
# 定义优化器
optimizer = optim.SGD(net.parameters(), lr=0.01)</code></pre>
<p><br />
<span style="font-family:Microsoft YaHei;"><strong><span style="font-size:20px;">训练、验证和测试过程</span></strong><br />
<span style="font-size:16px;">训练神经网络通常包括三个阶段:训练、验证和测试。在训练阶段,我们使用训练数据来更新模型参数;在验证阶段,我们使用验证数据来评估模型的性能;在测试阶段,我们使用测试数据来最终评估模型的泛化能力。</span></span></p>
<p> </p>
<pre>
<code># 训练过程示例
for epoch in range(num_epochs):
for data, target in train_loader:
optimizer.zero_grad()
output = net(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()</code></pre>
<p><br />
<span style="font-family:Microsoft YaHei;"><strong><span style="font-size:20px;">用Pytorch实现神经网络</span></strong><br />
<span style="font-size:16px;">通过上述的介绍,我们已经了解了PyTorch的基本组件和概念。现在,让我们来看一个简单的神经网络实现示例。</span></span></p>
<p> </p>
<pre>
<code>import torch
import torch.nn as nn
import torch.optim as optim
#定义神经网络模型
class CloudServiceUsageModel(nn.Module):
def __init__(self,input size, hidden size, num classes):
super(CloudServiceUsageModel, self).__init__()
self.fcl =nn.Linear(input_size,hidden_size)
self.relu = nn.ReLU()
self.fc2 =nn.Linear(hidden size,num classes)
def forward(self,x):
out = self.fc1(x)out= self.relu(out)
out = self.fc2(out)
return out
#准备数据
input size = 10
hidden size =5
num classes=2
learning rate=0.001
num epochs=100
#随机生成一些示例数据
X= torch,randn(100,input size)
Y=torch.randint(0,num classes,(100,))
#划分训练集和测试集
train_size=int(0.8 *len(X))
train_X,test_x=X[:train size],X
train_Y,test_Y=Y[:train size],Y
#初始化模型、损失函数和优化器
model =CloudServiceUsageModel(input size, hidden size, num classes)
criterion =nn.CrossEntropyLoss()
optimizer =optim.Adam(model.parameters(),lr=learning rate)
#模型训练
for epoch in range(num epochs):
#前向传播
outputs = model(train X)
loss =criterion(outputs,train Y)
#反向传播和优化
optimizer.zero grad()
loss.backward()
optimizer.step()
#打印训练信息
if(epoch+1)%10 == 0:
print(f'Epoch {epoch+l}/{num epochs), Loss: {loss.item()}')
#模型评估
with torch.no grad():
outputs =model(test X)
_, predicted = torch.max(outputs.data,1)
accuracy =(predicted ==test Y).sum().item()/ len(test Y)
print(f'Test Accuracy:{accuracy}')</code></pre>
<p><span style="font-family:Microsoft YaHei;"><strong><span style="font-size:16px;">运行输出为</span></strong></span></p>
<pre>
<code>Epoch 10/100,Loss:0.7254490852355957
Epoch 20/100,Loss:0.7173128724098206
Epoch 30/100,Loss:0.7097707986831665
Epoch 40/100,Loss:0.7027563452720642
Epoch 50/100, Loss:0.6960537433624268
Epoch 60/100,Loss:0.6897956728935242
Epoch 70/100,Loss:0.6836565732955933
Epoch 80/100,Loss:0.6769127249717712
Epoch 90/100,Loss:0.6696738004684448
Epoch 100/100,Loss:0.6618732213973999
Test Accuracy:0.3</code></pre>
<p><br />
<span style="font-family:Microsoft YaHei;"><strong><span style="font-size:20px;">源代码常用模块</span></strong></span></p>
<p><span style="font-family:Microsoft YaHei;"><span style="font-size:16px;">在实际开发中,我们还会用到PyTorch的许多其他模块,如nn.Parameter类,将需要被优化的张量(参数)标记为网络可训练的参数,方便进行参数更新和优化;typing模块提供了类型提示和类型注解的功能;logging模块用于记录和管理应用程序的日志信息,提供了灵活的配置选项,允许不同级别的日志过滤信息;torchvision模块用于图像处理,torch.utils.data用于数据加载和处理等。这些模块都极大地丰富了PyTorch的功能,使得我们能够更加便捷地进行深度学习项目的开发。</span></span></p>
<p><strong><span style="font-size:20px;"><span style="font-family:Microsoft YaHei;">总结</span></span></strong></p>
<p><span style="font-family:Microsoft YaHei;"><span style="font-size:16px;">今天的分享,希望大家能够对PyTorch有一个初步的了解,并激发起和大家进一步探索和学习的兴趣。深度学习是一个不断发展的领域,而PyTorch作为一个强大的工具,能够帮助我们更好地理解和实现深度学习模型。</span></span></p>
<p>训练神经网络通常包括三个阶段:训练、验证和测试,这是个重点</p>
<p>谢谢分享,期待后续!</p>
页:
[1]