Pytorch

您所在的位置:网站首页 360压缩前后大小不变怎么设置 Pytorch

Pytorch

2024-07-08 21:04| 来源: 网络整理| 查看: 265

卷积

        一维卷积conv1d,输入的尺寸是embedding_size*length,也就是每一列是一个数据的embedding。

输入输出尺寸的关系

        out​=(in​−kernels​ize+2∗padding)/stride+1)

        卷积和池化都是一样的。

        当有dilation时,out​=(  (in​−dilation∗(kernelsize−1)−1+2∗padding)/stride  +1),这个除法是向下取整的。需要注意的是默认dilation=1,这时两个像素之间是没有间隔的,也就是没有进行膨胀的,只有在dilation>1时才是进行了膨胀。

        如果需要保持卷积前后尺寸不变,可以设置stride=1,padding=(kernel_size-1) // 2 * dilation,但是这样要求kernel_size是奇数,这是因为整除的问题。需要注意的是pytorch中padding操作是在两边,或者说四个方向padding这么多的数据,同时padding这么多数据。当然如果没有dilation,要保持卷积前后尺寸不变,最常见的就是设置stride=1,kernelsize=3,padding=1;或者stride=1,kernelsize=5,padding=2。一旦stride大于1,都是会造成尺寸的缩小的,最常见的就是变成1/2,也就是stride=2,kernel=padding*2,具体根据输入尺寸的单复,还需要+1,但是实际上一般在一个网络中,不会刻意为了将输出保持为输出的1/2而去改变kernelsize,而是统一设置,有(kernelsize=2,padding=1),(kernelsize=3,padding=1)等常见设置,但是具体设置仍要根据具体需要进行调整,如MobileNet中对于channel的设置。

        当然如果需要进行具体的调节,而非同时在四个方向进行padding同样多的数据,可以手动对数据进行padding,手动padding有四种方式:0、常数、镜像、复制,详见 四种padding,需要注意的是这里是将数据进行单独处理,然后再输入conv函数,也就是说卷积函数中只需要将padding设置为0即可。除此之外还需要注意,这些函数旨在是处理二维图片数据的,也就是输入的数据应该是(batch, channel, length, width)这样的四维数据,所以如果channel维只有一维,比如语音需要先unsqueeze一个维度出来。或者用一维的padding函数ReflectionPad1d等。

def block(nn.Module): def __ini__(self, ...): self.pad = nn.ReflectionPad2d(padding=(1, 2, 1, 2)) def forward(self, x): x = self.pad(x) 损失函数

        对于最经常出现也是最基础的损失函数,交叉熵损失函数,可以看一下这篇博客CrossEntropy,其中对于最后面说的 Pytorch中的CrossEntropyLoss()函数不是使用的常规的定义式

而是使用

 

其实是一样的,因为在原始定义是针对二分类的,其计算式看似是两部分求和,实则最后计算时只有一个式子,因为p(x)是其真实类别,只能取0或1两个值,q(x)指的是预测为1的概率,很明显,1-q(x)就是预测为0的概率;        因为p(x)只能取0或1两个值,那么上式看似是两部分求和,实际上在计算时只有一个部分,当真实类别为1时,后面的1-p(x)为0,只剩下第一部分的p(x)logq(x),前面说过q(x)是预测类别为1的概率,所以此时计算的是预测正确的概率;同理,真实类别为0时,第一部分p(x)=0,只剩下第二部分的(1-p(x))log(1-q(x)),而1-q(x)就是预测类别为0的概率;        那么这个式子表达的意思就是将对样本预测正确的概率作为损失值(注意这里q(x)和1-q(x)都是



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3