广告
返回顶部
首页 > 资讯 > 精选 >如何使用Pytorch实现two-head模型
  • 693
分享到

如何使用Pytorch实现two-head模型

2023-06-15 07:06:35 693人浏览 安东尼
摘要

这篇文章将为大家详细讲解有关如何使用PyTorch实现two-head模型,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何使用Pytorch实现two-head(多输出)模型1. two-head模型定

这篇文章将为大家详细讲解有关如何使用PyTorch实现two-head模型,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

如何使用Pytorch实现two-head(多输出)模型

1. two-head模型定义

先放一张我要实现的模型结构图:

如何使用Pytorch实现two-head模型

如上图,就是一个two-head模型,也是一个但输入多输出模型。该模型的特点是输入一个x和一个t,h0和h2中只有一个会输出,所以可能这不算是一个典型的多输出模型。

2.实现所遇到的困难 一开始的想法:

这不是很简单嘛,做一个判断不就完了,t=0时模型为前半段加h0,t=1时模型为前半段加h2。但实现的时候傻眼了,发现在真正前向传播的时候t是一个tensor,有0有1,没法儿进行判断。

灵机一动,又生一法:把这个模型变为三个模型,前半段是一个模型(r),后面的h0和h2分别为另两个模型。把数据集按t=0和1分开,分别训练两个模型:r+h0和r+h2。

但是后来搜如何进行模型串联,发现极为麻烦。

3.解决方案

后来在pytorch的官方社区中看到一个极为简单的方法:

(1) 按照一般的多输出模型进行实现,代码如下:

def forward(self, x):        #三层的表示层        x = F.elu(self.fcR1(x))        x = F.elu(self.fcR2(x))        x = F.elu(self.fcR3(x))#two-head,两个head分别进行输出        y0 = F.elu(self.fcH01(x))        y0 = F.elu(self.fcH02(y0))        y0 = F.elu(self.fcH03(y0))        y1 = F.elu(self.fcH11(x))        y1 = F.elu(self.fcH12(y1))        y1 = F.elu(self.fcH13(y1))        return y0, y1

这样就相当实现了一个多输出模型,一个x同时输出y0和y1.

训练的时候分别训练,也即分别建loss,代码如下:

f_out_y0, _ = net(x0)            _, f_out_y1 = net(x1)            #实例化损失函数            criterion0 = Loss()            criterion1 = Loss()            loss0 = criterion0(f_y0, f_out_y0, w0)            loss1 = criterion1(f_y1, f_out_y1, w1)            print(loss0.item(), loss1.item())            #对网络参数进行初始化            optimizer.zero_grad()            loss0.backward()            loss1.backward()            #对网络的参数进行更新            optimizer.step()

先把x按t=0和t=1分为x0和x1,然后分别送入进行训练。这样就实现了一个two-head模型。

4.后记

我自以为多输出模型可以分为以下两类:

多个输出不同时获得,如本文情况。

多个输出同时获得。

多输出不同时获得的解决方法上文已说明。多输出同时获得则可以通过把y0和y1拼接起来一起输出来实现。

补充:PyTorch 多输入多输出模型构建

本篇教程基于 PyTorch 1.5版本

直接上代码!

import torchimport torch.nn as nnfrom torch.autograd import Variableimport torch.distributed as distimport torch.utils.data as data_utilsclass Net(nn.Module):    def __init__(self, n_input, n_hidden, n_output):        super(Net, self).__init__()        self.hidden1 = nn.Linear(n_input, n_hidden)        self.hidden2 = nn.Linear(n_hidden, n_hidden)        self.predict1 = nn.Linear(n_hidden*2, n_output)        self.predict2 = nn.Linear(n_hidden*2, n_output)    def forward(self, input1, input2): # 多输入!!!        out01 = self.hidden1(input1)        out02 = torch.relu(out01)        out03 = self.hidden2(out02)        out04 = torch.sigmoid(out03)        out11 = self.hidden1(input2)        out12 = torch.relu(out11)        out13 = self.hidden2(out12)        out14 = torch.sigmoid(out13)        out = torch.cat((out04, out14), dim=1) # 模型层拼合!!!当然你的模型中可能不需要~         out1 = self.predict1(out)        out2 = self.predict2(out)        return out1, out2 # 多输出!!!net = Net(1, 20, 1)x1 = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1) # 请不要关心这里,随便弄一个数据,为了说明问题而已y1 = x1.pow(3)+0.1*torch.randn(x1.size())x2 = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1)y2 = x2.pow(3)+0.1*torch.randn(x2.size())x1, y1 = (Variable(x1), Variable(y1))x2, y2 = (Variable(x2), Variable(y2))optimizer = torch.optim.SGD(net.parameters(), lr=0.1)loss_func = torch.nn.MSELoss()for t in range(5000):    prediction1, prediction2 = net(x1, x2)    loss1 = loss_func(prediction1, y1)    loss2 = loss_func(prediction2, y2)    loss = loss1 + loss2 # 重点!    optimizer.zero_grad()    loss.backward()    optimizer.step()    if t % 100 == 0:       print('Loss1 = %.4f' % loss1.data,'Loss2 = %.4f' % loss2.data,)

关于“如何使用Pytorch实现two-head模型”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: 如何使用Pytorch实现two-head模型

本文链接: https://www.lsjlt.com/news/278472.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用Pytorch实现two-head模型
    这篇文章将为大家详细讲解有关如何使用Pytorch实现two-head模型,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何使用Pytorch实现two-head(多输出)模型1. two-head模型定...
    99+
    2023-06-15
  • 使用Pytorch实现two-head(多输出)模型的操作
    如何使用Pytorch实现two-head(多输出)模型 1. two-head模型定义 先放一张我要实现的模型结构图: 如上图,就是一个two-head模型,也是一个但输入多输出...
    99+
    2022-11-12
  • pytorch如何实现模型剪枝
    这篇文章主要介绍“pytorch如何实现模型剪枝”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“pytorch如何实现模型剪枝”文章能帮助大家解决问题。一,剪枝分类所谓模型剪枝,其实是一种从神经网络中...
    99+
    2023-07-05
  • 一文详解如何实现PyTorch模型编译
    目录准备加载预训练的 PyTorch 模型​加载测试图像​将计算图导入 Relay​Relay 构建​在 TVM 上执行可移植计算图​查找分类集名称​准备 本篇文章译自英文文档 Co...
    99+
    2023-05-17
    PyTorch 模型编译 PyTorch 模型
  • 如何在Pytorch中实现一个模型迁移功能
    这篇文章给大家介绍如何在Pytorch中实现一个模型迁移功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. 利用resnet18做迁移学习import torchfrom torchvision...
    99+
    2023-06-06
  • Pytorch模型的保存/复用/迁移实现代码
    目录模型的保存与复用模型定义和参数打印模型保存模型推理模型再训练模型迁移参考文献本文整理了Pytorch框架下模型的保存、复用、推理、再训练和迁移等实现。 模型的保存与复用 模型定义...
    99+
    2023-05-19
    Pytorch模型保存迁移 Pytorch模型保存
  • 如何用PyTorch实现sin函数模拟
    这篇文章主要介绍“如何用PyTorch实现sin函数模拟”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何用PyTorch实现sin函数模拟”文章能帮助大家解决问题。一、简介本文旨在使用两种方法来实...
    99+
    2023-06-26
  • 利用Pytorch实现ResNet网络构建及模型训练
    目录构建网络训练模型构建网络 ResNet由一系列堆叠的残差块组成,其主要作用是通过无限制地增加网络深度,从而使其更加强大。在建立ResNet模型之前,让我们先定义4个层,每个层由多...
    99+
    2023-05-17
    Pytorch ResNet构建网络模型训练 Pytorch ResNet
  • Python使用pytorch动手实现LSTM模块
    LSTM 简介: LSTM是RNN中一个较为流行的网络模块。主要包括输入,输入门,输出门,遗忘门,激活函数,全连接层(Cell)和输出。 其结构如下: 上述公式不做解释,我们只要...
    99+
    2022-11-11
  • 如何使用Laravel实现模型关联
    这篇文章主要介绍了如何使用Laravel实现模型关联的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用Laravel实现模型关联文章都会有所收获,下面我们一起来看看吧。一对一一对一关联是目前存在的最基本的关...
    99+
    2023-07-04
  • 详解利用Pytorch实现ResNet网络之评估训练模型
    目录正文评估模型训练 ResNet50 模型正文 每个 batch 前清空梯度,否则会将不同 batch 的梯度累加在一块,导致模型参数错误。 然后我们将输入和目标张量都移动到所需的...
    99+
    2023-05-16
    Pytorch ResNet网络 Pytorch ResNet
  • Python中如何使用PyTorch实现WGAN
    这篇文章给大家分享的是有关Python中如何使用PyTorch实现WGAN的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.GAN简述在GAN中,有两个模型,一个是生成模型,用于生成样本,一个是判别模型,用于判断...
    99+
    2023-06-25
  • 在pytorch中复制模型时出现问题如何解决
    在pytorch中复制模型时出现问题如何解决?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。直接使用model2=model1会出现当更新model2时,model1的权重也...
    99+
    2023-06-06
  • Reactor模型如何实现
    这篇文章主要介绍了Reactor模型如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Reactor模型如何实现文章都会有所收获,下面我们一起来看看吧。一. Reactor设计模式Reactor翻译过来的意...
    99+
    2023-07-05
  • 使用Pytorch构建第一个神经网络模型 附案例实战
    目录一、Pytorch简介 二、实验过程2.1数据集介绍2.2加载数据2.3数据预处理 2.3.1特征转换2.3.2缺失值处理 2.3.3样本不平衡处理...
    99+
    2023-03-15
    Pytorch构建神经网络模型 Pytorch神经网络
  • 详解使用PytorchGeometric实现GraphSAGE模型
    目录正文图构建Sampler方法GraphSAGE模型定义模型训练与测试总结正文 GraphSAGE是一种用于图神经网络中的节点嵌入学习方法。它通过聚合节点邻居的信息来生成节点的低维...
    99+
    2023-05-17
    Pytorch Geometric GraphSAGE Pytorch Geometric GraphSAGE模型实现
  • 如何使用Python实现一个简易的ORM模型
    目录元类描述器本文记录下自己使用Python实现一个简易的ORM模型 使用到的知识 元类 描述器 元类 对于元类,我的理解其实也便较浅,大概是这个意思 所有的类都是使用元类来进行创建的,而所有的类的父类中必然是obj...
    99+
    2022-06-02
    python ORM python 实现ORM模型
  • java如何实现原型模式
    这篇文章主要介绍了java如何实现原型模式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。定义:      &nbs...
    99+
    2023-05-30
    java
  • Unity如何实现坦克模型
    这篇文章主要介绍“Unity如何实现坦克模型”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Unity如何实现坦克模型”文章能帮助大家解决问题。用立方体和圆柱体搭建完坦克的外观,接下来我们主要实现炮筒...
    99+
    2023-06-26
  • 使用Pytorch怎么实现半精度浮点型网络训练
    今天就跟大家聊聊有关使用Pytorch怎么实现半精度浮点型网络训练,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。用Pytorch2.0进行半精度浮点型网络训练需要注意下问题:网络要在...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作