pytorch自定义loss,如何进行后向传播loss.backward()?

之前loss用自带的MSE,这样写的

criterion = nn.MSELoss(size_average=False).cuda()
...
loss = criterion(output, target)
loss.backward()

这样是没有问题的


现在需要用自定义loss函数newLoss,因为要逐个像素进行loss运算(算法需要)

#this is in model.py
class newLoss(nn.Module):
    def __init__(self):
        super(newLoss, self).__init__()
    def forward(self, output, gt):
        loss = 0
        for row_out, row_gt :
            for pixel_out, pixel_gt :
                loss += something pixelwise
        return loss
# this is in train.py
newloss = newLoss()
loss = newloss(output,gt)

这样计算出来的loss是float类型的,下面的代码会报
''AttributeError: 'float' object has no attribute 'backward''
的错


我现在的做法是:把newloss数值加到原来的MSE类型loss上:

criterion = nn.MSELoss(size_average=False).cuda()
...
loss = criterion(output, target)
newloss= newLoss()
loss += newloss(output,gt)
loss.backward()

这样写我新加的newloss在后向传播时能生效吗?

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Pytorch如何自定义Loss
Pytorch如何自定义Loss 原文:https://blog.csdn.net/yutingzhaomeng/article/details/80454545 将Loss视作单独的层,在forward函数里写明loss的计算方式,无需定义backward   class MyLoss(nn.Module): def __init__(self): super...
pytorch: 自定义损失函数Loss
pytorch: 自定义损失函数Loss pytorch中自带了一些常用的损失函数,它们都是torch.nn.Module的子类。因此自定义Loss函数也需要继承该类。 在__init__函数中定义所需要的超参数,在forward函数中定义loss的计算方法。forward方法就是实际定义损失函数的地方,其返回值是一个标量(Scalar),而不是张量(Tensor)和向量(Vector)。也就...
【DeepLearning】PyTorch 如何自定义损失函数(Loss Function)?
转自:https://www.zhihu.com/question/66988664 文章目录1. 直接利用torch.Tensor提供的接口2. 利用PyTorch的numpy/scipy扩展3. 写一个PyTorch的C扩展 1. 直接利用torch.Tensor提供的接口 因为只是需要自定义loss,而loss可以看做对一个或多个Tensor的混合计算,比如计算一个三元组的Loss(Tr...
PyTorch学习系列(五)——自定义loss
在PyTorch中可以自定义loss,并且只要输入到输出的过程中一直使用的都是Variable(没有用tensor或者numpy),那么loss可以自动求梯度。
Pytorch自定义网络结构+自定义数据加载+自定义Loss 全过程代码示例
1、限定使用GPU的序号 import os os.environ['CUDA_VISIBLE_DEVICES'] = '3' os.system('echo $CUDA_VISIBLE_DEVICES') 2、导入相关头文件 import torch import torch.nn as nn import torch.nn.functional as F import torch.utils...
Pytorch自带Loss总结
Loss总结 L1Loss mean absolute error 默认reduction参数为mean,是对所有的元素进行平均。 MSELoss 默认reduction参数为mean。除了使用MSE计算loss,其他的与L1Loss一样。 NLLLoss negative log likelihood loss,用于多分类问题 在计算时,对于每个batch的 ln,只使用x...
pytorch loss函数 损失函数
1toch.nn.L1Loss,绝对值误差 2.toch.nn.MSELoss,均方误差 3 toch.nn.BCELoss,多标签loss,需要先家sogmoid 4 toch.nn.CrossEntropyLoss
pytorch loss函数的选择
https://blog.csdn.net/lyy14011305/article/details/88664518
pytorch loss总结与测试
pytorch loss 参考文献: https://blog.csdn.net/zhangxb35/article/details/72464152?utm_source=itdadao&utm_medium=referral loss 测试 import torch from torch.autograd import Variable ''' 参考文献: https://blog....
pytorch实现seq2seq时如何对loss进行mask
如何对loss进行mask pytorch官方教程中有一个Chatbot教程,就是利用seq2seq和注意力机制实现的,感觉和机器翻译没什么不同啊,如果对话中一句话有下一句,那么就把这一对句子加入模型进行训练。其中在训练阶段,损失函数通常需要进行mask操作,因为一个batch中句子的长度通常是不一样的,一个batch中不足长度的位置需要进行填充(pad)补0,最后生成句子计算loss时需要忽略那...
Pytorch自定义网络结构+读取自己数据+自定义Loss 全过程代码示例
1、限定使用GPU的序号import os os.environ['CUDA_VISIBLE_DEVICES'] = '3' os.system('echo $CUDA_VISIBLE_DEVICES')2、导入相关头文件import torch import torch.nn as nn import torch.nn.functional as F import torch.utils.dat...
pytorch学习笔记 | Focal loss的原理与pytorch实现
Focal 原理简述 Focal loss是一个针对单阶段物体检测正负样本不均衡而提出来的损失函数,论文地址来自arxiv 先放focal loss(FL)和cross entropy(CE)两个函数的数学定义。 可以看到focal loss的设计很简单明了,就是在标准交叉熵损失函数的 focal loss 称为焦点损失函数,通过改进标准的二元交叉熵损失函数来控制对正负样本的训练,为了解决在on...
pytorch产生loss的计算图
import torch.nn as nn import torch.nn.functional as F class Net(nn.Module):     def __init__(self):         super(Net,self).__init__()         self.conv1=nn.Conv2d(1,6,5)         self.conv2=nn.Conv2d...
PyTorch学习笔记(4)——自定义Loss Function(自动打印每次的梯度)
在stackoverflow上看到一个名叫Ismail_Elezi的老铁问了个自定义Loss Function的问题,它的问题在于:1)反向传播报错 2)矩阵算法使用不行 3)算法数值稳定性不行。 我决定在这个例子的基础上(它应该不是torch 0.4.0的新版本,因为看他的变量还是用Variable格式),对自定义的Loss Function进行说明基于新版本(torch 0.4.0)是如...
Keras自定义Loss函数
前言 Keras本身提供了很多常用的loss函数(即目标函数),但这些损失函数都是比较基本的、通用的。有时候我们需要根据自己所做的任务来自定义损失函数,虽然Keras是一个很高级的封装,自定义loss还是比较简单的。这里记录一下自定义loss的方法,一为助记、二为助人。 官方定义的损失函数 第一种方式:自定义一个函数 自定义loss函数之前,我们可以看看Keras官方是如何定义loss
keras 自定义损失函数loss
现在深度学习逐渐应用到各行各业,针对各个行业的具体不同问题,需要设计较为合理的损失函数。 MSE 之前接触的最多的应该是最小二乘优化方法,最小二乘损失函数为 平均均方误差MSE(Mean Squared Error), keres中MSE损失为: from keras import backend as K def mean_squared_error(y_true, y_pred): ...
pytorch如何自定义自己的MyDatasets
PyTorch提供了一个工具函数torch.utils.data.DataLoader。所有其他数据集都应该进行子类化。所有子类应该override__len__和__getitem__,前者提供了数据集的大小,后者支持整数索引,范围从0到len(self)。 class torch.utils.data.TensorDataset(data_tensor, target_tensor) 包装
语义分割常用loss介绍及pytorch实现
这里介绍语义分割常用的loss函数,附上pytorch实现代码。 Log loss 交叉熵,二分类交叉熵的公式如下: pytorch代码实现: #二值交叉熵,这里输入要经过sigmoid处理 import torch import torch.nn as nn import torch.nn.functional as F nn.BCELoss(F.sigmoid(input), target)...
PyTorch绘制训练过程的accuracy和loss曲线
PyTorch、Caffe绘制训练过程的accuracy和loss曲线 衡量模型的好坏其实最重要的看的就是准确率与损失率,所以将其进行可视化是一个非常重要的一步。这样就可以直观明了的看出模型训练过程中准确率以及损失率的变化。 因为博主一直是在caffe和pytorch进行深度学习研究的,之前查了相关资料发现caffe有相关的绘制方法,但是pytorch并没有找到,所以在这里进行总结。 Caf...
Focal Loss 分类问题 pytorch实现代码(简单实现)
ps:由于降阳性这步正负样本数量在差距巨大.正样本1500多个,而负样本750000多个.要用Focal Loss来解决这个问题. 首先感谢Code_Mart的博客把理论汇总了下https://blog.csdn.net/Code_Mart/article/details/89736187.并实现了Focal Loss的二分类和多分类的代码并讲解.同时他与xwmwanjy666的讨论更讲清楚了...
Pytorch中常用Loss函数总结
Pytorch中常用Loss函数总结 - **torch.nn.MSELoss():常用于回归模型** - **torch.nn.CrossEntropyLoss():常用于分类模型** 一、MSE(均方差) MSE loss = 1/n(x-y)*** loss_func2 = torch.nn.MSELoss() target = torch.tensor([[112.2396, ...
pytorch训练过程中loss出现很大的值
在训练过程中,loss的值非常大,可能是: (1)没有除以归一化的因子(GAN中需要除以256*256*3),或者没有取平均值 (2)learning rate太大,导致更新之后的权值参数特别大,从而下一次计算prediction的时候数值很大,最终计算loss的时候prediction 和 ground truth 之间的差值特别大。 ...
pytorch实现focal loss的两种方式
import torch import torch.nn.functional as F import numpy as np from torch.autograd import Variable ''' pytorch实现focal loss的两种方式(现在讨论的是基于分割任务) 在计算损失函数的过程中考虑到类别不平衡的问题,假设加上背景类别共有6个类别 ''' def compute_cl...
pytorch取出loss function的值,纯数值
显然如果你已经定义好了 LossFunction=torch.nn.SoftMarginLoss() loss=LossFunction(prediction,self.Y) 那么你确实可以用 print(loss)来看到这个值,但是很坑爹,只能用这种形式。 这什么鬼啊,我要纯数值! 之前有过一次这个疑问,而且解决了,当时心想我靠这么简单的问题下一次我就记住了。 嗯,真香。 ...
pytorch的坑---loss没写好,现存爆炸
作者:陈诚 链接:https://www.zhihu.com/question/67209417/answer/344752405 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 算是动态图的一个坑吧。记录loss信息的时候直接使用了输出的Variable。 应该不止我经历过这个吧... 久久不用又会不小心掉到这个坑里去... for d
神经网络后向传播
http://blog.csdn.net/yunpiao123456/article/details/52526907    神经网络的后向传播
caffe添加自定义loss层
caffe添加自定义loss层 复现MTCNN,需要修改loss层,基于EuclideanLoss,: 修改forward部分,实现分类别训练(ground truth为-1时,loss为0) 修改backward部分,实现在线难例挖掘(还没做,以后补) 参考Github上的代码,他实现了gpu版本,我在此实现cpu版本 用VS打开工程 caffe-windows/scripts/...
Caffe添加自定义层-自定义loss
Caffe添加自定义层-如何自定义loss层
Keras之自定义损失(loss)函数
在Keras中可以自定义损失函数,在自定义损失函数的过程中需要注意的一点是,损失函数的参数形式,这一点在Keras中是固定的,须如下形式: def my_loss(y_true, y_pred): # y_true: True labels. TensorFlow/Theano tensor # y_pred: Predictions. TensorFlow/Theano tensor of...
Pytorch 自定义数据集
在Pytorch中定义数据集主要涉及到两个主要的类:Dataset、DataLoader。 Dataset类 Dataset类是Pytorch中所有数据集加载类中应该继承的父类。其中父类中的两个私有成员函数__len__、__getitem__必须被重载,否则将会触发错误提示: 其中__len__应该返回数据集的大小,而__getitem__实现可以通过索引来返回图像数据的功能。 我们...
pytorch: 自定义数据集加载
很多网络在数据加载方式 pytorch 的输入流水线的操作顺序是这样的: 创建一个 Dataset 对象 创建一个 DataLoader 对象 不停的 循环 这个 DataLoader 对象 自己感觉:dataset只是负责一张图片以及它的label标签,dataloader负责调用dataset,使得输出batch_size的图片和他们的标签。 dataset ...
Pytorch 学习笔记之自定义 Module
转自:https://www.qcloud.com/community/article/831497 pytorch 是一个基于 python 的深度学习库。pytorch 源码库的抽象层次少,结构清晰,代码量适中。相比于非常工程化的 tensorflow,pytorch 是一个更易入手的,非常棒的深度学习框架。 对于系统学习 pytorch,官方提供了非常好的入门教程 ,同时还提供了
pytorch自定义初始化权重
在常见的pytorch代码中,我们见到的初始化方式都是调用init类对每层所有参数进行初始化。但是,有时我们有些特殊需求,比如用某一层的权重取优化其它层,或者手动指定某些权重的初始值。 核心思想就是构造和该层权重同一尺寸的矩阵去对该层权重赋值。但是,值得注意的是,pytorch中各层权重的数据类型是nn.Parameter,而不是Tensor或者Variable。 import torch ...
PyTorch 入门:自定义数据加载
之前学习tensorflow时也学习了它的数据加载,不过在网上看了很多教程后还是有很多小问题,不知道为什么在别人电脑上可以运行但是我的就不行(把我头搞晕了),很烦,这时想起之前听导师说PyTorch容易入门上手,所以果断去学了PyTorch,写这篇博文的目的就是总结学到的,然后记录下来,也希望以后学到新的知识或技术能够用写博客的方式记录下来,这样有助于形成比较好的知识体系,也方便以后温故知新。 ...
Pytorch自定义参数
Pytorch自定义参数 如果想要灵活地使用模型,可能需要自定义参数,比如 class Net(nn.Module): def __init__(self): super(Net,self).__init__() self.A = torch.randn((2,3),requires_grad=True) self.B = nn.Linear...
pytorch自定义数据集DataLoder
pytorch官方例程: DATA LOADING AND PROCESSING TUTORIAL torch.utils.data.Dataset 是dataset的抽象类,我们可以同过继承Dataset来定义自己的dataset,然后重写类里的两个方法: len 返回数据集的长度 getitem 根据索引对数据集采样 class FaceLandmarksDataset(Dataset):...
【pytorch】如何在pytorch自定义优化函数?
pytorch 可以说是最简单易学的深度学习库了,为了加快神经网络的学习效率我们通常会使用一些加速技巧,但很多人都是使用的torch.optim自带的优化器,本文就将介绍如何自定义一个优化器并比较其与主流算法的加速效果 1.准备工作 首先下载minst数据库作为测试数据集合minst 我们需要train-images.idx3-ubyte和train-labels.idx1-ub...
PyTorch自定义网络层
PyTorch自定义网络层扩展 torch.autograd扩展torch.nn增加一个ModuleFormula与Module异同: 这篇博客关于如何通过自定义function和module来扩展torch.nn和torch.autograd,module对应于网络中的层。对于浅层网络,我们可以手写前向传播和后向传播过程。但是在深度学习中,网络结构很复杂,前向和后向也很复杂,手写就变得很困难。幸...
Pytorch数据集自定义读取
以读取VOC2012语义分割数据集为例,具体见代码注释: from PIL import Image import torch import torch.utils.data as data import os import numpy as np import torchvision import torchvision.transforms as transforms import matp...
pytorch自定义数据读取
pytorch的数据读取主要跟三个类有关: 1. Dataset 2. DataLoader 3. DataLoaderIter 定义自己的Dataset类 定义自己的Dataset类(继承torch.utils.data.Dataset)并实现两个成员方法 1. __getitem__() 2. __len__() class MyDataset(data.Dataset...