为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

明月笑刀无情 2023-12-08 17:11:07
我正在使用tensorflow.keras,想知道是否可以创建内置Keras层的可重用块。例如,我想在模型中的不同位置重复使用同一组层(能够学习不同的权重)。我想在我的模型中的不同时间使用以下块。keep_prob_=0.5input_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 模型中学习不同的权重集。
查看完整描述

1 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

使用此代码(我删除了 SelfAttention,所以将其添加回来):


import tensorflow as tf


class 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 x


model1 = my_model()

model2 = my_model()


查看完整回答
反对 回复 2023-12-08
  • 1 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信