我如何复制张量流层?

时间:2018-10-29 03:18:52

标签: python tensorflow

假设我在Tensorflow中有一层(即具有相同名称范围的ops集合)。如何与输入连接一起复制它?

更具体地说,假设我有以下图形:

A --> B --> C --> D

现在我想将C复制为C1,其中C是整个名称范围:

A --> B --> C --> D
        \-> C

如何在TensorFlow中做到这一点?

2 个答案:

答案 0 :(得分:2)

解决方案可以分为两部分。

1。复制该层的图形

这很简单:只需使用您创建该层的相同代码即可。我建议使用Keras而不是原始的TensorFlow-这样可以使您更灵活,更轻松地执行此步骤。

2。复制砝码

这个想法是,您只需要复制tf.Variables,基本上是以下操作的一组:initializerkernelassignHere是一个很好的解释。因此,代码将如下所示:

vars = tf.trainable_variables()  # getting the variables
vars_vals = sess.run(vars)       # getting their weights as numpy arrays
vars_duplicates = ...            # here, get the weights of your layer,
                                 # that should be in the same order
for var, val in zip(vars_duplicates, vars_vals):
    var.load(val, sess)

答案 1 :(得分:0)

可以使用tf.contrib.graph_editor完成此操作。让我们看看如何做到这一点:

import tensorflow.contrib.graph_editor as ge

# Get the SubgraphView of given layer
layer_sgv = ge.make_view_from_scope(layer_name, tf.get_default_graph())

# Retrieve the incoming tensors to the layer from ops outside.
# We need these to preserve input hierarchy while duplicating.
replacement_ts = {}
for op in layer_sgv.inputs:
    replacement_ts[op] = op

# Duplicate the layer
duplicate_sgv, info = ge.copy_with_input_replacements(
    layer_sgv,
    replacement_ts=replacement_ts,
    src_scope=layer_name,
    dst_scope=new_layer_name)

您可以在SubgraphView here上阅读更多内容。