Pytorch详细教程——11.CNN Flatten Operation Visualized

11. CNN Flatten Operation Visualized - Tensor Batch Processing For Deep Learning

这一节课我们将形象的对一个灰度图像张量进行flatten操作,并将展示如何在一个张量中flatten特定的轴。由于我们的张量是成批的,所以经常需要这种选择性的flatten操作。其实flatten操作是一种特殊的reshape操作,即将所有的轴都被挤压在 一起。

如果我们想把一个张量flatten,我们需要至少两个轴,这就使得我们从一个还没有平的东西开始。

下面是把这个18×18的图像压平成324的轴

在这里插入图片描述
在这里插入图片描述

这个就是flatten的输出,他的结果就是324,边缘的白色对应于图像的底部、顶部的白色。

在全连接层中的每个节点接受到这个被flatten的输出作为输入。

下面是代码实现flatten

我们有三个tensor,形状都是4×4的,秩为2的。我们可以把这个tensor看作是三张图片,他们被用来创建一个批次来传入CNN,记住,这里用一个张量来表示一个完整的批次,所以我们需要把这三个张量合成一个大的张量,它的轴是三个而不是两个
在这里插入图片描述
我们使用一个堆栈函数将三个张量的序列连接到一个新的轴上面
在这里插入图片描述
因为新的轴上有三个张量,所以我们知道这个新的轴的长度是3,实际上我们可以看到我们有三个张量,他们的高度和宽度都是4,第一个3代表批大小(batchsize),后面两个4代表的是高和宽,下面这个t就是一个批的张量表示的输出
在这里插入图片描述

我们想要做的就是把这个张量变成一个CNN期望的形式,为彩色通道增加一个轴,对于每个图像张量,我们基本上都有一个隐式的单色通道,所以实践中这些都是灰度图像,CNN将会看到一个显示的彩色通道轴,让我们重塑这个张量来增加一个。

我们在批大小后面增加了一个轴,长度为1的额外轴不会改变张量中元素的数量
在这里插入图片描述
或者以这种形式来看
第一个轴有三个元素,第一个轴的每个元素代表一个图像,对于每个图像,我们有一个包含单个通道的彩色通道轴,在每个通道轴中我们有四个数组,其中包含四个数字或张量的标量分量
在这里插入图片描述
在这里插入图片描述
让我们用索引再看一下这个张量

第一张图像

在这里插入图片描述
第一张图像的第一个通道
在这里插入图片描述
在第一个图像的第一个颜色通道中有第一行像素
在这里插入图片描述
第一行像素的第一个像素值
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
下面就是让这批图像变平,记住,整批是一个单独的张量,它将被传递给CNN,所以我们不想让整个变平,我们只要把这张批量的图像张量变平,我们先把整个都flatten,下面是四种方法在这里插入图片描述
我们看这个变平的结果,我们把所有的图像都映射到了一个单独的轴上面,1代表第一张图的像素,2代表第二张图的像素,3代表第三张图的像素,4代表第四张图的像素,这个flatten的效果不太好,因为所有的图像都被压缩成一个,我们需要对每一个图像进行单独预测,这里的解决方法就是保持批轴的同时使每个图像都变平在这里插入图片描述
这意味着我们只想把张量的一部分变平,我们想要用高度和宽度轴来压平颜色通道轴,可以使用flatten来解决
在这里插入图片描述
这里start_dim参数这个告诉了flatten方法当他开始flatten操作的时候应该从哪个轴开始,这里的1是一个索引,所以是第二个轴,也就是颜色通道轴,我们跳过了批轴,我们看形状可以看出我们有一个秩为2的张量,有三个单独的彩色通道图像,他们被压平成一个包含16像素值的单轴

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值