文档说:
此外,为参考类型的张量定义了具有_ref后缀的这些类型的变体.
这到底是什么意思?什么是参考类型的张量,它们与标准张量有何不同?
如何导入冻结的protobuf,以便对其进行重新训练?
我在网上找到的所有方法都需要检查点。有没有办法读取protobuf,以便将内核常数和偏差常数转换为变量?
编辑1:这类似于以下问题:如何在图(.pb)中重新训练模型?
我查看了DeepSpeech,该问题的答案中建议使用它。他们似乎有删除的支持的initialize_from_frozen_model。我找不到原因。
编辑2:我尝试创建一个新的GraphDef对象,在其中我用变量替换了内核和偏差:
probable_variables = [...] # kernels and biases of Conv2D and MatMul
new_graph_def = tf.GraphDef()
with tf.Session(graph=graph) as sess:
for n in sess.graph_def.node:
if n.name in probable_variables:
# create variable op
nn = new_graph_def.node.add()
nn.name = n.name
nn.op = 'VariableV2'
nn.attr['dtype'].CopyFrom(attr_value_pb2.AttrValue(type=dtype))
nn.attr['shape'].CopyFrom(attr_value_pb2.AttrValue(shape=shape))
else:
nn = new_model.node.add()
nn.CopyFrom(n)
Run Code Online (Sandbox Code Playgroud)
不知道我走的路是否正确。不知道如何设置trainable=True的NodeDef对象。
我有这样的功能可以构建网络。
def build_network(inputs):
# Some arbitrary set of variables and ops here. For example...
out = tf.contrib.layers.fully_connected(inputs, 123)
(...)
return out
Run Code Online (Sandbox Code Playgroud)
然后,我用它来建立这样的网络。
inputs = tf.placeholder(...)
outputs = build_network(inputs)
Run Code Online (Sandbox Code Playgroud)
如果我想构建更多具有相同结构但有独立变量的网络,我只需要在其他变量范围以及可选的其他输入下再次调用build_network即可。
我的问题是:如果此build_network不再可用,但原始网络的输入和输出可用,该怎么办?换句话说:如何将整个子图从输出一直克隆到另一个具有自己独立变量集但结构相同的变量作用域中的输入?
我的理解是,一般来说tf.contrib.graph_editor尤其是graph_editor.copy正是我要做这些事情所需的工具。但是,我找不到使用它们的任何好例子。有什么建议么?
有没有办法找到给定操作(通常是损失)所依赖的所有变量?我想使用它然后将此集合传递给optimizer.minimize()或tf.gradients()使用各种set().intersection()组合。
到目前为止,我已经找到op.op.inputs并尝试了一个简单的 BFS,但我从来没有遇到Variable过tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES)或返回的对象slim.get_variables()
相应的“Tensor.op._id andVariables.op._id”字段之间似乎确实存在对应关系,但我不确定这是我应该依赖的东西。
或者,也许我一开始就不应该这样做?我当然可以在构建图形时精心构建不相交的变量集,但是如果我更改模型,很容易遗漏一些东西。
tensorflow ×4