如何在训练运行之间的中间层内的每个时期更新参数? (张量流急切执行)
How to update parameter at each epoch within an intermediate Layer between training runs ? (tensorflow eager execution)
我有一个顺序 keras 模型,并且有一个自定义图层,类似于以下名为 'CounterLayer' 的示例。我正在使用 tensorflow 2.0(急切执行)
class CounterLayer(tf.keras.layers.Layer):
def __init__(self, stateful=False,**kwargs):
self.stateful = stateful
super(CounterLayer, self).__init__(**kwargs)
def build(self, input_shape):
self.count = tf.keras.backend.variable(0, name="count")
super(CounterLayer, self).build(input_shape)
def call(self, input):
updates = []
updates.append((self.count, self.count+1))
self.add_update(updates)
tf.print('-------------')
tf.print(self.count)
return input
当我 运行 例如 epoch=5 之类的时候,self.count
的值不会随每个 运行 更新。它总是保持不变。我从 这里得到了这个例子。我需要与此几乎相似的东西,但我想知道这是否适用于 tensorflow 的急切执行,或者我必须做什么才能获得预期的输出。
我已经尝试实现这个很长一段时间了,但无法弄清楚。有人可以帮帮我吗?谢谢...
是的,我的问题已解决。我遇到了一些更新此类变量的内置方法(这是为了在两个时期之间保持持久状态,就像我上面提到的案例一样)。
基本上我需要做的是例如:
def build(self, input_shape):
self.count = tf.Variable(0, dtype=tf.float32, trainable=False)
super(CounterLayer, self).build(input_shape)
def call(self, input):
............
self.count.assign_add(1)
............
return input
可以在call
函数中计算更新后的值,也可以调用self.count.assign(some_updated_value)
赋值。 https://www.tensorflow.org/api_docs/python/tf/Variable 中提供了此类操作的详细信息。谢谢
我有一个顺序 keras 模型,并且有一个自定义图层,类似于以下名为 'CounterLayer' 的示例。我正在使用 tensorflow 2.0(急切执行)
class CounterLayer(tf.keras.layers.Layer):
def __init__(self, stateful=False,**kwargs):
self.stateful = stateful
super(CounterLayer, self).__init__(**kwargs)
def build(self, input_shape):
self.count = tf.keras.backend.variable(0, name="count")
super(CounterLayer, self).build(input_shape)
def call(self, input):
updates = []
updates.append((self.count, self.count+1))
self.add_update(updates)
tf.print('-------------')
tf.print(self.count)
return input
当我 运行 例如 epoch=5 之类的时候,self.count
的值不会随每个 运行 更新。它总是保持不变。我从
我已经尝试实现这个很长一段时间了,但无法弄清楚。有人可以帮帮我吗?谢谢...
是的,我的问题已解决。我遇到了一些更新此类变量的内置方法(这是为了在两个时期之间保持持久状态,就像我上面提到的案例一样)。 基本上我需要做的是例如:
def build(self, input_shape):
self.count = tf.Variable(0, dtype=tf.float32, trainable=False)
super(CounterLayer, self).build(input_shape)
def call(self, input):
............
self.count.assign_add(1)
............
return input
可以在call
函数中计算更新后的值,也可以调用self.count.assign(some_updated_value)
赋值。 https://www.tensorflow.org/api_docs/python/tf/Variable 中提供了此类操作的详细信息。谢谢