畅游人工智能之海--Keras教程之核心网络层(二)

畅游人工智能之海--Keras教程之核心网络层(二)

RepeatVector

  • keras.layers.RepeatVector(n)

  • 将该层的输入重复n次

  • 将二维的输入变成三维的,形式化的表述就是\((None,features) -> (None,n,features)\)

1
2
3
model = Sequential()
model.add(Dense(32, input_dim=32)) # model.output_shape == (None, 32)
model.add(RepeatVector(3)) # model.output_shape == (None, 3, 32)

Lambda

  • keras.layers.Lambda(function, output_shape=None, mask=None, arguments=None)
  • 将一个表达式包装为layer对象
1
model.add(Lambda(lambda x: x ** 2)) # 添加了一个层,将所有的x变成x^2
  • 常用的参数就是前两个,第一个指定要对输入进行什么样的操作,第二个对输出的shape进行检查

  • 可以支持任何类型的输入,但是如果是model的第一层需要指定input_shape

ActivityRegularization

  • L1和L2正则化能够有效地避免过拟合,keras将这两个正则化封装在了这个层中(ps:关于两个正则化,可以到 https://www.jianshu.com/p/c9bb6f89cfcc 这个博客学习)
  • keras.layers.ActivityRegularization(l1=0.0, l2=0.0)
  • 该层的输入输出的维度相同,因为正则化不影响维度

Masking

  • 将训练数据中的某些值跳过

  • 一个官方给出的例子是:

    • 考虑一组将要传给LSTM的数据 (samples, timesteps, features)
    • set x[0, 3, :] = 0. and x[2, 5, :] = 0.
    • 并将这个 mask_value=0.Masking层插入到LSTM之前
1
2
3
model = Sequential()
model.add(Masking(mask_value=0., input_shape=(timesteps, features))) # 作为第一层需要指定input_shape
model.add(LSTM(32)) # 第0个样本在第三个时间步会被跳过,第二个同理

SpatialDropout1(2)(3)D

  • 原理与dropout相同
  • 官方给出的解释是,在此版本中,三个layer的作用与dropout相同,都是以一定的概率保持连接