小编cpa*_*del的帖子

Tensorflow Keras 从回调中修改模型变量

我试图从每个时代开始时的回调中修改不可训练的模型变量。本质上,我希望有一种类似于学习率调度程序(在 TF 中内置基础设施)但适用于任意模型变量的机制。下面的代码是展示该概念的最小示例。我正在尝试修改衰减变量,但它不起作用。显然,变量 (1.0) 的初始值被视为常量并被图形折叠,并且在训练进行时不再查看,即使该变量似乎被回调正确修改(至 0.5)。

dense1 = tf.keras.layers.Dense(10)
decay = tf.Variable(1.0, trainable=False)
dense2 = tf.keras.layers.Dense(10)

def epoch_callback(epoch):
    nonlocal decay
    tf.keras.backend.set_value(decay, 0.5)
    #decay.assign(0.5)
    print(tf.keras.backend.get_value(decay))

input = tf.keras.layers.Input((MAX_LENGTH,))
x = dense1(input)

with tf.control_dependencies([decay]):
    x = x * decay

prediction = dense2(x)

model = tf.keras.Model(inputs=[input], outputs=[prediction])
model.compile(optimizer=tf.keras.optimizers.Adam(), loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True))

callbacks = [tf.keras.callbacks.LambdaCallback(on_epoch_begin = lambda epoch, logs: epoch_callback(epoch))]

model.fit(train_ds, epochs=EPOCHS, verbose=1, callbacks=callbacks, validation_data=eval_ds)
Run Code Online (Sandbox Code Playgroud)

@nbro:给你。下面的代码对我有用。我使用教师强制协议,并且随着训练的进行,每个时期的衰减变量用于“降低教师的声音”。

class Teacher(tf.keras.layers.Layer):
    def __init__(self, embedding, name='teacher', **kwargs):
        super().__init__(name=name, **kwargs)
        ...

    def build(self, input_shape):
        ...

    def call(self, inputs, training=None): …
Run Code Online (Sandbox Code Playgroud)

python machine-learning keras tensorflow tensorflow2.0

5
推荐指数
0
解决办法
1059
查看次数