Keras--核心网络层

Keras的核心网络层有Dense、Activation、Dropout、Flatten、Input、Reshape、Permute、RepeatVector、Lambda、ActivityRegularization,Masking。


Dense
就是普通的全连接层。

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)的操作。

# 作为 Sequential 模型的第一层
model = Sequential()
model.add(Dense(32, input_shape=(16,)))
# 现在模型就会以尺寸为 (*, 16) 的数组作为输入,
# 其输出数组的尺寸为 (*, 32)

# 在第一层之后,就不再需要指定输入的尺寸了:
model.add(Dense(32))

如果不指定激活函数,则就不使用激活函数。
activity_regularizer: 运用到层的输出的正则化函数 。
Activation
将激活函数应用于输出。输入尺寸和输出尺寸相同。

keras.layers.Activation(activation)

Dropout
将 Dropout 应用于输入。

#rate: 在 0 和 1 之间浮动。需要丢弃的输入比例。
keras.layers.Dropout(rate, noise_shape=None, seed=None)

如,输入尺寸为(batch_size, timesteps, features),希望 dropout 掩层在所有时间步都是一样的, 可以使用 noise_shape=(batch_size, 1, features)。
Flatten
将输入展平。不影响批量大小。

keras.layers.Flatten()
# border_mode='same'就是padding = 'same'
model = Sequential()
model.add(Conv2D(64, 3, 3,
                 border_mode='same',
                 input_shape=(3, 32, 32)))
# 现在:model.output_shape == (None, 64, 32, 32)

model.add(Flatten())
# 现在:model.output_shape == (None, 65536)

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

keras.engine.topology.Input()

batch_shape=(None, 32) 表明任意批次大小的 32 维向量。
Reshape
将输入重新调整为特定的尺寸。

# 目标尺寸是整数tuple
keras.layers.Reshape(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` 是批表示的维度

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)

也就是说,输入尺寸时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))

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

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

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

keras.layers.Masking(mask_value=0.0)

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

# 设置 x[:, 3, :] = 0. 以及 x[:, 5, :] = 0.
# 在 LSTM 层之前,插入一个 mask_value=0 的 Masking 层:
model = Sequential()
model.add(Masking(mask_value=0., input_shape=(timesteps, features)))
model.add(LSTM(32))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值