在tensorflow / keras [close]中从另一个层的输出初始化图层的权重

问题描述 投票:0回答:2

我正在尝试实现“学习分割一切”的论文,我需要使用权重传递函数的输出来设置分割网络中图层的权重。

使用Keras中的layer.output获取的权重转移中的最后一层的输出是'tensorflow.python.framework.ops.Tensor'类型,而权重应该初始化为numpy数组。知道如何设置重量吗?

tensorflow keras weight
2个回答
0
投票

权重通常存储在变量中。 tf.assign操作可用于将值(表示为张量)分配给变量。您可以在session tests中看到使用tf.assign的一些基本示例。它的名字有state_ops.assign()

请注意,与其他tensorflow操作一样,它不会立即更新变量的值(除非您使用的是急切执行)。它返回一个张量,当评估时(例如通过session.run()),将更新变量。

从你的问题,我怀疑你可能不是100%清楚张量流计算模型。 Tensor类型是某些值的符号表示,仅在计算实际运行时生成(通过session.run())。您无法真正谈论“将Tensor转换为numpy数组”,因为您无法将“操作结果foo”转换为具体的浮点数。您必须运行计算来计算“操作结果foo”才能知道具体数字。 tf.assign在这个象征性的空间工作。在使用它时,你会说,“当我运行计算时,无论这个张量的值(某层的输出)是什么,都将它分配给这个变量”。


0
投票

从我从纸上得到的,权重应该连接到这个变换层的输出,让我们说它是X.所以你想要的不是创建“权重”然后使用tf.assign或任何来使用此输出X初始化权重其他方法,因为这是不可区分的。,你想要的是直接连接输出X作为另一个图形中的权重。

事情是你不能通过Keras层甚至tf.layers来做到这一点,因为这个高级api不允许你控制它,因为只要你在tf.layers或keras中创建一个层就会创建它自己的权重和如果您不希望这样,您希望将此输出X用作不创建新权重的权重。因此,您可以轻松地重新实现您想要的任何层,并直接使用X作为此层中的权重,这将允许渐变通过此X流回。

© www.soinside.com 2019 - 2024. All rights reserved.