<p>我发现在急切执行中重用变量最简单的方法是简单地传递对同一变量的引用:</p>
<pre><code>import tensorflow as tf
tf.enable_eager_execution()
import numpy as np
class MyLayer(tf.keras.layers.Layer):
def __init__(self):
super(MyLayer, self).__init__()
def build(self, input_shape):
# bias specific for each layer
self.B = self.add_variable('B', [1])
def call(self, input, A):
# some function involving input, common weights, and layer-specific bias
return tf.matmul(input, A) + self.B
class MyModel(tf.keras.Model):
def __init__(self):
super(MyModel, self).__init__()
def build(self, input_shape):
# common vector of weights
self.A = self.add_variable('A', [int(input_shape[-1]), 1])
# layers which will share A
self.layer1 = MyLayer()
self.layer2 = MyLayer()
def call(self, input):
result1 = self.layer1(input, self.A)
result2 = self.layer2(input, self.A)
return result1 + result2
if __name__ == "__main__":
data = np.random.normal(size=(1000, 3))
model = MyModel()
predictions = model(data)
print('\n\n')
model.summary()
print('\n\n')
print([v.name for v in model.trainable_variables])
</code></pre>
<p>输出为:</p>
<p><a href="https://i.stack.imgur.com/5Ueq0.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/5Ueq0.png" alt="enter image description here"/></a></p>
<p>因此,我们有一个维度3的共享权重参数<code>my_model/A</code>,以及维度1的两个偏差参数<code>my_model/my_layer/B</code>和{<cd3>},总共有5个可训练参数。代码是独立运行的,所以可以随意使用它。在</p>