前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【小白学习PyTorch教程】三、Pytorch中的NN模块并实现第一个神经网络模型

【小白学习PyTorch教程】三、Pytorch中的NN模块并实现第一个神经网络模型

作者头像
润森
发布2022-08-18 09:22:33
4380
发布2022-08-18 09:22:33
举报
文章被收录于专栏:毛利学Python

「@Author:Runsen」

在PyTorch建立模型,主要是NN模块。

nn.Linear

nn.Linear是创建一个线性层。这里需要将输入和输出维度作为参数传递。

代码语言:javascript
复制
linear = nn.Linear(10, 2)
example_input = torch.randn(3, 10)
example_output = linear(example_input)
example_output

上面代码linear接受nx10的输入并返回nx2的输出。

代码语言:javascript
复制
print(example_input)
print(example_output)

tensor([[ 1.1122, -0.1381,  0.5547, -0.3326, -0.5676,  0.2810, -0.5521, -0.8729,
         -0.6627,  0.8729],
        [ 1.9134,  0.2397, -0.8340,  1.1532, -1.6725,  0.6171, -0.0357, -1.6848,
         -0.8454,  0.3876],
        [-0.0786, -0.1541, -0.8385, -0.1587, -0.0121,  1.4457, -0.0132,  1.5653,
         -1.6954, -0.9350]])
# 输出如下
tensor([[-0.1249, -0.8002],
        [-1.0945, -0.2297],
        [-0.3558,  0.8439]], grad_fn=<AddmmBackward>)

nn.Relu

nn.Relu对线性的给定输出执行 relu 激活函数操作。

代码语言:javascript
复制
relu = nn.ReLU() 
relu_output = relu(example_output) 
relu_output

# 输出如下
tensor([[0.0000, 0.0000],
        [0.0000, 0.0000],
        [0.0000, 0.8439]], grad_fn=<ReluBackward0>)

nn.BatchNorm1d

nn.BatchNorm1d是一种标准化技术,用于在不同批次的输入中保持一致的均值和标准偏差。

代码语言:javascript
复制
batchnorm = nn.BatchNorm1d(2) 
batchnorm_output = batchnorm(relu_output) 
batchnorm_output

# 输出如下
tensor([[ 0.0000, -0.7071],
        [ 0.0000, -0.7071],
        [ 0.0000,  1.4142]], grad_fn=<NativeBatchNormBackward>)

nn.Sequential

nn.Sequential一次性创建一系列操作。和tensorflow中的Sequential完全一样。

代码语言:javascript
复制
mlp_layer = nn.Sequential(
    nn.Linear(5, 2),
    nn.BatchNorm1d(2),
    nn.ReLU()
)
test_example = torch.randn(5,5) + 1
print("input: ")
print(test_example)
print("output: ")
print(mlp_layer(test_example))

# 输出如下
input: 
tensor([[ 1.4617,  1.2446,  1.4919,  1.5978, -0.3410],
        [-0.2819,  0.5567,  1.0113,  1.8053, -0.0833],
        [ 0.2830,  1.0857,  1.2258,  2.6602,  0.1339],
        [ 0.8682,  0.9344,  1.3715,  0.0279,  1.8011],
        [ 0.6172,  1.1414,  0.6030,  0.3876,  1.3653]])
output: 
tensor([[0.0000, 0.0000],
        [0.0000, 1.3722],
        [0.0000, 0.8861],
        [1.0895, 0.0000],
        [1.3047, 0.0000]], grad_fn=<ReluBackward0>)

在上面的模型中缺少了优化器,我们无法得到对应损失。

代码语言:javascript
复制
import torch.optim as optim
adam_opt = optim.Adam(mlp_layer.parameters(), lr=1e-1)
# 这里lr表示学习率,1e-1表示0.1
train_example = torch.randn(100,5) + 1
adam_opt.zero_grad()
# 我们将使用1减去平均值,作为简单损失函数
cur_loss = torch.abs(1 - mlp_layer(train_example)).mean()
cur_loss.backward()
# 更新参数
adam_opt.step()
print(cur_loss.data)
# 输出如下
tensor(0.7467)

虽然上面只是用了一个epoch,训练线性模型得到loss为0.7467,上面就是NN模型建立model的整个流程,

第一个神经网络模型

下面实现第一个分类神经网络,其中一个隐藏层用于开发单个输出单元。

首先,使用以下命令导入 PyTorch 库 -

代码语言:javascript
复制
import torch 
import torch.nn as nn

定义所有层和批量大小以开始执行神经网络,如下所示 -

代码语言:javascript
复制
n_in, n_h, n_out, batch_size = 10, 5, 1, 10

由于神经网络包括输入数据的组合以获得相应的输出数据,我们将遵循以下相同的程序 -

代码语言:javascript
复制
x = torch.randn(batch_size, n_in)
y = torch.tensor([[1.0], [0.0], [0.0], 
[1.0], [1.0], [1.0], [0.0], [0.0], [1.0], [1.0]])

创建顺序模型。使用下面代码,创建一个顺序模型 -

代码语言:javascript
复制
model = nn.Sequential(nn.Linear(n_in, n_h),
   nn.ReLU(),
   nn.Linear(n_h, n_out),
   nn.Sigmoid())

借助梯度下降优化器构建损失函数,如下所示 -

代码语言:javascript
复制
# 构造损失函数
criterion = torch.nn.MSELoss()
# 构造优化器
optimizer = torch.optim.SGD(model.parameters(), lr = 0.01)

使用给定代码行的迭代循环实现梯度下降模型 -

代码语言:javascript
复制
# 梯度下降
for epoch in range(50):
   # 正向传递:通过将x传递给模型来计算预测的y
   y_pred = model(x)

   # 计算loss
   loss = criterion(y_pred, y)

   # 梯度清0
   optimizer.zero_grad()

   # 反向传播,求解梯度
   loss.backward()

   # 更新模型参数
   optimizer.step()
   if epoch % 10 == 0:
      print('epoch: ', epoch,' loss: ', loss.item())

输出如下

代码语言:javascript
复制
epoch:  0  loss:  0.2508794665336609
epoch:  10  loss:  0.24847669899463654
epoch:  20  loss:  0.24615907669067383
epoch:  30  loss:  0.24392127990722656
epoch:  40  loss:  0.24175791442394257
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小刘IT教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • nn.Linear
  • nn.Relu
  • nn.BatchNorm1d
  • nn.Sequential
  • 第一个神经网络模型
相关产品与服务
批量计算
批量计算(BatchCompute,Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算 Batch 可以根据用户提供的批处理规模,智能地管理作业和调动其所需的最佳资源。有了 Batch 的帮助,您可以将精力集中在如何分析和处理数据结果上。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档