美文网首页
Pytorch的一些用法

Pytorch的一些用法

作者: 可能性之兽 | 来源:发表于2022-09-11 12:39 被阅读0次

    Pytorch:model.train()和model.eval()用法和区别,以及model.eval()和torch.no_grad()的区别 - 知乎 (zhihu.com)

    1. model.train()和model.eval()用法和区别
      1.1 model.train()
      model.train()的作用是启用 Batch Normalization 和 Dropout。

    如果模型中有BN层(Batch Normalization)和Dropout,需要在训练时添加model.train()。model.train()是保证BN层能够用到每一批数据的均值和方差。对于Dropout,model.train()是随机取一部分网络连接来训练更新参数。

    1.2 model.eval()
    model.eval()的作用是不启用 Batch Normalization 和 Dropout。

    如果模型中有BN层(Batch Normalization)和Dropout,在测试时添加model.eval()。model.eval()是保证BN层能够用全部训练数据的均值和方差,即测试过程中要保证BN层的均值和方差不变。对于Dropout,model.eval()是利用到了所有网络连接,即不进行随机舍弃神经元。

    训练完train样本后,生成的模型model要用来测试样本。在model(test)之前,需要加上model.eval(),否则的话,有输入数据,即使不训练,它也会改变权值。这是model中含有BN层和Dropout所带来的的性质。

    在做one classification的时候,训练集和测试集的样本分布是不一样的,尤其需要注意这一点。

    Python高阶语法分析 - 知乎 (zhihu.com)
    Python中的self详细解析 - 初识CV的文章 - 知乎
    https://zhuanlan.zhihu.com/p/356325860

    
    
    
    
    我们总会在class里面看见self,但是感觉他好像也没什么用处,就是放在那里占个位子。如果你也有同样的疑问,那么恭喜你,你的class没学明白。所以,在解释self是谁之前,我们先明确几个问题:什么是class,什么是instance,什么是object?什么是method,什么是function?1.1 什么是class,什么是instance,什么是object?Class: 可以理解为一个组装工厂。假如我们要生产一个机器人,那我们先要搭个工厂吧。先确定:我们要先安装胳膊,再安装头,我们的小破机器人的流水线就搭好了。这个工厂比较智能,胳膊和头的数量都可以调。class BuildRobot():
        def __init__(self,armcount,headcount):
            self.armcount = armcount
            self.headcount = headcount所以这里的class,就是搭了一个工厂叫BuildRobot。'__init__' 就是告诉这个流水线,首先你需要这个机器人有几个胳膊(‘armcount’),有几个脑袋(‘headcount’)。先忽略一下这里的self,以后讲。这个时候你可以run一下,这样你的class就搭好了。可是这时的工厂,因为你没有开始生产,是没有任何产出的。下面就是instance:instance:可以理解为启动一次工厂生产出的机器人。现在我们用之前搭的工厂生产一个正常一点的机器人,两个胳膊一个脑袋:
    

    一文详解Softmax函数 - 知乎 (zhihu.com)

    有没有将各个输出节点的输出值范围映射到[0, 1],并且约束各个输出节点的输出值的和为1的函数呢?

    当然,这个函数就是Softmax函数。

    Softmax从字面上来说,可以分成soft和max两个部分。max故名思议就是最大值的意思。Softmax的核心在于soft,而soft有软的含义,与之相对的是hard硬。很多场景中需要我们找出数组所有元素中值最大的元素,实质上都是求的hardmax。下面使用Numpy模块以及TensorFlow深度学习框架实现hardmax。

    image.png

    这样就将上面的Softmax一步一步转换成了Softmax的损失函数。
    但是通常我们说起交叉熵往往是下面的式子:

    那上面这种形式的损失函数和上面通过Softmax函数一步一步转换推导成的损失函数有什么区别呢?

    为了方便将第一个 命名为式子1,将通常的交叉熵损失函 数命名为式子2。其实式子1和式子2本质上是一样的。对于式子1来说,只针对正确类别的对应的输出节点,将这个位置的Softmax值最大化,而式子2则是直接衡量真实分布和实际输出的分布之间的距离。
    softmax作为激活函数的时候,交叉熵作为损失函数

    1. 激活函数
    • Sigmoid
    • Softmax
      sigmoid和softmax是神经网络输出层使用的激活函数,分别用于两类判别和多类判别。

    binary cross-entropy和categorical cross-entropy是相对应的损失函数

    1. 交叉熵损失函数

    相关文章

      网友评论

          本文标题:Pytorch的一些用法

          本文链接:https://www.haomeiwen.com/subject/howzwrtx.html