首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >这一叠CNN层有效吗?

这一叠CNN层有效吗?
EN

Code Golf用户
提问于 2020-06-24 16:39:39
回答 2查看 426关注 0票数 7

背景

这个挑战是关于卷积神经网络及其两个主要的构建块,即卷积层池层

为了简单起见,我们忽略了图像和中间张量的“深度”,只看宽度和高度。

卷积层

在图像处理中,卷积层的工作方式类似于内核。它由内核宽度和高度以及内核模式(最小、中或最大)定义。min内核在整个内核与原始图像重叠的位置提取值。对于中间核,内核的中心放置在图像的每个像素上;对于最大核,则考虑任何像素与内核重叠的所有位置。

每个内核的定位产生一个像素,从而产生一个小于(min)、等于(mid)或大于(最大)输入图像的2D阵列。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Kernel (C is the center)
###
#C#
###

Image
*****
*****
*****
*****
*****

Min kernel convolution (results in 3x3)
###**     **###
#C#**     **#C#
###** ... **###
*****     *****
*****     *****
 ...       ...
*****     *****
*****     *****
###** ... **###
#C#**     **#C#
###**     **###

Mid kernel convolution (results in 5x5)
###           ###
#C#***     ***#C#
###***     ***###
 ***** ... *****
 *****     *****
 *****     *****
  ...       ...
 *****     ***** 
 *****     ***** 
 ***** ... ***** 
###***     ***###
#C#***     ***#C#
###           ###

Max kernel convolution (results in 7x7)

###             ###
#C#             #C#
###****     ****###
  *****     *****
  ***** ... *****
  *****     *****
  *****     *****
   ...       ...
  *****     *****  
  *****     *****  
  ***** ... *****  
  *****     *****  
###****     ****###
#C#             #C#
###             ###

如果输入映像有IR行和IC列,而内核有KR行和KC列,则输出维度定义如下:

  • Min内核:IR - KR + 1行、IC - KC + 1列;如果结果行或列为零或负,则无效
  • 中间内核:IR行、IC列;如果KRKC是偶数,则出错
  • Max内核:IR + KR - 1行,IC + KC - 1

池层

池层由窗口的宽度和高度以及水平和垂直步幅大小(在任一方向一次移动的单位数)来定义。见下图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
3x3 window, 2x2 stride pooling on a 7x7 image
###**** **###** ****###
###**** **###** ****###
###**** **###** ****###
******* ******* *******
******* ******* *******
******* ******* *******
******* ******* *******
                       
******* ******* *******
******* ******* *******
###**** **###** ****###
###**** **###** ****###
###**** **###** ****###
******* ******* *******
******* ******* *******
                       
******* ******* *******
******* ******* *******
******* ******* *******
******* ******* *******
###**** **###** ****###
###**** **###** ****###
###**** **###** ****###

如果输入映像具有IR行和IC列,而池层具有WR/WC行/列和SH/SV水平/垂直步长的窗口,则输出维度定义如下:

  • 行:(IR - WR)/SV + 1,如果(IR - WR) % SV != 0WR < SV出错
  • 科尔:(IC - WC)/SH + 1,如果(IC - WC) % SH != 0WC < SV出错

叠加多层

卷积层和池层可以任意叠加,从而使前一层的输出成为下一层的输入。向整个堆栈提供输入图像的维数,并应依次计算每个中间图像的维数。如果在任何层没有发生错误,则层堆栈是有效的。最终的输出大小并不重要,只要它可以没有错误的计算。

以下堆栈是有效的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Input image 25x25
1. Min Convolution 3x3         => Intermediate image 23x23
2. Pooling 3x3 with stride 2x2 => Intermediate image 11x11
3. Max Convolution 3x3         => Intermediate image 13x13
4. Max Convolution 4x4         => Intermediate image 16x16
5. Pooling 2x2 with stride 2x2 => Intermediate image 8x8
6. Min Convolution 5x5         => Intermediate image 4x4
7. Pooling 4x4 with stride 3x3 => Output image 1x1

以堆栈的任何连续子序列作为输入,从相应的(中间)图像开始,也是有效的。(例如,输入图像23x23的步骤2、3、4、5)

对上述7层堆栈的下列任何修改都将导致无效堆栈:

  • 用stride 4x42x4替换步骤2:在至少一维范围内,步长大于窗口
  • mid卷积代替步骤3:图像大小在第7步变得太小
  • mid卷积替换步骤4:具有均匀核维数的中间卷积是一个错误。
  • 用内核大小9x5或更大替换步骤6:内核不适合图像(IR-KR+1为零或负,这是一个错误)

挑战

给定输入维度和卷积/池层堆栈的描述,确定它是否是有效的配置,即不是错误。

堆栈的描述可以以合理的方式表示。

  • 两种层次的列表(序列)
  • 对于卷积层,内核大小(宽度/高度;两个数字)和模式(最小/中/最大)。
  • 对于池层,窗口大小(宽度/高度)和步长(水平/垂直;总共四个数字)。

所有的数字(内核大小,窗口大小,步幅)都保证是正整数。

您可以通过遵循您的语言约定或分别为true/false选择两个不同的值来输出真实/错误。

适用标准的密码-高尔夫规则。以字节为单位的最短代码获胜。

EN

回答 2

Code Golf用户

发布于 2020-06-25 03:29:25

05AB1E,45 字节数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sεÐgiĀ«]vyн³Dp-Nè©*-/®+ÐïÊyнÈ®_*y`‹«à~i0q]1

@萤火虫241的答案的启发,所以一定要投他一票!

三个松散的投入:

  1. 窗口维数[w,h]
  2. 层列表,其中[[r,c]]是卷积层,[[r,c],[r,c]]是池层。
  3. 内核模式列表,其中-1为max;0为mid;1为min;2为池层。

在网上试试。(由于q没有测试套件,但我手动检查了四个falsey示例。)

Explanation:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
s                   # Swap to get the first two (implicit) inputs onto the stack,
                    # with the second input at the top
 ε                  # Map over each layer:
  Ð                 #  Triplicate the layer
   gi               #  If it's length is 1 (thus a convolutional layer):
     Ā              #   Truthify both integers, so we have a pair of 1s: [1,1]
      «             #   Merge it to the layer
 ]                  # Close the if-statement and map
  v                 # Loop over each layer `y`, consisting of two pairs [kernel,stride]:
   yн               #  Get the first pair (the kernel)
     ³              #  Push the third input-list of modes
      Dp-           #  Transform the 2s into 1s (by checking for prime, and subtracting)
         Nè         #  Get the mode at the current loop-index
           ©        #  Store it in variable `®` (without popping)
            *       #  Multiply this mode to the kernel-pair
             -      #  Subtract each from the dimensions-pair
              yθ    #  Get the last pair (the stride)
                /   #  Divide the dimension-pair by the stride-pair
                 ®+ #  And add the modified mode `®` to each
   Ð                #  Triplicate the modified dimensions-pair
    ï               #  Cast the values in the top copy to integers
     Ê              #  Check if the top two pairs are NOT equal
                    #  (1 if the dimension-pair contains decimal values; 0 if integers)
    yн              #  Push the kernel again
      È             #  Check for both values if they're even (1 if even; 0 if odd)
       ®_           #  Check if `®` is 0 (1 if 0; 0 if not)
         *          #  Multiply the checks
    y`              #  Push the kernel-pair and stride-pair separated to the stack
      ‹             #  Check if [kernel-row < stride-row, kernel-column < stride-column]
    «               #  Merge the pairs of checks together
     à              #  Check of any are truthy of this quartet by taking the maximum
    ~               #  Check if either is truthy by taking the bitwise-OR
     i              #  If this is truthy:
      0             #   Push a 0
       q            #   And stop the program
                    #   (after which this 0 is output implicitly as result)
 ]                  # Close the if-statement and loop
  1                 # And push a 1
                    # (which will be output implicitly if we didn't encountered the `q`#qcStackCode#)
票数 2
EN

Code Golf用户

发布于 2020-06-25 06:14:11

J,84字节

包含一个层列表;mode x y用于卷积,_1 0 1用于min mid max,2x2矩阵wx wy ,: sx sy用于池,x y用于初始映像。如果它是有效的描述,则返回0,否则返回1。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
_ e.&>(1(+_*[><.)@+(-{.)%(]*>:)/@])`((+_*1>])@+}.(]-~*+_*(2|[)+:|@]){.)@.(]3=#)~&.>/

在网上试试!

是如何工作的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
()`()@.(]3=#)~&.>/

我们从右边折叠列表(最初的25 25代表),并根据左长度(卷积3,池2),从两个函数中进行选择。每当我们遇到错误时,我们将行或列维度设置为无穷大。对于卷积,例如_1 3 3 (最小3x3):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
((+_*1>])@+}.(]-~*+_*(2|[)+:|@]){.)
           }.(                 ){.  split into 3 3 and _1 as arguments
                            |@]     mode != 0?
                      2|[           3 3 even?
                          +:        not-or, so 1 iff mode = 0 and dimension even
                   _*               if this^ returns 1, convert it to infinity
                 *+                 add to this dim * mode (_3 _3)
              ]-~                   subtract the mode (_2 _2)
           +                        add to the image dimension (23 23)
  (+_*1>])                          if the dimensions are less than 1, add infinity

对于池,例如左侧为3 3,:2 2,右侧为23 23

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(1(+_*[><.)@+(-{.)%(]*>:)/@])
                   (]*>:)/@]  multiple stride with (window greater/equal stride?)
             (-{.)%           (image - window)% mstride, is infinity iff mstride is 0
 1          +                 add one
  (+_*[><.)                   add infinity if flooring a dimensions changes it

最后,在应用每一层之后:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
_ e.&>       unbox and check if at least one dimension is infinity
票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/206455

复制
相关文章
「R」ggplot2在R包开发中的使用
没有特别系统的学习 tidy evaluation 这方面的高级操作,最近有空准备补一补,学习下这方面的知识。
王诗翔呀
2022/03/30
6.7K0
集成光路中的光栅
所谓光栅,就是通过一定的微加工手段,使得材料的折射率满足一定的分布,从而实现对光操控的一类光器件。典型的光栅结构,示意图如下,
光学小豆芽
2020/08/14
2.3K0
对SVG动画进行异步懒光栅化处理 [每日前端夜话(0x17)]
在转换 SVG 图像时,浏览器会试着在每一帧上进行渲染,以便使图像尽可能的清晰。 不幸的是,SVG渲染可能会很慢,特别是对于较大的图像。
疯狂的技术宅
2019/03/27
1.3K0
对SVG动画进行异步懒光栅化处理 [每日前端夜话(0x17)]
光栅图形学的中的算法
——对《计算机图形学基础教程》胡事民等著 的补充
种花家的奋斗兔
2020/11/13
1.2K0
光栅图形学的中的算法
网页光栅化_光栅净化
资料:https://blog.csdn.net/luoshengyang/article/details/51348829
全栈程序员站长
2022/11/01
2440
在Exce中使用带有动态数组公式的切片器
Excel中,有一些特别的函数仅计算可见行,例如SUBTOTAL函数和AGGREGATE函数。本文示例使用SUBTOTAL函数。
fanjy
2023/08/29
5160
在Exce中使用带有动态数组公式的切片器
原 在PostgreSQL中秒级完成大表添加带有not null属性并带有default值的实验
近期同事在讨论如何在PostgreSQL中一张大表,添加一个带有not null属性的,且具有缺省值的字段,并且要求在秒级完成。 因为此,有了以下的实验记录: 首先我们是在PostgreSQL 10下做的实验: postgres=# select version(); version ---------------
王果壳
2018/05/17
8.2K0
sql中带有like时如何使用预编译。
Java代码如下: String str = "长江"; Connection conn = null; //比较preparestatement和statement PreparedStatem
geekfly
2022/05/06
9730
在zabbix中实现发送带有图片的邮件和微信告警
可以手动触发一个报警测试效果,手机上就可以收到带图的报警了,点击消息之后的页面也可以看到历史的图片
没有故事的陈师傅
2019/11/10
2.4K0
GPX数据在mapboxGL中轨迹动画
喜欢跑步的人都会选择一款APP来自己跑步的,常用的有keep、悦跑圈、华为健康等等,每次跑完步,会根据跑步的轨迹绘制轨迹动画。今天咱们讲讲技术,不扯淡,讲一下在mapboxGL中如何实现类似的效果。
牛老师讲GIS
2020/06/08
2K0
GPX数据在mapboxGL中轨迹动画
光栅化[通俗易懂]
定义一个宽高比(Aspect Ratio);还有垂直可视角度 vertical field-of-view (fovY) 。垂直可视角度即从相机原点到上顶中点和下底中点的连线的夹角,可视角度大可以类比成广角相机,它张得就比较开,适合拍近距离的物体;可视角度小,透视投影就越不明显,越像正交投影,就很容易能拍到远处的物体。水平可视角度可以类比。
全栈程序员站长
2022/09/06
1.2K0
光栅化[通俗易懂]
带有CSS3的动画3D条形图
关于如何使用CSS创建动画三维条形图的教程。 这一切都是从一个小实验开始的,这个实验受到了来自Nettuts +的教程的启发,它展示了如何使用CSS,图像和JavaScript将3D条形图嵌入到HTML页面中。在阅读完教程之后,我挑战自己将这个想法变成纯粹的CSS,看看我能做多少。最初的挑战是创造一个经典的半透明的6方框3D盒子。最后的挑战是创建一个完整的三维条形图,我们将在本教程中创建。 你可以看看我以前做过这里。 请注意:本教程的结果只能在支持相应CSS属性的浏览器中按预期方式工作。 我们写下一些关
企鹅号小编
2018/01/15
8800
带有CSS3的动画3D条形图
在vscode中配置R的开发环境
有时候各位使用R的用户不知道会不会有这样的感觉,visual studio和Rstudio由于负载过重,在打开或者加载R script时会出现加载过慢的情况,但对于很多数据工作者来说,variable inspector和data view这类的数据可视化功能必不可少,而visual studio和Rstudio在这方面做得可以说是非常完善。在这时候笔者就想到了visual studio code,毕竟作为宇宙最强IDE的减配和开源版本(这里形容可能不太准确),各种语言相应的开发插件众多。更加让笔者惊喜的是,目前vscode-R一直处于开发阶段,并且在最近的1.2.0版本结合了vscode关于web view的API,添加了R session watcher——一个集成的数据可视化构架,并且在1.21中完善了windows系统下的extension的bug。我们来看看集成的viewer会有什么样的效果:
用户7652506
2020/08/12
11.8K0
在vscode中配置R的开发环境
光栅化 (Rasterization)
上一篇文章讨论了如何在多边形的某一点上分配光强度值,这里主要讨论如何为多边形确定实际的像素,即在栅格屏幕上的对应位置,这个过程称为光栅化(Rasterization)或者扫描转换 (Scan conversion)。
全栈程序员站长
2022/09/20
6800
通过在线平面图网站设计漂亮的平面图
平面图,又称图则,是建筑物工程图的组成部分。当测区面积不大,半径小于10公里(甚至25公里)时,可以用水平面代替水准面。在这个前提下,可以把测区内的地面景物沿铅垂线方向投影到平面上,按规定的符号和比例缩小而构成相似图形,即为平面图。平面图以比例图绘制,表现该建筑物内的客厅、房间、空间及其它硬件的分布,其中包括主力墙、出入口、窗的位置图。
用户5442762
2019/06/10
12K0
使用带有MySQL Router的Replica Set
您可以使用MySQL Router 8.0.19和更高版本对replica set进行引导,就像可以引导InnoDB cluster一样,将MySQL路由器与InnoDB Cluster结合使用”。生成的MySQL路由器配置文件的唯一区别是添加了cluster_type选项。将MySQL路由器引导到副本集时,生成的配置文件包括:
卖菜小弟
2020/01/22
2K0
Python在tkinter界面中显示matplotlib动画
在tkinter应用程序界面中同时显示matplotlib绘制的动态折线图、动态散点图和动态柱状图。
Python小屋屋主
2020/02/23
5K0
点击加载更多

相似问题

平面图动画R中的图像标签

10

将坐标更改为R中具有多层的一系列光栅

11

光栅R

13

在R中输出光栅层

11

如何使用r中的光栅包在光栅中显示所有列名

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文