我们如何创建一个可重用的块,在单个模型中共享架构,但在 Keras 的单个模型中学习不同的权重集?

我正在使用tensorflow.keras,想知道是否可以创建内置Keras层的可重用块。例如,我想在模型中的不同位置重复使用同一组层(能够学习不同的权重)。我想在我的模型中的不同时间使用以下块。


keep_prob_=0.5

input_features=Input(shape=(29, 1664))

Imortant_features= SelfAttention(activation='tanh',

      kernel_regularizer=tf.keras.regularizers.l2(0.), kernel_initializer='glorot_uniform' 

     (input_features)


drop3=tf.keras.layers.Dropout(keep_prob_)(Imortant_features)

Layer_norm_feat=tf.keras.layers.Add()([input_features, drop3])

Layer_norm=tf.keras.layers.LayerNormalization(axis=-1)(Layer_norm_feat)

ff_out=tf.keras.layers.Dense(Layer_norm.shape[2], activation='relu')(Layer_norm)

ff_out=tf.keras.layers.Dense(Layer_norm.shape[2])(ff_out)

drop4=tf.keras.layers.Dropout(keep_prob_)(ff_out)

Layer_norm_input=tf.keras.layers.Add()([Layer_norm, drop4])

Attention_block_out=tf.keras.layers.LayerNormalization(axis=-1)(Layer_norm_input)

intraEpoch_att_block=tf.keras.Model(inputs=input_features, outputs=Attention_block_out)

我已经阅读过有关在 Keras 中创建自定义层的内容,但我发现文档不够清晰。我想重用该子模型,它能够在 tensorflow.keras 中的单个功能 API 模型中学习不同的权重集。


明月笑刀无情
浏览 97回答 1
1回答

一只名叫tom的猫

使用此代码(我删除了 SelfAttention,所以将其添加回来):import tensorflow as tfclass my_model(tf.keras.layers.Layer):  def __init__(self):    super(my_model, self).__init__()    keep_prob_=0.5    input_features=tf.keras.layers.Input(shape=(29, 1664))    drop3=tf.keras.layers.Dropout(keep_prob_)(input_features)    Layer_norm_feat=tf.keras.layers.Add()([input_features, drop3])    Layer_norm=tf.keras.layers.LayerNormalization(axis=-1)(Layer_norm_feat)    ff_out=tf.keras.layers.Dense(Layer_norm.shape[2], activation='relu')(Layer_norm)    ff_out=tf.keras.layers.Dense(Layer_norm.shape[2])(ff_out)    drop4=tf.keras.layers.Dropout(keep_prob_)(ff_out)    Layer_norm_input=tf.keras.layers.Add()([Layer_norm, drop4])    Attention_block_out=tf.keras.layers.LayerNormalization(axis=-1)(Layer_norm_input)    self.intraEpoch_att_block=tf.keras.Model(inputs=input_features, outputs=Attention_block_out)      def call(self, inp, training=False):    x = self.intraEpoch_att_block(inp)    return xmodel1 = my_model()model2 = my_model()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python