文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Pytorch中的NN模块并实现第一个神经网络模型

2024-12-03 02:51

关注

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

nn.Linear

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

  1. linear = nn.Linear(10, 2) 
  2. example_input = torch.randn(3, 10) 
  3. example_output = linear(example_input) 
  4. example_output 

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

  1. print(example_input) 
  2. print(example_output) 
  3.  
  4. tensor([[ 1.1122, -0.1381,  0.5547, -0.3326, -0.5676,  0.2810, -0.5521, -0.8729, 
  5.          -0.6627,  0.8729], 
  6.         [ 1.9134,  0.2397, -0.8340,  1.1532, -1.6725,  0.6171, -0.0357, -1.6848, 
  7.          -0.8454,  0.3876], 
  8.         [-0.0786, -0.1541, -0.8385, -0.1587, -0.0121,  1.4457, -0.0132,  1.5653, 
  9.          -1.6954, -0.9350]]) 
  10. # 输出如下 
  11. tensor([[-0.1249, -0.8002], 
  12.         [-1.0945, -0.2297], 
  13.         [-0.3558,  0.8439]], grad_fn=

nn.Relu

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

  1. relu = nn.ReLU()  
  2. relu_output = relu(example_output)  
  3. relu_output 
  4.  
  5. # 输出如下 
  6. tensor([[0.0000, 0.0000], 
  7.         [0.0000, 0.0000], 
  8.         [0.0000, 0.8439]], grad_fn=

nn.BatchNorm1d

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

  1. batchnorm = nn.BatchNorm1d(2)  
  2. batchnorm_output = batchnorm(relu_output)  
  3. batchnorm_output 
  4.  
  5. # 输出如下 
  6. tensor([[ 0.0000, -0.7071], 
  7.         [ 0.0000, -0.7071], 
  8.         [ 0.0000,  1.4142]], grad_fn=

nn.Sequential

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

  1. mlp_layer = nn.Sequential( 
  2.     nn.Linear(5, 2), 
  3.     nn.BatchNorm1d(2), 
  4.     nn.ReLU() 
  5. test_example = torch.randn(5,5) + 1 
  6. print("input: "
  7. print(test_example) 
  8. print("output: "
  9. print(mlp_layer(test_example)) 
  10.  
  11. # 输出如下 
  12. input:  
  13. tensor([[ 1.4617,  1.2446,  1.4919,  1.5978, -0.3410], 
  14.         [-0.2819,  0.5567,  1.0113,  1.8053, -0.0833], 
  15.         [ 0.2830,  1.0857,  1.2258,  2.6602,  0.1339], 
  16.         [ 0.8682,  0.9344,  1.3715,  0.0279,  1.8011], 
  17.         [ 0.6172,  1.1414,  0.6030,  0.3876,  1.3653]]) 
  18. output:  
  19. tensor([[0.0000, 0.0000], 
  20.         [0.0000, 1.3722], 
  21.         [0.0000, 0.8861], 
  22.         [1.0895, 0.0000], 
  23.         [1.3047, 0.0000]], grad_fn=

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

  1. import torch.optim as optim 
  2. adam_opt = optim.Adam(mlp_layer.parameters(), lr=1e-1) 
  3. # 这里lr表示学习率,1e-1表示0.1 
  4. train_example = torch.randn(100,5) + 1 
  5. adam_opt.zero_grad() 
  6. # 我们将使用1减去平均值,作为简单损失函数 
  7. cur_loss = torch.abs(1 - mlp_layer(train_example)).mean() 
  8. cur_loss.backward() 
  9. # 更新参数 
  10. adam_opt.step() 
  11. print(cur_loss.data) 
  12. # 输出如下 
  13. tensor(0.7467) 

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

第一个神经网络模型

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

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

  1. import torch  
  2. import torch.nn as nn 

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

  1. n_in, n_h, n_out, batch_size = 10, 5, 1, 10 

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

  1. x = torch.randn(batch_size, n_in) 
  2. y = torch.tensor([[1.0], [0.0], [0.0],  
  3. [1.0], [1.0], [1.0], [0.0], [0.0], [1.0], [1.0]]) 

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

  1. model = nn.Sequential(nn.Linear(n_in, n_h), 
  2.    nn.ReLU(), 
  3.    nn.Linear(n_h, n_out), 
  4.    nn.Sigmoid()) 

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

  1. # 构造损失函数 
  2. criterion = torch.nn.MSELoss() 
  3. # 构造优化器 
  4. optimizer = torch.optim.SGD(model.parameters(), lr = 0.01) 

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

  1. # 梯度下降 
  2. for epoch in range(50): 
  3.    # 正向传递:通过将x传递给模型来计算预测的y 
  4.    y_pred = model(x) 
  5.  
  6.    # 计算loss 
  7.    loss = criterion(y_pred, y) 
  8.  
  9.    # 梯度清0 
  10.    optimizer.zero_grad() 
  11.  
  12.    # 反向传播,求解梯度 
  13.    loss.backward() 
  14.  
  15.    # 更新模型参数 
  16.    optimizer.step() 
  17.    if epoch % 10 == 0: 
  18.       print('epoch: ', epoch,' loss: ', loss.item()) 

输出如下

  1. epoch:  0  loss:  0.2508794665336609 
  2. epoch:  10  loss:  0.24847669899463654 
  3. epoch:  20  loss:  0.24615907669067383 
  4. epoch:  30  loss:  0.24392127990722656 
  5. epoch:  40  loss:  0.24175791442394257 

 【编辑推荐】

  1. 热搜第一!B站up主用AI让李大钊陈延年等露出了笑容
  2. 网工必看!如何形象生动的解释IP地址、子网掩码和网关?
  3. 微软 Windows 11 关机、重启时新增「更新时间」预估
  4. Windows11 没了 IE 浏览器,教你如何在 Edge 中开启 IE 模式
  5. Windows 11预览版突然来了!海量大图带你领略Windows 11

 

来源:Python之王内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯