我试图实施论文"学习分割所有内容"我需要使用权重传递函数的输出来设置分割网络中图层的权重。
使用Keras中的layer.output获取的权重转移中最后一层的输出类型为' tensorflow.python.framework.ops.Tensor'而权重应该初始化为一个numpy数组。知道如何设置权重吗?
答案 0 :(得分:0)
权重通常存储在变量中。 tf.assign
操作可用于将值(表示为张量)分配给变量。您可以在session tests中看到使用tf.assign的一些基本示例。它的名称为state_ops.assign()
。
请注意,与其他tensorflow操作一样,它不会立即更新变量的值(除非您使用的是急切执行)。它返回一个张量,在评估时(例如通过session.run()
),将更新变量。
从你的问题来看,我怀疑你可能不会100%清楚张量流计算模型。 Tensor
类型是某些值的符号表示,仅在实际运行计算时生成(通过session.run()
)。你无法真正谈论"将Tensor转换为numpy数组"因为你无法真正转换操作结果foo"到混凝土浮子。你必须运行计算来计算操作结果foo"知道具体的数字。 tf.assign
在这个象征性的空间中起作用。当你使用它时,你会说,"无论这个张量的值(某个层的输出)是什么,当我运行计算时,将它分配给这个变量"。
答案 1 :(得分:0)
从我从本文中得到的结果来看,权重应该连接到此转换层的输出,比方说它是X。因此,您想要的不是创建“权重”,而是使用tf使用此输出X初始化权重。分配或任何其他方法,因为这将不会可区分。您想要的是直接连接将输出X直接用作其他图形中的权重。
问题是您无法通过Keras图层甚至tf.layers进行此操作,因为此高级api不允许您控制此操作,因为一旦在tf.layers或keras中创建图层,它就会创建拥有自己的权重,而您不希望这样做,您想将此输出X用作权重而不创建新的权重。因此,您可以轻松地重新实现自己想要的任何层,并直接在该层中使用X作为权重,这样梯度就可以流回该X。