Keras.layer()

目录

  • Keras.layers

    • Dense(全连接层)
    • Activation(激活函数)
    • Dropout(正则化层)
    • Flatten(展平)
    • Input(用于实例化 Keras 张量)
    • Reshape(调整输入大小)
    • Permute(置换输入的维度)
    • RepeatVector(将输入重复 n 次)
    • Lambda(将任意表达式封装为 Layer对象)
    • ActivityRegularization(网络层)
    • Masking(使用覆盖值覆盖序列)
    • SpatialDropout1D(Dropout 的 Spatial 1D 版本)
    • SpatialDropout2D(Dropout 的 Spatial 2D 版本)
    • SpatialDropout3D(Dropout 的 Spatial 3D 版本)
  • 参考

Keras.layers

Dense(全连接层)

Syntax:

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)

Dense 实现以下操作: output = activation(dot(input, kernel) + bias) 其中 activation 是按逐个元素计算的激活函数,kernel 是由网络层创建的权值矩阵,以及 bias 是其创建的偏置向量 (只在 use_biasTrue 时才有用)。

Parameters:

  • units: 正整数,输出空间维度。
  • activation: 激活函数 (详见 activations)。 若不指定,则不使用激活函数 (即,「线性」激活: a(x) = x)。
  • use_bias: 布尔值,该层是否使用偏置向量。
  • kernel_initializer: kernel 权值矩阵的初始化器 (详见 initializers)。
  • bias_initializer: 偏置向量的初始化器 (see initializers).
  • kernel_regularizer: 运用到 kernel 权值矩阵的正则化函数 (详见 regularizer)。
  • bias_regularizer: 运用到偏置向的的正则化函数 (详见 regularizer)。
  • activity_regularizer: 运用到层的输出的正则化函数 (它的 "activation")。 (详见 regularizer)。
  • kernel_constraint: 运用到 kernel 权值矩阵的约束函数 (详见 constraints)。
  • bias_constraint: 运用到偏置向量的约束函数 (详见 constraints)。

输入尺寸

nD 张量,尺寸: (batch_size, ..., input_dim)。 最常见的情况是一个尺寸为 (batch_size, input_dim) 的 2D 输入。

输出尺寸

nD 张量,尺寸: (batch_size, ..., units)。 例如,对于尺寸为 (batch_size, input_dim) 的 2D 输入, 输出的尺寸为 (batch_size, units)


Activation(激活函数)

syntax:

keras.layers.Activation(activation)

参数:

  • activation: 要使用的激活函数的名称 (详见: activations), 或者选择一个 Theano 或 TensorFlow 操作。

输入尺寸:

任意尺寸。 当使用此层作为模型中的第一层时, 使用参数 input_shape (整数元组,不包括样本数的轴)。

输出尺寸

与输入相同。


Dropout(正则化层)

keras.layers.Dropout(rate, noise_shape=None, seed=None)

将 Dropout 应用于输入。

Dropout 包括在训练中每次更新时, 将输入单元的按比率随机设置为 0, 这有助于防止过拟合。

参数

  • rate: 在 0 和 1 之间浮动。需要丢弃的输入比例。
  • noise_shape: 1D 整数张量, 表示将与输入相乘的二进制 dropout 掩层的形状。 例如,如果你的输入尺寸为 (batch_size, timesteps, features),然后 你希望 dropout 掩层在所有时间步都是一样的, 你可以使用 noise_shape=(batch_size, 1, features)
  • seed: 一个作为随机种子的 Python 整数。

参考文献


Flatten(展平)

keras.layers.Flatten(data_format=None)

将输入展平。不影响批量大小。

参数

  • data_format:一个字符串,其值为 channels_last(默认值)或者 channels_first。它表明输入的维度的顺序。此参数的目的是当模型从一种数据格式切换到另一种数据格式时保留权重顺序。channels_last 对应着尺寸为 (batch, ..., channels) 的输入,而 channels_first 对应着尺寸为 (batch, channels, ...) 的输入。默认为 image_data_format 的值,你可以在 Keras 的配置文件 ~/.keras/keras.json 中找到它。如果你从未设置过它,那么它将是 channels_last

model = Sequential()
model.add(Conv2D(64, (3, 3),
                 input_shape=(3, 32, 32), padding='same',))
# 现在:model.output_shape == (None, 64, 32, 32)
model.add(Flatten())
# 现在:model.output_shape == (None, 65536)

Input(用于实例化 Keras 张量)

keras.engine.input_layer.Input()


Input() 用于实例化 Keras 张量。

Keras 张量是底层后端(Theano, TensorFlow 或 CNTK) 的张量对象,我们增加了一些特性,使得能够通过了解模型的输入 和输出来构建 Keras 模型。

例如,如果 a, b 和 c 都是 Keras 张量, 那么以下操作是可行的: model = Model(input=[a, b], output=c)

添加的 Keras 属性是: - **_keras_shape: 通过 Keras端的尺寸推理 进行传播的整数尺寸元组。 - _keras_history**: 应用于张量的最后一层。 整个网络层计算图可以递归地从该层中检索。

参数

  • shape: 一个尺寸元组(整数),不包含批量大小。 例如,shape=(32,) 表明期望的输入是按批次的 32 维向量。
  • batch_shape: 一个尺寸元组(整数),包含批量大小。 例如,batch_shape=(10, 32) 表明期望的输入是 10 个 32 维向量。 batch_shape=(None, 32) 表明任意批次大小的 32 维向量。
  • name: 一个可选的层的名称的字符串。 在一个模型中应该是唯一的(不可以重用一个名字两次)。 如未提供,将自动生成。
  • dtype: 输入所期望的数据类型,字符串表示 (float32, float64, int32...)
  • sparse: 一个布尔值,指明需要创建的占位符是否是稀疏的。
  • tensor: 可选的可封装到 Input 层的现有张量。 如果设定了,那么这个层将不会创建占位符张量。

返回

一个张量。

# 这是 Keras 中的一个逻辑回归
x = Input(shape=(32,))
y = Dense(16, activation='softmax')(x)
model = Model(x, y)

Reshape(调整输入大小)

keras.layers.Reshape(target_shape)

将输入重新调整为特定的尺寸。

参数

  • target_shape: 目标尺寸。整数元组。 不包含表示批量的轴。

输入尺寸

任意,尽管输入尺寸中的所有维度必须是固定的。 当使用此层作为模型中的第一层时, 使用参数 input_shape (整数元组,不包括样本数的轴)。

输出尺寸

(batch_size,) + target_shape

# 作为 Sequential 模型的第一层
model = Sequential()
model.add(Reshape((3, 4), input_shape=(12,)))
# 现在:model.output_shape == (None, 3, 4)
# 注意: `None` 是批表示的维度

# 作为 Sequential 模型的中间层
model.add(Reshape((6, 2)))
# 现在: model.output_shape == (None, 6, 2)

# 还支持使用 `-1` 表示维度的尺寸推断
model.add(Reshape((-1, 2, 2)))
# 现在: model.output_shape == (None, 3, 2, 2)

Permute(置换输入的维度)

keras.layers.Permute(dims)

根据给定的模式置换输入的维度。

在某些场景下很有用,例如将 RNN 和 CNN 连接在一起。

model = Sequential()
model.add(Permute((2, 1), input_shape=(10, 64)))
# 现在: model.output_shape == (None, 64, 10)
# 注意: `None` 是批表示的维度

参数

  • dims: 整数元组。置换模式,不包含样本维度。 索引从 1 开始。 例如, (2, 1) 置换输入的第一和第二个维度。

输入尺寸

任意。当使用此层作为模型中的第一层时, 使用参数 input_shape (整数元组,不包括样本数的轴)。

输出尺寸

与输入尺寸相同,但是维度根据指定的模式重新排列。


RepeatVector(将输入重复 n 次)

keras.layers.RepeatVector(n)

model = Sequential()
model.add(Dense(32, input_dim=32))
# 现在: model.output_shape == (None, 32)
# 注意: `None` 是批表示的维度

model.add(RepeatVector(3))
# 现在: model.output_shape == (None, 3, 32)

参数

  • n: 整数,重复次数。

输入尺寸

2D 张量,尺寸为 (num_samples, features)

输出尺寸

3D 张量,尺寸为 (num_samples, n, features)


Lambda(将任意表达式封装为 Layer对象)

keras.layers.Lambda(function, output_shape=None, mask=None, arguments=None)

# 添加一个 x -> x^2 层
model.add(Lambda(lambda x: x ** 2))
# 添加一个网络层,返回输入的正数部分
# 与负数部分的反面的连接

def antirectifier(x):
    x -= K.mean(x, axis=1, keepdims=True)
    x = K.l2_normalize(x, axis=1)
    pos = K.relu(x)
    neg = K.relu(-x)
    return K.concatenate([pos, neg], axis=1)

def antirectifier_output_shape(input_shape):
    shape = list(input_shape)
    assert len(shape) == 2  # only valid for 2D tensors
    shape[-1] *= 2
    return tuple(shape)

model.add(Lambda(antirectifier,
                 output_shape=antirectifier_output_shape))

参数

  • function: 需要封装的函数。 将输入张量作为第一个参数。
  • output_shape: 预期的函数输出尺寸。 只在使用 Theano 时有意义。 可以是元组或者函数。 如果是元组,它只指定第一个维度; 样本维度假设与输入相同: output_shape = (input_shape[0], ) + output_shape 或者,输入是 None 且样本维度也是 Noneoutput_shape = (None, ) + output_shape 如果是函数,它指定整个尺寸为输入尺寸的一个函数: output_shape = f(input_shape)
  • arguments: 可选的需要传递给函数的关键字参数。

输入尺寸

任意。当使用此层作为模型中的第一层时, 使用参数 input_shape (整数元组,不包括样本数的轴)。

输出尺寸

output_shape 参数指定 (或者在使用 TensorFlow 时,自动推理得到)。


ActivityRegularization(网络层)

参数

keras.layers.ActivityRegularization(l1=0.0, l2=0.0)

网络层,对基于代价函数的输入活动应用一个更新

  • l1**: L1 正则化因子 (正数浮点型)。
  • l2: L2 正则化因子 (正数浮点型)。

输入尺寸

任意。当使用此层作为模型中的第一层时, 使用参数 input_shape (整数元组,不包括样本数的轴)。

输出尺寸

与输入相同。


Masking(使用覆盖值覆盖序列)

keras.layers.Masking(mask_value=0.0)

使用覆盖值覆盖序列,以跳过时间步。

对于输入张量的每一个时间步(张量的第一个维度), 如果所有时间步中输入张量的值与 mask_value 相等, 那么这个时间步将在所有下游层被覆盖 (跳过) (只要它们支持覆盖)。

如果任何下游层不支持覆盖但仍然收到此类输入覆盖信息,会引发异常。

考虑将要喂入一个 LSTM 层的 Numpy 矩阵 x, 尺寸为 (samples, timesteps, features)。 你想要覆盖时间步 #3 和 #5,因为你缺乏这几个 时间步的数据。你可以:

  • 设置 x[:, 3, :] = 0. 以及 x[:, 5, :] = 0.
  • 在 LSTM 层之前,插入一个 mask_value=0Masking 层:
model = Sequential()
model.add(Masking(mask_value=0., input_shape=(timesteps, features)))
model.add(LSTM(32))

SpatialDropout1D(Dropout 的 Spatial 1D 版本)

keras.layers.SpatialDropout1D(rate)

此版本的功能与 Dropout 相同,但它会丢弃整个 1D 的特征图而不是丢弃单个元素。如果特征图中相邻的帧是强相关的(通常是靠前的卷积层中的情况),那么常规的 dropout 将无法使激活正则化,且导致有效的学习速率降低。在这种情况下,SpatialDropout1D 将有助于提高特征图之间的独立性,应该使用它来代替 Dropout。

参数

  • rate: 0 到 1 之间的浮点数。需要丢弃的输入比例。

输入尺寸

3D 张量,尺寸为:(samples, timesteps, channels)

输出尺寸

与输入相同。

参考文献


SpatialDropout2D(Dropout 的 Spatial 2D 版本)

keras.layers.SpatialDropout2D(rate, data_format=None)

此版本的功能与 Dropout 相同,但它会丢弃整个 2D 的特征图而不是丢弃单个元素。如果特征图中相邻的像素是强相关的(通常是靠前的卷积层中的情况),那么常规的 dropout 将无法使激活正则化,且导致有效的学习速率降低。在这种情况下,SpatialDropout2D 将有助于提高特征图之间的独立性,应该使用它来代替 dropout。

参数

  • rate: 0 到 1 之间的浮点数。需要丢弃的输入比例。
  • data_formatchannels_first 或者 channels_last。在 channels_first 模式中,通道维度(即深度)位于索引 1,在 channels_last 模式中,通道维度位于索引 3。默认为 image_data_format 的值,你可以在 Keras 的配置文件 ~/.keras/keras.json 中找到它。如果你从未设置过它,那么它将是 channels_last

输入尺寸

4D 张量,如果 data_format=channels_first,尺寸为 (samples, channels, rows, cols),如果 data_format=channels_last,尺寸为 (samples, rows, cols, channels)

输出尺寸

与输入相同。

参考文献


SpatialDropout3D(Dropout 的 Spatial 3D 版本)

keras.layers.SpatialDropout3D(rate, data_format=None)

此版本的功能与 Dropout 相同,但它会丢弃整个 3D 的特征图而不是丢弃单个元素。如果特征图中相邻的体素是强相关的(通常是靠前的卷积层中的情况),那么常规的 dropout 将无法使激活正则化,且导致有效的学习速率降低。在这种情况下,SpatialDropout3D 将有助于提高特征图之间的独立性,应该使用它来代替 dropout。

参数

  • rate: 0 到 1 之间的浮点数。需要丢弃的输入比例。
  • data_formatchannels_first 或者 channels_last。在 channels_first 模式中,通道维度(即深度)位于索引 1,在 channels_last 模式中,通道维度位于索引 4。默认为 image_data_format 的值,你可以在 Keras 的配置文件 ~/.keras/keras.json 中找到它。如果你从未设置过它,那么它将是 channels_last

输入尺寸

5D 张量,如果 data_format=channels_first,尺寸为 (samples, channels, dim1, dim2, dim3),如果 data_format=channels_last,尺寸为 (samples, dim1, dim2, dim3, channels)

输出尺寸

与输入相同。

参考文献

参考

[官方文档]https://keras.io/zh/layers/core/

原文地址:https://www.cnblogs.com/wangjs-jacky/p/11521778.html

时间: 2024-10-12 04:39:05

Keras.layer()的相关文章

Keras Layer 的 call(x) 和 input_shape

今天用Keras编程的时候发现一个问题, ··· input_layer = K.layers.Input(shape=(10,)) x = K.layers.Dense(20)(input_layer) x = K.layers.Dense(20)(x) ··· 以上写法是可行的,但是以下写法却不行 L = K.layers.Dense(20) y = L(input_layer) y = L(y) 前两个表达式正常,到了第3个表达式y=L(y)的时候就报input_shape错误.百思不得其

自定义Keras Layer

Keras的Layer其实就是一个Class, 要具有以下几个方法: (1) build(input_shape): 定义权重的地方, 如果不需要定义权重, 也要有self.built = True; (2) call(x): 编写功能逻辑的地方, 实现Layer的功能逻辑; (3) compute_output_shape(input_shape): 根据input_shape, 计算形状变化的地方, 能够让Keras推断输出的Tensor的Shape. 原文地址:https://www.cn

Keras之函数式(Functional)模型

函数式(Functional)模型 我们起初将Functional一词译作泛型,想要表达该类模型能够表达任意张量映射的含义,但表达的不是很精确,在Keras2里我们将这个词改移为"函数式",函数式模型称作Functional,但它的类名是Model,因此有时候也用Model来代表函数式模型. Keras函数式模型接口是用户定义多输出模型.非循环有向模型或具有共享层的模型等复杂模型的途径.一句话,只要你的模型不是类似VGG一样一条路走到黑的模型,或者你的模型需要多于一个的输出,那么你总应

练习:给Keras ResNet50源码加上正则化参数, 修改激活函数为Elu

最近学习了一下ResNet50模型,用其跑了个Kaggle比赛,并仔细阅读了其Keras实现.在比赛中,我修改了一下源码,加入了正则项,激活函数改为elu, 日后的应用中也可以直接copy 使用之. ResNet50 的结构图网上已经很多了,例如这篇博文:https://blog.csdn.net/nima1994/article/details/82686132. 可以看出,ResNet50是主要分为两个部分,一部分为Plain Network,也就是上图的左侧部分,就是一系列通常的卷积,批量

Keras网络层之“关于Keras的层(Layer)”

关于Keras的"层"(Layer) 所有的Keras层对象都有如下方法: layer.get_weights():返回层的权重(numpy array) layer.set_weights(weights):从numpy array中将权重加载到该层中,要求numpy array的形状与layer.get_weights()的形状相同 layer.get_config():返回当前层配置信息的字典,层也可以借由配置信息重构: layer = Dense(32) config = la

Keras自定义Layer使用说明

自定义 Layer 自定义激活函数 函数形式比较简单的时候可以用lambda函数: clipped_relu = lambda x: K.activations.relu(x, max_value=4000) Layer类 class MLPBlock(Layer): def __init__(self): super(MLPBlock, self).__init__() self.dense_1 = K.layers.Dense(500, kernel_regularizer=regulari

tf.keras遇见的坑:Output tensors to a Model must be the output of a TensorFlow `Layer`

经过网上查找,找到了问题所在:在使用keras编程模式是,中间插入了tf.reshape()方法便遇到此问题. 解决办法:对于遇到相同问题的任何人,可以使用keras的Lambda层来包装张量流操作,这是我所做的: embed1 = keras.layers.Embedding(10000, 32)(inputs) # embed = keras.layers.Reshape(-1,256, 32, 1)(embed1) # embed = tf.reshape(embed1, [-1, 256

keras系列︱seq2seq系列相关实现与案例(feedback、peek、attention类型)

之前在看<Semi-supervised Sequence Learning>这篇文章的时候对seq2seq半监督的方式做文本分类的方式产生了一定兴趣,于是开始简单研究了seq2seq.先来简单说一下这篇paper的内容: 创立的新形式Sequence AutoEncoder LSTM(SA-LSTM),Pre-trained RNNs are more stable, generalize better, and achieve state-of-the-art results on var

keras rnn做加减法

一.背景 学习rnn怎么使用 例子: 输入两个数,做加法 二. 代码赏析 from __future__ import print_function from keras.models import Sequential from keras.engine.training import slice_X from keras.layers import Activation, TimeDistributed, Dense, RepeatVector, recurrent import numpy