假设我在Tensorflow中有一层(即具有相同名称范围的ops集合)。如何与输入连接一起复制它?
更具体地说,假设我有以下图形:
A --> B --> C --> D
现在我想将C
复制为C1
,其中C
是整个名称范围:
A --> B --> C --> D
\-> C
如何在TensorFlow中做到这一点?
答案 0 :(得分:2)
解决方案可以分为两部分。
这很简单:只需使用您创建该层的相同代码即可。我建议使用Keras而不是原始的TensorFlow-这样可以使您更灵活,更轻松地执行此步骤。
这个想法是,您只需要复制tf.Variables
,基本上是以下操作的一组:initializer
,kernel
和assign
。 Here是一个很好的解释。因此,代码将如下所示:
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上阅读更多内容。