【问题标题】:Does tensorflow2.0 still have parameter 'trainable'?tensorflow2.0 是否还有参数“可训练”?
【发布时间】:2019-08-26 14:44:45
【问题描述】:

在 tensorboard 中,我找不到像 tensorflow1.X 一样更新参数的梯度操作。

并且在 keras api 中找不到参数“可训练”。

如果 tf2.0 仍然有渐变操作可以显示在张量板上,我如何将它添加到我的张量板上。

ps.my tensorflow 版本是 2.0-rc0。

这是我向张量板文件添加内容的代码。

logdir = "testlogs"
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=logdir)
.....
model.fit(x=train_x, y=train_y,
      batch_size=256,
      epochs=6,
      shuffle=True,
      callbacks=[tensorboard_callback])

【问题讨论】:

  • 在下面发布的答案是您问题的可训练变量元素。我不确定我是否很清楚您希望在张量板上看到什么(标量/直方图选项卡中的渐变 ?图形选项卡中的渐变 操作 ?) 与缺少的东西相比?
  • 很抱歉我的问题令人困惑。在 tf1.x 中,如果我设置 trainable=True,将显示一个名为“GradientDescent”的小操作,因此我可以看到哪些权重和偏差将更新。但在 tf2 中,我在 tensorboard 中找不到它。如果我可以上传图片,我想我可以让它更容易理解。但我不知道如何在 cmets 中添加图片。

标签: python tensorflow tensorboard tensorflow2.0


【解决方案1】:

tensorflow2.0还有参数'trainable'吗?

在 keras 中,确定哪些变量是可训练的是构成 model 的层的责任。开箱即用的层数不胜数,但这里是一个简单的密集层实现,以说明一些可训练变量的使用


class MyLayer(tf.keras.layers.Layer):
  def __init__(self, units=8, input_dim=8):
    super(MyLayer,self).__init__()
    self.w = tf.Variable(initial_value=tf.random_normal_initializer()(shape=(input_dim, units)),
                              trainable=True)
    self.b = tf.Variable(initial_value=tf.zeros_initializer()(shape=(units,)),
                           trainable=True)

  def call(self, inputs):
    return tf.matmul(inputs, self.w) + self.b


例如,您可以在这样的 keras 模型中使用它:

my_layer = MyLayer(units=8,input_dim=2)
my_model = tf.keras.models.Sequential([
    my_layer
])
my_model.compile(optimizer=tf.keras.optimizers.Adam(), loss=tf.keras.losses.binary_crossentropy)

当然最好在实践中使用开箱即用的tf.keras.layers.Dense,这只是为了说明可训练变量my_layer.w & my_layer.b

【讨论】:

    猜你喜欢
    • 2019-09-27
    • 2023-03-20
    • 1970-01-01
    • 2016-09-16
    • 2017-12-20
    • 2021-01-20
    • 2022-01-25
    • 1970-01-01
    • 2018-04-28
    相关资源
    最近更新 更多