如何 运行 在 tensorflow 2.0 中使用预制的密集层进行训练?
How to run training with pre-made dense layers in tensorflow 2.0?
我正在重写与 TF 2.0 兼容的代码。不幸的是,该网站提供的几乎每个示例都使用 keras API。但是,我想用原始张量流函数编写代码。
在某些时候,在训练过程中计算和应用梯度的新方法看起来像这样(代码从 here 窃取):
# Optimization process.
def run_optimization(x, y):
# Wrap computation inside a GradientTape for automatic differentiation.
with tf.GradientTape() as g:
pred = logistic_regression(x)
loss = cross_entropy(pred, y)
# Compute gradients.
gradients = g.gradient(loss, [W, b])
# Update W and b following gradients.
optimizer.apply_gradients(zip(gradients, [W, b]))
这里出现问题的原因是我必须指定可训练变量。在这种特殊情况下,这很容易,因为 W 和 b 是手动创建的。通过使用 model.trainable_variables
.
使用 keras 模型时也很容易
在我的模型中,我使用了 tensorflow 提供的密集层,例如tf.keras.layers.Dense
。在 tensorflow 1.x 中为这个用例提供的函数是 tf.trainable_variables()
,但它不再存在了。
如何访问它们的内部权重以将它们传递给 GradientTape?
所有 Keras 层都有一个 属性 trainable_variables
,您可以使用它来访问它们。还有 trainable_weights
但在大多数情况下两者是相同的。请注意,在构建图层之前,这实际上是一个空列表,您可以通过调用 layer.build(input_shape)
来完成。或者,将在第一次对输入调用时构建一个层。
您在 Keras 中有一个 tf.trainable_variables()
的等价物,即 tf.keras.layers.Layer.trainable_variables
。
Here是关于如何在Keras模型中使用渐变带的更真实的例子。
我正在重写与 TF 2.0 兼容的代码。不幸的是,该网站提供的几乎每个示例都使用 keras API。但是,我想用原始张量流函数编写代码。
在某些时候,在训练过程中计算和应用梯度的新方法看起来像这样(代码从 here 窃取):
# Optimization process.
def run_optimization(x, y):
# Wrap computation inside a GradientTape for automatic differentiation.
with tf.GradientTape() as g:
pred = logistic_regression(x)
loss = cross_entropy(pred, y)
# Compute gradients.
gradients = g.gradient(loss, [W, b])
# Update W and b following gradients.
optimizer.apply_gradients(zip(gradients, [W, b]))
这里出现问题的原因是我必须指定可训练变量。在这种特殊情况下,这很容易,因为 W 和 b 是手动创建的。通过使用 model.trainable_variables
.
在我的模型中,我使用了 tensorflow 提供的密集层,例如tf.keras.layers.Dense
。在 tensorflow 1.x 中为这个用例提供的函数是 tf.trainable_variables()
,但它不再存在了。
如何访问它们的内部权重以将它们传递给 GradientTape?
所有 Keras 层都有一个 属性 trainable_variables
,您可以使用它来访问它们。还有 trainable_weights
但在大多数情况下两者是相同的。请注意,在构建图层之前,这实际上是一个空列表,您可以通过调用 layer.build(input_shape)
来完成。或者,将在第一次对输入调用时构建一个层。
您在 Keras 中有一个 tf.trainable_variables()
的等价物,即 tf.keras.layers.Layer.trainable_variables
。
Here是关于如何在Keras模型中使用渐变带的更真实的例子。