Keras有两种类型的模型,序贯模型(Sequential)和函数式模型(Model),函数式模型应用更为广泛,序贯模型是函数式模型的一种特殊情况。
    a)序贯模型(Sequential):单输入单输出,一条路通到底,层与层之间只有相邻关系,没有跨层连接。这种模型编译速度快,操作也比较简单
    b)函数式模型(Model):多输入多输出,层与层之间任意连接。这种模型编译速度慢。

Keras模块结构

keras搭建神经网络步骤

1.Dense

全连接层(对上一层的神经元进行全部连接,实现特征的非线性组合),这个全连接层封装了output = activation(tf.matmul(input, kernel) + bias)这一线性变换+激活函数的计算操作,以及 kernel 和 bias 两个变量。当不指定激活函数时(即 activation(x) = x ),这个全连接层就等价于我们上述的线性变换。全连接层可能是我们编写模型时使用最频繁的层。

keras.layers.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)参数说明如下:
units:该层有几个神经元,代表该层的输出维度
activation:该层使用的激活函数
use_bias:是否添加偏置项
kernel_initializer:权重初始化方法
bias_initializer:偏置值初始化方法
kernel_regularizer:权重规范化函数
bias_regularizer:偏置值规范化方法
activity_regularizer:输出的规范化方法
kernel_constraint:权重变化限制函数
bias_constraint:偏置值变化限制函数

2.Dropout

为输入数据施加Dropout。Dropout将在训练过程中每次更新参数时随机断开一定百分比(rate)的输入神经元,Dropout层用于防止过拟合。

keras.layers.Dropout(rate, noise_shape=None, seed=None)
参数
rate:0~1的浮点数,控制需要断开的神经元的比例noise_shape:整数张量,为将要应用在输入上的二值Dropout mask的shape,例如你的输入为(batch_size, timesteps, features),并且你希望在各个时间步上的Dropout mask都相同,则可传入noise_shape=(batch_size, 1, features)。seed:整数,使用的随机数种子

3.Embedding层

Embedding层只能作为模型的第一层

keras.layers.Embedding(input_dim, output_dim, embeddings_initializer='uniform',embeddings_regularizer=None, activity_regularizer=None, embeddings_constraint=None, mask_zero=False, input_length=None)
参数input_dim:大或等于0的整数,字典长度,即输入数据最大下标+1
output_dim:大于0的整数,代表全连接嵌入的维度
embeddings_initializer: 嵌入矩阵的初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
embeddings_regularizer: 嵌入矩阵的正则项,为Regularizer对象
embeddings_constraint: 嵌入矩阵的约束项,为Constraints对象
mask_zero:布尔值,确定是否将输入中的‘0’看作是应该被忽略的‘填充’(padding)值,该参数在使用递归层处理变长输入时有用。设置为True的话,模型中后续的层必须都支持masking,否则会抛出异常。如果该值为True,则下标0在字典中不可用,input_dim应设置为|vocabulary| + 2。
input_length:当输入序列的长度固定时,该值为其长度。如果要在该层后接Flatten层,然后接Dense层,则必须指定该参数,否则Dense层的输出维度无法自动推断。
输入shape
形如(samples,sequence_length)的2D张量
输出shape
形如(samples, sequence_length, output_dim)的3D张量处理带padding的输入有时候会遇到不等长样本输入,对其进行padding补零之后作为输入送入Embedding层,这时候就需要活用mask_zero字段。若令mask_zero=True,则注意input_dim应该加一,例如原本ID类取值为0到5,为了实现padding,ID取值范围变成1到6,则此时input_dim=6+1=7。 下面给出一个例子,我们准备了四个ID列表型样本,经过了padding补零到长度4,为了方便展示,我们让所有非零ID相同。在Embedding层中设置mask_zero=True,然后调用自定义的MeanPooling层(见这里)。如果masking起作用,则输出的result应该是一个4x3矩阵,且所有行向量相同。

4.LSTM层

keras.layers.LSTM(
units,
activation='tanh',
recurrent_activation='hard_sigmoid',
use_bias=True,
kernel_initializer='glorot_uniform',
recurrent_initializer='orthogonal',
bias_initializer='zeros',
unit_forget_bias=True,
kernel_regularizer=None,
recurrent_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
recurrent_constraint=None,
bias_constraint=None,
dropout=0.0,
recurrent_dropout=0.0,
implementation=1,
return_sequences=False,
return_state=False,
go_backwards=False,
stateful=False,
unroll=False)
参数units: 正整数,输出空间的维度。
activation: 要使用的激活函数 (详见 activations)。 如果传入 None,则不使用激活函数 (即 线性激活:a(x) = x)。
recurrent_activation: 用于循环时间步的激活函数 (详见 activations)。 默认:分段线性近似 sigmoid (hard_sigmoid)。 如果传入 None,则不使用激活函数 (即 线性激活:a(x) = x)。
use_bias: 布尔值,该层是否使用偏置向量。
kernel_initializer: kernel 权值矩阵的初始化器, 用于输入的线性转换 (详见 initializers)。
recurrent_initializer: recurrent_kernel 权值矩阵 的初始化器,用于循环层状态的线性转换 (详见 initializers)。
bias_initializer:偏置向量的初始化器 (详见initializers).
unit_forget_bias: 布尔值。 如果为 True,初始化时,将忘记门的偏置加 1。 将其设置为 True 同时还会强制 bias_initializer="zeros"。 这个建议来自 Jozefowicz et al.。
kernel_regularizer: 运用到 kernel 权值矩阵的正则化函数 (详见 regularizer)。
recurrent_regularizer: 运用到 recurrent_kernel 权值矩阵的正则化函数 (详见 regularizer)。
bias_regularizer: 运用到偏置向量的正则化函数 (详见 regularizer)。
activity_regularizer: 运用到层输出(它的激活值)的正则化函数 (详见 regularizer)。
kernel_constraint: 运用到 kernel 权值矩阵的约束函数 (详见 constraints)。
recurrent_constraint: 运用到 recurrent_kernel 权值矩阵的约束函数 (详见 constraints)。
bias_constraint: 运用到偏置向量的约束函数 (详见 constraints)。
dropout: 在 0 和 1 之间的浮点数。 单元的丢弃比例,用于输入的线性转换。
recurrent_dropout: 在 0 和 1 之间的浮点数。 单元的丢弃比例,用于循环层状态的线性转换。
implementation: 实现模式,1 或 2。 模式 1 将把它的操作结构化为更多的小的点积和加法操作, 而模式 2 将把它们分批到更少,更大的操作中。 这些模式在不同的硬件和不同的应用中具有不同的性能配置文件。
return_sequences: 布尔值。是返回输出序列中的最后一个输出,还是全部序列。
return_state: 布尔值。除了输出之外是否返回最后一个状态。
go_backwards: 布尔值 (默认 False)。 如果为 True,则向后处理输入序列并返回相反的序列。
stateful: 布尔值 (默认 False)。 如果为 True,则批次中索引 i 处的每个样品的最后状态 将用作下一批次中索引 i 样品的初始状态。
unroll: 布尔值 (默认 False)。 如果为 True,则网络将展开,否则将使用符号循环。 展开可以加速 RNN,但它往往会占用更多的内存。 展开只适用于短序列。
 model.add(LSTM(input_dim=1, output_dim=6,input_length=10, return_sequences=True))model.add(LSTM(6, input_dim=1, input_length=10, return_sequences=True))model.add(LSTM(6, input_shape=(10, 1),return_sequences=True))输出维度   output_dim=6
滑动窗口  input_length=10
输入维度      input_dim=1

lstm层三种表达方式

5.Conv1D    1D 卷积层 (例如时序卷积)

当使用该层作为模型第一层时,需要提供 input_shape 参数(整数元组或 None),例如, (10, 128) 表示 10 个 128 维的向量组成的向量序列, (None, 128) 表示 128 维的向量组成的变长序列。

keras.layers.Conv1D(
filters,
kernel_size,
strides=1,
padding='valid',
data_format='channels_last',
dilation_rate=1,
activation=None,
use_bias=True,
kernel_initializer='glorot_uniform',
bias_initializer='zeros',
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None)参数
filters: 整数,输出空间的维度 (即卷积中滤波器的输出数量)。
kernel_size: 一个整数,或者单个整数表示的元组或列表, 指明 1D 卷积窗口的长度。
strides: 一个整数,或者单个整数表示的元组或列表, 指明卷积的步长。 指定任何 stride 值 != 1 与指定 dilation_rate 值 != 1 两者不兼容。
padding: "valid", "causal" 或 "same" 之一 (大小写敏感)  "valid" 表示「不填充」。  "same" 表示填充输入以使输出具有与原始输入相同的长度。  "causal" 表示因果(膨胀)卷积, 例如,output[t] 不依赖于 input[t+1:], 在模型不应违反时间顺序的时间数据建模时非常有用。 详见 WaveNet: A Generative Model for Raw Audio, section 2.1。
data_format: 字符串,  "channels_last" (默认) 或 "channels_first" 之一。输入的各个维度顺序。 "channels_last" 对应输入尺寸为 (batch, steps, channels) (Keras 中时序数据的默认格式) 而 "channels_first" 对应输入尺寸为 (batch, channels, steps)。
dilation_rate: 一个整数,或者单个整数表示的元组或列表,指定用于膨胀卷积的膨胀率。 当前,指定任何 dilation_rate 值 != 1 与指定 stride 值 != 1 两者不兼容。
activation: 要使用的激活函数 (详见 activations)。 如未指定,则不使用激活函数 (即线性激活: a(x) = x)。
use_bias: 布尔值,该层是否使用偏置向量。
kernel_initializer: kernel 权值矩阵的初始化器 (详见 initializers)。
bias_initializer: 偏置向量的初始化器 (详见 initializers)。
kernel_regularizer: 运用到 kernel 权值矩阵的正则化函数 (详见 regularizer)。
bias_regularizer: 运用到偏置向量的正则化函数 (详见 regularizer)。
activity_regularizer: 运用到层输出(它的激活值)的正则化函数 (详见 regularizer)。
kernel_constraint: 运用到 kernel 权值矩阵的约束函数 (详见 constraints)。
bias_constraint: 运用到偏置向量的约束函数 (详见 constraints)。输入尺寸
3D 张量 ,尺寸为 (batch_size, steps, input_dim)。输出尺寸
3D 张量,尺寸为 (batch_size, new_steps, filters)。 由于填充或窗口按步长滑动,steps 值可能已更改。

6.Conv2D    2D 卷积层 (例如对图像的空间卷积)

当使用该层作为模型第一层时,需要提供 input_shape 参数 (整数元组,不包含样本表示的轴),例如, input_shape=(128, 128, 3) 表示 128x128 RGB 图像, 在 data_format="channels_last" 时。

keras.layers.Conv2D(
filters,
kernel_size,
strides=(1, 1),
padding='valid',
data_format=None,
dilation_rate=(1, 1),
activation=None,
use_bias=True,
kernel_initializer='glorot_uniform',
bias_initializer='zeros',
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None)参数filters: 整数,输出空间的维度 (即卷积中滤波器的输出数量)。
kernel_size: 一个整数,或者 2 个整数表示的元组或列表, 指明 2D 卷积窗口的宽度和高度。 可以是一个整数,为所有空间维度指定相同的值。
strides: 一个整数,或者 2 个整数表示的元组或列表, 指明卷积沿宽度和高度方向的步长。 可以是一个整数,为所有空间维度指定相同的值。 指定任何 stride 值 != 1 与指定 dilation_rate 值 != 1 两者不兼容。
padding: "valid" 或 "same" (大小写敏感)。
data_format: 字符串,  channels_last (默认) 或 channels_first 之一,表示输入中维度的顺序。 channels_last 对应输入尺寸为 (batch, height, width, channels),  channels_first 对应输入尺寸为 (batch, channels, height, width)。 它默认为从 Keras 配置文件 ~/.keras/keras.json 中 找到的 image_data_format 值。 如果你从未设置它,将使用 channels_last。
dilation_rate: 一个整数或 2 个整数的元组或列表, 指定膨胀卷积的膨胀率。 可以是一个整数,为所有空间维度指定相同的值。 当前,指定任何 dilation_rate 值 != 1 与 指定 stride 值 != 1 两者不兼容。
activation: 要使用的激活函数 (详见 activations)。 如果你不指定,则不使用激活函数 (即线性激活: a(x) = x)。
use_bias: 布尔值,该层是否使用偏置向量。
kernel_initializer: kernel 权值矩阵的初始化器 (详见 initializers)。
bias_initializer: 偏置向量的初始化器 (详见 initializers)。
kernel_regularizer: 运用到 kernel 权值矩阵的正则化函数 (详见 regularizer)。
bias_regularizer: 运用到偏置向量的正则化函数 (详见 regularizer)。
activity_regularizer: 运用到层输出(它的激活值)的正则化函数 (详见 regularizer)。
kernel_constraint: 运用到 kernel 权值矩阵的约束函数 (详见 constraints)。
bias_constraint: 运用到偏置向量的约束函数 (详见 constraints)。输入尺寸如果 data_format='channels_first', 输入 4D 张量,尺寸为 (samples, channels, rows, cols)。
如果 data_format='channels_last', 输入 4D 张量,尺寸为 (samples, rows, cols, channels)。输出尺寸如果 data_format='channels_first', 输出 4D 张量,尺寸为 (samples, filters, new_rows, new_cols)。
如果 data_format='channels_last', 输出 4D 张量,尺寸为 (samples, new_rows, new_cols, filters)。
由于填充的原因, rows 和 cols 值可能已更改。

参考资料:

https://keras.io/zh/

https://blog.csdn.net/weixin_42499236/article/category/8447042

https://blog.csdn.net/songbinxu/article/details/80150019

Keras神经网络层学习相关推荐

  1. Keras神经网络的学习与使用(1)

    Keras神经网络层学习与使用 Keras的简单介绍 Keras框架中的方法介绍 Compile()方法 fit()方法 summary()方法 evaluate()方法 perdict()方法 Ke ...

  2. 使用Keras进行深度学习:(六)LSTM和双向LSTM讲解及实践

    ###欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 介绍 长短期记忆(Long Short Term Memor ...

  3. python 人脸识别:从入门到精通 (5.4)常用的神经网络层

    第5章 深度学习与Keras工程实践 5.4 常用的神经网络层 5.4.1 全连接层 keras.layers.Dense(units,activation=None,use_bias=True,ke ...

  4. 基于keras的深度学习基本概念讲解

    基于keras的深度学习基本概念讲解 Tensorflow1.0正式发布,谷歌首届Tensorflow开发者大会在山景召开,深度学习迎来新的高潮和狂欢.随着深度学习框架的普及和推广,会有越来越多人加入 ...

  5. 2_初学者快速掌握主流深度学习框架Tensorflow、Keras、Pytorch学习代码(20181211)

    初学者快速掌握主流深度学习框架Tensorflow.Keras.Pytorch学习代码 一.TensorFlow 1.资源地址: 2.资源介绍: 3.配置环境: 4.资源目录: 二.Keras 1.资 ...

  6. DL框架之Keras:深度学习框架Keras框架的简介、安装(Python库)、相关概念、Keras模型使用、使用方法之详细攻略

    DL框架之Keras:深度学习框架Keras框架的简介.安装(Python库).相关概念.Keras模型使用.使用方法之详细攻略 目录 Keras的简介 1.Keras的特点 2.Keras四大特性 ...

  7. 使用keras进行深度学习_如何在Keras中通过深度学习对蝴蝶进行分类

    使用keras进行深度学习 A while ago I read an interesting blog post on the website of the Dutch organization V ...

  8. tensorflow打印模型结构_五行代码用图提升模型表现,TensorFlow开源NSL神经结构学习框架...

    选自Medium 机器之心编译 参与:一鸣.李亚洲 今日,谷歌 TensorFlow 宣布推出神经结构学习(NSL)开源框架,它使用神经图学习方法来训练带有图和结构化数据的神经网络. 据谷歌 Tens ...

  9. keras神经风格迁移_知识分享 | 神经风格迁移-把每一张图片都变成自己喜欢的样子...

    原标题:知识分享 | 神经风格迁移-把每一张图片都变成自己喜欢的样子 有 爱 就 有 阳 光 灿 烂 虽然大家总是自嘲,但还是要开开心心的哦~ 选择了打工这条路,也就选择了终身学习 ,今天也让小编带领 ...

最新文章

  1. vc mysql控件_VC++使用ActiveX控件连接和操作数据库
  2. 吃鸡2019年5月7日服务器维护,绝地求生正式服5月17日停机更新维护多久到几点
  3. 阿里云云服务器硬盘分区及挂载
  4. MyEclipse 设置字体
  5. linux正则表达式_号称“天书”的正则表达式,要这么来讲,我小学三年级已经满分了
  6. 15、Java Swing JSlider:滑块组件
  7. linux看3D实景
  8. 问题解决:QtCreator屏蔽指定警告:如C4819等
  9. 无符号数和有符号数之间赋值和大小比较
  10. MySQL中InnoDB引擎对索引的扩展
  11. 第四章 前端开发——JQuery库
  12. Python之网络编程(socketserver模块详解、链接认证)
  13. 如何使用Putty登录安装在VirtualBox里的ubuntu 1
  14. 【Log4j】Jboss下配置log4j简记
  15. Intel Edison学习笔记(二)—— 入门环境配置
  16. jboss下载和安装
  17. Java 如何保证线程安全,你真的清楚吗
  18. bandizip修改压缩文件内容_BandiZip解压添加压缩文件教程
  19. Google 工程师亲授:菜鸟开发者一定要投资的十大目标
  20. RK3288——LCD裸机

热门文章

  1. Docker入门——Docker是什么
  2. 虚拟机开机出现welcome to emergency mode! 解决方法
  3. swlzky今天风有点大
  4. 【浅入浅出】现代前端框架单页面
  5. docker下载速度慢?赶快换国内源
  6. 重磅!腾讯正式开源图计算框架 Plato,十亿级节点图计算进入分钟级时代
  7. 刷穿力扣 | 390. 消除游戏
  8. withCredentials在跨域发送cookie时的应用
  9. 晶圆切割机的新工艺研究
  10. 《丑奴儿·书博山道中壁》---辛弃疾