tensorflow2 自定义层 作者:马育民 • 2020-05-26 23:21 • 阅读:10056 # 介绍 有时需要自定义网络层,实现自己想要的功能 官方网址: https://www.tensorflow.org/tutorials/customization/custom_layers?hl=zh_cn keras网址: https://keras-cn.readthedocs.io/en/latest/layers/writting_layer/ 更多注意事项参见: https://zhuanlan.zhihu.com/p/86886620 # 方法 ### \_\_init\_\_ 初始化 ### build() ``` build(input_shape) ``` 这是定义权重的方法,可训练的权应该在这里被加入列表`self.trainable_weights`中。其他的属性还包括self.non_trainabe_weights(列表)和self.updates(需要更新的形如(tensor, new_tensor)的tuple的列表)。你可以参考BatchNormalization层的实现来学习如何使用上面两个属性。这个方法必须设置self.built = True,可通过调用super([layer],self).build()实现 ### call() ``` call(x) ``` 这是定义层功能的方法,除非你希望你写的层支持masking,否则你只需要关心call的第一个参数:输入张量 # 例子 ``` class MyDenseLayer(tf.keras.layers.Layer): def __init__(self, num_outputs): super(MyDenseLayer, self).__init__() self.num_outputs = num_outputs def build(self, input_shape): self.kernel = self.add_weight("kernel", shape=[int(input_shape[-1]), self.num_outputs]) def call(self, input): return tf.matmul(input, self.kernel) layer = MyDenseLayer(10) ``` 原文出处:http://malaoshi.top/show_1EF5awmodfdN.html