python - 将特定的 TensorFlow 变量恢复到特定层(按名称恢复)

标签 python tensorflow deep-learning

假设我训练了一个 TensorFlow 模型并保存了它,现在有一个不同的模型,我想将保存的模型中的一些权重用于我模型中的一些层(它们具有相同的形状)。

现在,我能够找到如何从模型中保存特定变量(具有特定名称),但我无法找到任何通过名称恢复这些变量的示例。

例如,假设在我保存的模型中我保存了一个名为“v1”的权重张量(具有某种形状)。现在,在我的新模型中,我有一个名为“v2”的权重张量(其形状与“v1”张量相同)。现在我想将保存的“v1”变量加载到我的“v2”权重张量,或者甚至更好地将这个“v1”权重加载到我的新图中的多个张量。

这可能吗?如果可以,我该怎么做?

最佳答案

我找到了解决此问题的解决方法。

您可以做的是将变量值直接保存到您的磁盘中,作为值或作为键作为张量名称和值的字典。 例如:

vars_dict = {}
for tensor in (list_of_tensors_you_want_to_save):
     vars_dict[tensor.name] = sess.run(tensor)

然后您可以将此字典中的任何变量加载到您想要的任何其他变量。

在我的示例中,假设原始张量称为“v1”,我要加载的两个张量是“v2”和“v3”,可以执行以下操作:

tensor_to_load_1 = tf.get_default_graph().get_tensor_by_name("v2")
tensor_to_load_2 = tf.get_default_graph().get_tensor_by_name("v3")

assign_op_1 = tf.assign(tensor_to_load_1, vars_dict["v1"])
assign_op_1 = tf.assign(tensor_to_load_2, vars_dict["v1"])

sess.run([assign_op_1, assign_op_2])

当然,这仅受“v1”、“v2”和“v3”必须具有相同形状这一事实的限制。

使用此示例代码,您可以保存任何变量并将它们加载到您想要的任何其他变量,而无需原始图形与当前图形相匹配。

关于python - 将特定的 TensorFlow 变量恢复到特定层(按名称恢复),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39941323/

相关文章:

python - 变量替换在 Sphinx 中无法正常工作

tensorflow - 如何在 TensorFlow.jl 中实现 SELU?

python - 实例规范化和组规范化缺少更新

machine-learning - 使用基于三元组的训练时 Tensorflow CNN 网络中的 Dropout

python - 如何在自定义 Keras 模型函数中共享层权重

python - 更优雅的方式来实现类似正则表达式的量词

python - 替换 Pandas 列中的值

machine-learning - 每个神经元的神经网络偏差

python - matlab 的 fminsearch 的 numpy/scipy 模拟

python - 在 Tensorflow 中使用 3d 转置卷积时计算 output_shape