即使我们从理论上理解了卷积神经网络,在实际进行将数据拟合到网络时,很多人仍然对其网络的输入和输出形状(shape)感到困惑。本文章将帮助你理解卷积神经网络的输入和输出形状。

让我们看看一个例子。CNN的输入数据如下图所示。我们假设我们的数据是图像的集合。

输入的形状

你始终必须将4D数组作为CNN的输入。因此,输入数据的形状为(batch_size,height,width,depth),其中第一维表示图像的batch大小,其他三个维表示图像的各个属性,即高度,宽度和深度。深度就是色彩通道的数量。例如,RGB图像的深度为3,而灰度图像的深度为1。

输出形状

CNN的输出也是4D数组。其中batch大小将与输入batch大小相同,但是图像的其他3个尺寸可能会根据滤波器(filter) ,内核大小(kernel size)和填充值(padding)而变化。

让我们看一下下面的代码片段。

不要在这里被input_shape参数欺骗,以为输入形状是3D,但是在进行训练时必须传递一个4D数组,该数据的形状应该是(batchsize,10,10,3)。由于inputshape参数中没有batch值,因此在拟合数据时可以采用任何batch大小。

而且正如你所见,输出的形状为(None,10,10,64)。第一个维度表示batch大小,目前为"None"。因为网络事先不知道batch大小。拟合数据后,将使用拟合数据时给出的batch大小来代替"None"。

让我们看看另一个代码片段。

在这里,我将inputshape参数替换为batchinput_shape。顾名思义,此参数将事先提供batch大小,并且在拟合数据时你无法提供任何其他batch大小。例如,在本例你必须用batch大小为16的数据来拟合网络。

你可以从上图看到输出形状的batch大小是16而不是None。

在卷积层上附加全连接(Dense)层

我们可以简单地在另一个卷积层的顶部添加一个卷积层,因为卷积的输出维度数与输入维度数相同。

通常,我们在卷积层的顶部添加Dense层以对图像进行分类。但是,Dense层需要形状为(batch_size,units)的数据。卷积层的输出是4D的数组。因此,我们必须将从卷积层接收的输出的尺寸更改为2D数组。

我们可以通过在卷积层的顶部插入一个Flatten层来做到这一点。Flatten层将3维图像变形成一个维。现在我们得到一个2D形状的数组(batchsize,squashedsize),这是Dense层需要的输入形状。

汇总

  • 你始终必须将形状为(batch_size, height, width, depth)的4D数组输入CNN。
  • CNN的输出数据也是形状(batch_size, height, width, depth)的4D数组。
  • 要在CNN层的顶部添加一个Dense层,我们必须使用keras的Flatten层将CNN的4D输出更改为2D。

欢迎关注磐创博客资源汇总站:http://docs.panchuang.net/

欢迎关注PyTorch官方中文教程站:http://pytorch.panchuang.net/

理解卷积神经网络中的输入与输出形状(Keras实现)的更多相关文章

  1. 理解卷积神经网络中的channel

    在一般的深度学习框架的 conv2d 中,如 tensorflow.mxnet,channel 都是必填的一个参数 在 tensorflow 中,对于输入样本中 channels 的含义,一般是RGB ...

  2. CNN笔记:通俗理解卷积神经网络【转】

    本文转载自:https://blog.csdn.net/v_july_v/article/details/51812459 通俗理解卷积神经网络(cs231n与5月dl班课程笔记) 1 前言 2012 ...

  3. CNN笔记:通俗理解卷积神经网络

    CNN笔记:通俗理解卷积神经网络 2016年07月02日 22:14:50 v_JULY_v 阅读数 250368更多 分类专栏: 30.Machine L & Deep Learning 机 ...

  4. 卷积神经网络中的通道 channel

    卷积神经网络中 channels 分为三种:    (1):最初输入的图片样本的 channels ,取决于图片类型,比如RGB, channels=3    (2):卷积操作完成后输出的 out_c ...

  5. 卷积神经网络中的Winograd快速卷积算法

    目录 写在前面 问题定义 一个例子 F(2, 3) 1D winograd 1D to 2D,F(2, 3) to F(2x2, 3x3) 卷积神经网络中的Winograd 总结 参考 博客:blog ...

  6. (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql

    http://blog.csdn.net/yerenyuan_pku/article/details/71893689 前面对MyBatis框架的学习中,我们对Mapper.xml映射文件多少有些了解 ...

  7. tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图

    tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图 因为很多 demo 都比较复杂,专门抽出这两个函数,写的 demo. 更多教程:http://www.tensorflown ...

  8. 卷积神经网络中的channel 和filter

    在深度学习的算法学习中,都会提到 channels 这个概念.在一般的深度学习框架的 conv2d 中,如 tensorflow .mxnet,channels 都是必填的一个参数. channels ...

  9. python中的输入和输出

    输入和输出   输出: 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'hello, world',用代码实现如下: >>> print('hello, ...

随机推荐

  1. 阿里为何要用独立APP挖微信微商墙角?

    ​ 微商,这个被很多人看来是逃离马云魔咒,和淘宝抗衡的电商模式,自诞生到狂飙就伴随着种种争议.由于传播效率极强,在很长时间里也一直是不少人口中津津乐道的神话故事和救市良方.以至于,淘宝推出各种手段封杀 ...

  2. numpy.random模块用法总结

    from numpy import random numpy.random.uniform(low=0.0, high=1.0, size=None) 生出size个符合均分布的浮点数,取值范围为[l ...

  3. 初学Qt——QTableView+QSqlqueryModel

    我们在显示报表时可以用到上面两个类来实现,QTableView负责对视图显示:QSqlqueryModel则负责数据模块. 这里数据查询使用QSqlqueryModel主要是这个类可以通过自己写的查询 ...

  4. java单链表的实现自己动手写一个单链表

    单链表:单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是 ...

  5. 使用HBuilder开发移动APP

    前言 HBuilder是DCloud(数字天堂)推出的一款支持HTML5的Web开发IDE.HBuilder的编写用到了Java.C.Web和Ruby.HBuilder本身主体是由Java编写,它基于 ...

  6. 前端每日实战:52# 视频演示如何用纯 CSS 创作一个小球绕着圆环盘旋的动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/gKxyWo 可交互视频 此视频是可 ...

  7. Yuchuan_linux_C 编程之八 文件操作相关函数

    一.整体大纲 st_mode整体介绍: st_mode详细介绍: 二. Linux文件操作相关函数 1. stat 作用:获得文件信息,也可以获取文件大小. 头文件 #include <sys/ ...

  8. Lambda 方法引用

    1.方法引用:若Lambda 体中的内容有方法已经实现了,我们可以使用“引用方法”(可以理解为方法引用是Lambda表达式的另外一种表现形式) 方法引用主要有三种语法格式: ①  对象 :: 实例方法 ...

  9. React的路由react-router

    意思是:当你写一个web应用时候,应噶install的是react-router-dom,同样的,当你想写一个Native应用时候,需要install的是react-router-native,这两个 ...

  10. C语言程序设计(五) 选择控制结构

    第五章 选择控制结构 分治策略:任务分解细化 程序设计语言:为了让计算机执行由高级语言编写的程序指令,必须把这些指令从高级语言形式转换成计算机能理解的机器语言形式,这种转换是由编译器来完成的 算法:为 ...