Keras学习笔记3——keras.layers

本文详细介绍了 Keras 中的各类层,包括全连接层、激活层、Dropout层、Flatten层、Reshape层、卷积层、池化层、循环层(如RNN、GRU、LSTM)、高级激活层(如ReLU、Softmax)、标准化层、噪声层以及一些特殊的层封装器和辅助层。通过示例和参数说明,深入理解 Keras 中各个层的功能和用法。
摘要由CSDN通过智能技术生成

参考:
Keras入门简介

>>> import keras
>>> dir(keras.layers)
['Activation', 'ActivityRegularization', 'Add', 'AlphaDropout', 'AtrousConvolution1D', 'AtrousConvolution2D', 'Average', 'AveragePooling1D', 'AveragePooling2D', 'AveragePooling3D', 'AvgPool1D', 'AvgPool2D', 'AvgPool3D', 'BatchNormalization', 'Bidirectional', 'Concatenate', 'Conv1D', 'Conv2D', 'Conv2DTranspose', 'Conv3D', 'Conv3DTranspose', 'ConvLSTM2D', 'ConvLSTM2DCell', 'ConvRecurrent2D', 'Convolution1D', 'Convolution2D', 'Convolution3D', 'Cropping1D', 'Cropping2D', 'Cropping3D', 'CuDNNGRU', 'CuDNNLSTM', 'Deconvolution2D', 'Deconvolution3D', 'Dense', 'DepthwiseConv2D', 'Dot', 'Dropout', 'ELU', 'Embedding', 'Flatten', 'GRU', 'GRUCell', 'GaussianDropout', 'GaussianNoise', 'GlobalAveragePooling1D', 'GlobalAveragePooling2D', 'GlobalAveragePooling3D', 'GlobalAvgPool1D', 'GlobalAvgPool2D', 'GlobalAvgPool3D', 'GlobalMaxPool1D', 'GlobalMaxPool2D', 'GlobalMaxPool3D', 'GlobalMaxPooling1D', 'GlobalMaxPooling2D', 'GlobalMaxPooling3D', 'Highway', 'Input', 'InputLayer', 'InputSpec', 'LSTM', 'LSTMCell', 'Lambda', 'Layer', 'LeakyReLU', 'LocallyConnected1D', 'LocallyConnected2D', 'Masking', 'MaxPool1D', 'MaxPool2D', 'MaxPool3D', 'MaxPooling1D', 'MaxPooling2D', 'MaxPooling3D', 'Maximum', 'MaxoutDense', 'Minimum', 'Multiply', 'PReLU', 'Permute', 'RNN', 'ReLU', 'Recurrent', 'RepeatVector', 'Reshape', 'SeparableConv1D', 'SeparableConv2D', 'SimpleRNN', 'SimpleRNNCell', 'Softmax', 'SpatialDropout1D', 'SpatialDropout2D', 'SpatialDropout3D', 'StackedRNNCells', 'Subtract', 'ThresholdedReLU', 'TimeDistributed', 'UpSampling1D', 'UpSampling2D', 'UpSampling3D', 'ZeroPadding1D', 'ZeroPadding2D', 'ZeroPadding3D', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'absolute_import', 'add', 'advanced_activations', 'average', 'concatenate', 'convolutional', 'convolutional_recurrent', 'core', 'cudnn_recurrent', 'deserialize', 'deserialize_keras_object', 'dot', 'embeddings', 'local', 'maximum', 'merge', 'minimum', 'multiply', 'noise', 'normalization', 'pooling', 'recurrent', 'serialize', 'subtract', 'wrappers']

0. 函数

layer.get_weights(): 以含有Numpy矩阵的列表形式返回层的权重。
layer.set_weights(weights): 从含有Numpy矩阵的列表中设置层的权重(与get_weights的输出形状相同)。
layer.get_config(): 返回包含层配置的字典。此图层可以通过以下方式重置:

from keras import layers
layer = Dense(32)
config = layer.get_config()
reconstructed_layer = Dense.from_config(config)

或:

config = layer.get_config()
layer = layers.deserialize({
   'class_name': layer.__class__.__name__,
                            'config': config})

如果一个层具有单个节点 (i.e. 如果它不是共享层), 你可以得到它的输入张量、输出张量、输入尺寸和输出尺寸:
layer.input
layer.output
layer.input_shape
layer.output_shape

如果层有多个节点,可以使用以下函数:
layer.get_input_at(node_index)
layer.get_output_at(node_index)
layer.get_input_shape_at(node_index)
layer.get_output_shape_at(node_index)

1. 全连接层

output = activation( dot(input, kernel) + bias )

其中,

  • activation 是按逐个元素计算的激活函数,
  • kernel 是由网络层创建的权重矩阵,
  • bias 是其创建的偏置向量 (只在 use_bias 为 True 时才有用)。
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:激活函数,若不指定,则不使用激活函数 (即,「线性」激活: a(x) = x)。
  • use_bias: 布尔值,该层是否使用bias偏置向量。
  • kernel_initializer: kernel 权值矩阵的初始化器。
  • bias_initializer: 偏置向量的初始化器 。
  • kernel_regularizer: 运用到 kernel 权值矩阵的正则化函数。
  • bias_regularizer: 运用到偏置向的的正则化函数。
  • activity_regularizer: 运用到层的输出的正则化函数 (它的 “activation”)。
  • kernel_constraint: 运用到 kernel 权值矩阵的约束函数。
  • bias_constraint: 运用到偏置向量的约束函数。

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

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

2. 激活层

对上一层的输出应用激活函数。

keras.layers.Activation(activation)

参数说明:
activation:想要使用的激活函数,如:’relu’、’tanh’、‘sigmoid’等。

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

输出尺寸:
与输入相同。

3. Dropout层

Dropout 应用于输入。Dropout 包括在训练中每次更新时, 对输入单元随机选取一定比例的失活,不更新,但是权重仍然保留,这有助于防止过拟合。

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

参数说明:

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

4. Flatten层

将一个维度大于或等于3的高维矩阵,“压扁”为一个二维矩阵。即保留第一个维度(如:batch的个数),然后将剩下维度的值相乘作为“压扁”矩阵的第二个维度。将输入展平。不影响批量大小。

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.output_shape == (None, 64, 32, 32)
model.add(Conv2D(64, (3, 3), input_shape=(3, 32, 32), padding='same',))
# 现在:model.output_shape == (None, 65536)
model.add(Flatten())

5. 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)

6. 卷积层

来源
卷积操作分为一维、二维、三维,分别为Conv1D、Conv2D、Conv3D。一维卷积主要应用于以时间序列数据或文本数据,二维卷积通常应用于图像数据。由于这三种的使用和参数都基本相同,所以主要以处理图像数据的Conv2D进行说明。

Conv2D

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
问题:from tensorflow.contrib.layers import l2_regularizer, xavier_initializer ModuleNotFoundError: No module named 'tensorflow.contrib' 回答: 这个问题是因为在TensorFlow 2.0中,tensorflow.contrib模块被移除了。所以无法直接使用from tensorflow.contrib.layers导入l2_regularizer和xavier_initializer。在最新的TensorFlow版本中,你可以使用tf.keras模块中的相应函数来替代。例如,你可以使用tf.keras.regularizers.l2来替代l2_regularizer,使用tf.keras.initializers.glorot_uniform或tf.keras.initializers.glorot_normal来替代xavier_initializer。所以你可以将代码中的import语句修改为以下形式: from tensorflow.keras.regularizers import l2 from tensorflow.keras.initializers import GlorotUniform, GlorotNormal 然后在代码中使用l2()替代l2_regularizer(),使用GlorotUniform()或GlorotNormal()替代xavier_initializer_conv2d()。 这样修改后,你的代码将不再依赖于tensorflow.contrib模块,而是使用了TensorFlow 2.0中的tf.keras模块中的函数。123 #### 引用[.reference_title] - *1* [tensorflow2.0 解决ModuleNotFoundError: No module named ‘tensorflow.contrib](https://blog.csdn.net/weixin_41194171/article/details/107813906)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *2* [tensorflow2.0 解决ModuleNotFoundError: No module named ‘tensorflow.contrib.layers import flatten](https://blog.csdn.net/weixin_41194171/article/details/107814532)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *3* [tensorflow学习笔记二:在tensorflow中,加入l2_regularization](https://blog.csdn.net/sinat_38178263/article/details/82941266)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值