精华内容
下载资源
问答
  • pytorch MSELoss计算平均的方法

    千次阅读 2019-07-16 13:46:40
    若设定loss_fn = torch.nn.MSELoss(reduction='mean'),最终的输出值其实是(y - pred)每个元素数字的平方之和除以(bxc),也就是在batch和特征维度上都取了平均。 如果只想在batch上做平均,可以这样写: loss...

    给定损失函数的输入y,pred,shape均为bxc。

    若设定loss_fn = torch.nn.MSELoss(reduction='mean'),最终的输出值其实是(y - pred)每个元素数字的平方之和除以(bxc),也就是在batch和特征维度上都取了平均。

    如果只想在batch上做平均,可以这样写:

    loss_fn = torch.nn.MSELoss(reduction='sum')
    loss = loss_fn(pred, y) / pred.size(0)

     

    展开全文
  • python 计算Loss曲线的移动平均

    千次阅读 2018-09-22 22:02:54
    前言:  在深度学习训练的过程中经常需要看loss的曲线,如果loss被存成npy文件了,如何去查看,查看之后如何利用代码实现在TensorBoard里面的将曲线变平缓的功能。...然后计算y的移动平均,里面有用...

    前言:

             在深度学习训练的过程中经常需要看loss的曲线,如果loss被存成npy文件了,如何去查看,查看之后如何利用代码实现在TensorBoard里面的将曲线变平缓的功能。

    用下面的一行代码读取loss.npy文件

    y = np.load(r"G:\Competition\AI challenge\Vnet\loss (1).npy")

    然后计算y的移动平均,里面有用到np.convolve函数,这个是卷积的意思,一维卷积,接下来看看怎么实现:

    def movingaverage(interval, window_size):
        window= numpy.ones(int(window_size))/float(window_size)
        return numpy.convolve(interval, window, 'same')

    如果你了解一维信号的卷积你就可以知道这段代码实现的意思

    假设interval=[a,b,c],window_size=3,那么函数里面的window=[1/3,1/3,1/3]

    那么这段代码返回的结果就是:

    [a/3 b/3 c/3]
         +    +
         a/3 b/3 c/3
              +   +
             a/3 b/3 c/3]
    
    a/3  (a+b)/3  (a+b+c)/3  (c+b)/3 c/3

    整段代码如下:

    from pylab import plot, ylim, xlim, show, xlabel, ylabel, grid
    from numpy import linspace, loadtxt, ones, convolve
    import numpy as numpy
    import matplotlib.pyplot as pt
    
    
    
    def movingaverage(interval, window_size):
        window= numpy.ones(int(window_size))/float(window_size)
        return numpy.convolve(interval, window, 'same')
    
    y = np.load(r"G:\Competition\AI challenge\Vnet\loss (1).npy")
    
    x = np.array(range(len(y)))
    plot(x,y,"k.")
    y_av = movingaverage(y, 500)#window_size可调
    
    #pt.figure(figsize=(10,5))
    plot(x, y_av,"r")
    xlim(0,len(y))
    xlabel("iteration.")
    ylabel("Loss.")
    grid(True)
    pt.savefig(r'G:\Competition\AI challenge\Vnet\loss2.png',dip=500)
    show()
    

    结果:

    滑动之前:

    滑动之后:

    或者这样(推荐):

    import numpy as np
    import matplotlib.pyplot as plt
    def smooth_curve(points, factor=0.9):
        smoothed_points = []
        for point in points:
            if smoothed_points:
                previous = smoothed_points[-1]
                smoothed_points.append(previous * factor + point * (1 - factor))
            else:
                smoothed_points.append(point)
        return smoothed_points
    #acc=np.random.randn(100)
    acc=[23,24,25,1,27,26,26,25,23,24,25,26,27,27,28,23,24,25,26]
    plt.figure(figsize=(10,1))
    plt.grid(True)
    
    plt.plot(range(len(acc)),acc, 'b', label='Smoothed training acc',color='r')
    plt.plot(range(len(acc)),smooth_curve(acc), 'b', label='Smoothed training acc')
    

    展开全文
  • 1. torch.nn.MSELoss torch.nn.MSELoss 类使用均方误差函数对损失值进行计算,在定义类的对象时不用传入任何参数,但在使 用实例时需要输入两个维度一样的参数方可进行计算。示例如下: import torch as t loss_f =...

    1. torch.nn.MSELoss

    torch.nn.MSELoss 类使用均方误差函数对损失值进行计算,在定义类的对象时不用传入任何参数,但在使
    用实例时需要输入两个维度一样的参数方可进行计算。示例如下:

    import torch as t
    
    loss_f = t.nn.MSELoss()
    
    x = t.randn(100, 100)
    y = t.randn(100, 100)
    loss = loss_f(x, y)
    
    print(loss)
    

    以上代码首先通过随机方式生成了两个维度都是(100,100)的参数,然后使用均方误差函数来计算两组参数的损失值,打印输出的结果如下:

    tensor(2.0091)
    

    2. torch.nn.L1Loss

    torch.nn.L1Loss 类使用平均绝对误差函数对损失值进行计算,同样,在定义类的对象时不用传入任何参
    数,但在使用实例时需要输入两个维度一样的参数进行计算。示例如下:

    import torch as t
    
    loss_f = t.nn.L1Loss()
    
    x = t.randn(100, 100)
    y = t.randn(100, 100)
    loss = loss_f(x, y)
    
    print(loss)
    

    以上代码也是通过随机方式生成了两个维度都是(100,100)的参数,然后使用平均绝对误差函数来计算两组参数的损失值,打印输出的结果如下:

    tensor(1.1419)
    

    3. torch.nn.CrossEntropyLoss

    torch.nn.CrossEntropyLoss 类用于计算交叉熵,在定义类的对象时不用传入任何参数,在使用实例时需要输入两个满足交叉熵的计算条件的参数,代码如下:

    import torch as t
    
    loss_f = t.nn.CrossEntropyLoss()
    
    x = t.randn(3, 5)
    y = t.LongTensor(3).random_(5)
    print("y is {}".format(y))
    loss = loss_f(x, y)
    
    print(loss)
    

    这里生成的第 1 组参数是一个随机参数,维度为(3,5);第2组参数是 3 个范围为 0~4 的随机数字。计算这两组参数的损失值,打印输出的结果如下:

    y is tensor([1, 3, 3])
    tensor(2.3652)
    

    4. 综合示例

    在学会使用 PyTorch 中的优化函数之后,我们就可以对自己建立的神经网络模型进行训练并对参数进行优化了,代码如下:

    import torch as t
    
    batch_n = 100
    input_data = 10000
    hidden_layer = 100
    output_data = 10
    
    epoch_n = 10000
    learning_rate = 1e-4
    
    x = t.randn(batch_n, input_data, requires_grad=False)
    y = t.randn(batch_n, output_data, requires_grad=False)
    
    loss_f = t.nn.MSELoss()
    
    models = t.nn.Sequential(
        t.nn.Linear(input_data, hidden_layer),
        t.nn.ReLU(),
        t.nn.Linear(hidden_layer, output_data)
        )
    
    for epoch in range(epoch_n):
        y_pred = models(x)
        loss = loss_f(y_pred, y)
        if epoch % 1000 == 0:
            print("epoch is {}, loss is {:.4f}".format(epoch, loss))
        
        models.zero_grad()
        loss.backward()
        
        for param in models.parameters():
            param.data -= param.grad.data * learning_rate
    

    以上代码中的绝大部分和之前训练和优化部分的代码是一样的,但是参数梯度更新的方式发生了改变。因为使用了不同的模型搭建方法,所以访问模型中的全部参数是通过对 models.parameters() 进行遍历完成的,然后才对每个遍历的参数进行梯度更新。其打印输入结果的方式是每完成 1000 次训练,就打印输出当前的 loss 值,最后输出的结果如下:

    epoch is 0, loss is 1.0605
    epoch is 1000, loss is 0.6227
    epoch is 2000, loss is 0.4338
    epoch is 3000, loss is 0.3203
    epoch is 4000, loss is 0.2420
    epoch is 5000, loss is 0.1849
    epoch is 6000, loss is 0.1421
    epoch is 7000, loss is 0.1098
    epoch is 8000, loss is 0.0855
    epoch is 9000, loss is 0.0671
    

    从该结果可以看出,参数的优化效果比较理想,loss 值被控制在相对较小的范围之内,这和我们增加了训练次数有很大关系。

    展开全文
  • cnn网络中,网络更新一次参数是根据loss反向传播来,这个loss是一个batch_size的图像前向传播得到的loss和除以batch_size大小得到的平均loss。 softmax_loss前向传播中有这样一段代码: loss/get_normalizer...

    cnn网络中,网络更新一次参数是根据loss反向传播来,这个loss是一个batch_size的图像前向传播得到的loss和除以batch_size大小得到的平均loss。

    softmax_loss前向传播中有这样一段代码:    loss/get_normalizer(normalization_,valid_count),这就是对loss进行归一化。

    如果我有ignore_label,valid_cout就不为-1,没有就为-1。我的prototxt里面是没有的,所以最后我使用的normalizer是outer_num_ * inner_num_的形式。

    实际上就是如果有ignore_label就归一化的所有的valid的,如果没有就是归一化batch×w×h

    get_normalizer的定义在hpp中,实现在cpp文件中。

    normalization_mode传入的是normalization_,normalization_的定义在hpp,赋值实现在cpp的layer_setup里,如下图。观察我的softmax_loss没有添加loss_param,所以就是默认的valid模式。

    normalization_的赋值来自于layer的loss参数,如下图所示。这里有normalization和normalize两个参数,默认的normalization是valid类型,normalize是bool型无默认值。从上面一个图和下一个图的解释可以看出,没有normalization的情况,normalize为true就是valid,为false就是batch_size,其他情况都是由normalization来决定。也就是说normalize既可以不存在,也可以存在为true,存在为false。

     

     

     

    注意结合.h、.cpp、.cu一起看代码

    转载于:https://www.cnblogs.com/ymjyqsx/p/8488251.html

    展开全文
  • Pytorch详解BCELoss和BCEWithLogitsLoss

    万次阅读 多人点赞 2018-12-23 13:34:27
    BCELoss 在图片多标签分类时,如果3张图片分3类,会输出一个3*3的矩阵。 先用Sigmoid给这些值都搞到0~1之间: 假设Target是: BCELoss是−1n∑(yn×ln⁡xn+(1−yn)×ln⁡(1−xn))-\frac 1 n\sum(y_n \...
  • 不同于cross entry loss或者MSE等等,他们的目标去表征模型的输出与实际的输出差距是多少。但是ranking loss实际上是一种metric learning,他们学习的相对距离,而不在乎实际的值。由于在不同场景有不同的名字,包括 ...
  • 对于MSE Loss,如果相同的样本存在不同的label值(比如同一句话在不同场景下满意度可能是不同的),当预测值取这些样本label的平均值时,loss最小。这可以通过对loss对导数得到。 对于MAE Loss,这是统计学中的...
  • L1 loss & L2 loss & Smooth L1 loss 微信公众号:幼儿园的学霸 个人的学习笔记,关于OpenCV,关于机器学习, …。问题或建议,请公众号留言; 关于神经网络中L1 loss & L2 loss & Smooth L1 loss...
  • 常用loss: L1: 公式:L1=∑i=1n∣yi−f(xi)∣L1=\sum_{i=1}^{n}\left|y_{i}-f\left(x_{i}\right)\right|L1=i=1∑n​∣yi​−f(xi​)∣ 导数:dL1(x)dx={1 if x≥0−1 otherwise \frac{\...
  • Circle loss

    2021-01-30 22:24:00
    它的改进点在于,原本triplet loss对于正负样本采用平均用力的方式进行优化。使得在模型收敛的时候,对于正负样本的区分力度不够。Circle loss 在正负样本对加入了一个权重,控制正负样本对各自的梯度贡献,最后就...
  • 交叉熵损失函数最后得到的是所有位置的平均loss,如果我们想要知道每个位置的loss多少,可以分开计算,如下例子所示: import torch fn = torch.nn.CrossEntropyLoss() logits = torch.tensor([[0.7595, 0.3526, 0....
  • loss weight

    2017-04-07 11:41:38
    Loss(损失) 与绝大多数的机器学习引擎一样,Caffe是由一个loss function(损失函数)驱动的。loss function也称为 error function,cost function或者objective function。loss function利用模型中的参数...
  • Range Loss

    千次阅读 2019-05-06 16:40:20
    《Range Loss for Deep Face Recognition with Long-tail》 2016,Xiao Zhang et al. Range Loss 参考代码:https://github.com/Charrin/RangeLoss-Caffe 引言: 作者首先提出了现在数据库中普遍存在的问题,...
  • Triplet Loss 和 Center Loss详解和pytorch实现

    万次阅读 多人点赞 2019-08-01 16:44:41
    最近在学习ReID相关的算法,为了提高ReID的性能通常会采用softmax loss 联合 Triplet Loss和Center Loss来提高算法的性能。 本文对Triplet Loss和Cnetr Loss做一个总结,以简洁的方式帮助理解。 Triplet Loss和...
  • 深度学习基础loss和目标检测loss总结

    千次阅读 2020-09-06 13:13:03
    Loss总结: nn.L1Loss loss_fn = torch.nn.L1Loss(reduce=False, size_average=False)
  • Hinge loss

    万次阅读 多人点赞 2017-10-25 22:33:43
      在机器学习中,hinge loss作为一个损失函数(loss function),通常被用于最大间隔算法(maximum-margin),而最大间隔算法又是SVM(支持向量机support vector machines)用到的重要算法(注意:SVM的学习算法有两种...
  • pytorch mseloss bceloss 对比

    千次阅读 2018-11-05 17:35:00
    1) 两个分布很接近,但是与0和1不接近,loss仍然很大,只适合分类 2)mse只计算两个差异,做回归用的,数据相同,bceloss比mseloss大。 3)SmoothL1Loss比mseloss小 4) bceloss收敛比较快 5)bceloss input必须是0-...
  • Hinge Loss

    2020-09-01 23:25:23
      在机器学习中,hinge loss作为一个损失函数(loss function),通常被用于最大间隔算法(maximum-margin),而最大间隔算法又是SVM(支持向量机support vector machines)用到的重要算法(注意:SVM的学习算法有两种...
  • Center Loss

    千次阅读 2019-04-29 15:56:31
    Center Loss 前言 在深度学习里,深度学习网络通常被看作是特征提取器(从第1层网络层到最后一层隐藏层),提取出来的特征x随后经过线性变换(WTxW^T xWTx)得到类别分数,通过softmax层计算损失。通常,我们没有对...
  • Keras自定义Loss函数

    万次阅读 多人点赞 2018-01-13 12:00:09
    Keras本身提供了很多常用的loss函数(即目标函数),但这些损失函数都是比较基本的、通用的。有时候我们需要根据自己所做的任务来自定义损失函数,虽然Keras是一个很高级的封装,自定义loss还是比较简单的。这里记录...
  • L1 loss 和 L2 loss 比较

    万次阅读 2018-07-10 00:30:06
    1、L1 loss 在零点不平滑,用的较少  2、Smooth L1 Loss 修改零点不平滑问题  3、L2 loss:对离群点比较敏感,如果feature 是 unbounded的话,... L2正则会让特征的权重不过大,使得特征的权重比较平均。 5、...
  • Caffe loss 精讲

    2019-03-20 13:18:06
    每一次训练迭代,都会向前传播,产生loss值。 Loss部分在solver文件中,有两个参数: 1. average_loss 默认值是1,Loss为单个iteration对应的loss; 当设置average_loss = n , 则Loss为n个Loss的均值,相当于做...
  • LOSS】语义分割的各种loss详解与实现

    万次阅读 多人点赞 2018-11-30 11:48:17
    在参加Kaggle的比赛中,有时遇到的分割任务是那种背景所占比例很大,但是物体所占比例很小的那种严重不平衡的数据集,这时需要谨慎的挑选loss函数。 Loss: 1.Log loss log loss其实就是TensorFlow中的 tf.losses...
  • 总结对比下\(L_1\) 损失函数,\(L_2\) 损失函数以及\(\...均方误差(Mean Square Error,MSE)是模型预测值\(f(x)\) 与真实样本值\(y\) 之间差值平方的平均值,其公式如下\[ MSE = \frac{\sum_{i=1}^n(f_{x_i} - y_i...
  • 文章目录nn.L1Lossnn.SmoothL1Lossnn.MSELossnn.CrossEntropyLossnn....L1Loss 计算方法比较简单,原理就是取预测值和真实值的绝对误差的平均数。计算公式如下 nn.SmoothL1Loss nn.SmoothL1Loss:计算分俩方面,当误
  • 本文主要包括: pytorch 实现的损失函数 pytorch实现的loss function 神经网络主要实现分类以及回归预测两类问题,对于回归问题,主要...所有的loss的基类是Module,所以使用loss的方法是: # 1. 创建损失函数...
  • python实现汉明损失(hamming_loss)、0-1 损失(zero_one_loss)、覆盖误差(coverage_error)、排名损失(label_ranking)以及平均精度损失 # -*- coding: utf-8 -*- """ Created on Thu Jul 18 15:26:34 2019 @...
  • 损失函数,是编译一个神经网络模型必须的两个参数之一,另一个是优化器。损失函数是指用于计算标签值和预测值之间差异的...L1Loss 计算方法比较简单,原理就是取预测值和真实值的绝对误差的平均数。计算公式如下 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,082
精华内容 20,032
关键字:

平均loss