keras 自定义层 2

31 篇文章 0 订阅
  • 本质就是矩阵相乘 Amn *Bnp
  • 这里会提取输入矩阵最后一层的dim 比如说是Amn的n
import keras 
import tensorflow as tf
class Linear(keras.layers.Layer):
    def __init__(self, units=32):
        super(Linear, self).__init__()
        self.units = units

    def build(self, input_shape):
        
        print(input_shape)
        self.w = self.add_weight(
            
            #本质就是矩阵相乘 Amn *Bnp 
            #这里会提取输入矩阵最后一层的dim 比如说是Amn的n
            shape=(input_shape[-1], self.units),
            initializer="random_normal",
            trainable=True,
        )
        self.b = self.add_weight(
            shape=(self.units,), initializer="random_normal", trainable=True
        )
        # super().build(input_shape)

    def call(self, inputs):
        
        # print(self.input_shape(inputs))
        return tf.matmul(inputs, self.w) + self.b
x = tf.ones((2, 2))
linear_layer = Linear(6)
y = linear_layer(x)
print(y)

(2, 2)
tf.Tensor(
[[-0.0910622  -0.04033005 -0.0540841  -0.06019955  0.05445318  0.07133652]
 [-0.0910622  -0.04033005 -0.0540841  -0.06019955  0.05445318  0.07133652]], shape=(2, 6), dtype=float32)
Keras 是一个高度模块化的深度学习框架,提供了各种预定义的类型,如全连接、卷积、池化等等。然而,在某些情况下,您可能需要自定义一些来实现您所需的特定功能。在 Keras ,您可以通过继承 keras.layers.Layer 类来自定义。 以下是一个简单的例子,展示如何使用 Keras 自定义类: ```python import tensorflow as tf from tensorflow import keras class MyLayer(keras.layers.Layer): def __init__(self, output_dim, **kwargs): self.output_dim = output_dim super(MyLayer, self).__init__(**kwargs) def build(self, input_shape): self.kernel = self.add_weight(name='kernel', shape=(input_shape[1], self.output_dim), initializer='uniform', trainable=True) super(MyLayer, self).build(input_shape) def call(self, inputs): return tf.matmul(inputs, self.kernel) def compute_output_shape(self, input_shape): return (input_shape[0], self.output_dim) ``` 在上面的代码,我们定义了一个名为 MyLayer自定义类。该包含一个内部实现,用于将输入张量与内部权重矩阵相乘,以产生输出张量。在这个例子,我们使用了 TensorFlow 的 matmul 函数来实现这个操作。 我们还实现了两个必需的方法:build 和 compute_output_shape。build 方法用于初始化内部权重,并将它们添加到。compute_output_shape 方法用于确定输出张量的形状。 要使用自定义,您可以像使用任何其他一样使用它。例如: ```python model = keras.Sequential([ MyLayer(10, input_shape=(784,)), keras.layers.Activation('softmax'), ]) ``` 在上面的代码,我们创建了一个顺序模型,并将 MyLayer 作为第一添加到模型。然后,我们添加了一个 softmax 激活,以便产生最终输出。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值