【问题标题】:How can you force weights of different layers to be equal in Keras?如何在 Keras 中强制不同层的权重相等?
【发布时间】:2018-02-23 15:04:01
【问题描述】:

有没有办法在 Keras 中训练模型时强制不同层的权重相等? 更清楚地说,如果我有一个像这样的 5 层模型:

inputlayer = Dense(units=40, activation='relu', input_dim=20)
hidden1 = Dense(units=40, activation='relu')(inputlayer)
hidden2 = Dense(units=5,activation='relu')(hidden1)
hidden3 = Dense(units=40,activation='relu')(hidden2)
hidden4 = Dense(unites=40,activation='relu')(hidden3)
outputlayer = Dense(units=20,activation='relu')(hidden4)

我希望输入层和输出层的权重相同,对于 hidden1 和 hidden4 以及 hidden2 和 hidden3 也是如此。我意识到它们的尺寸是不同的,即输入层是(20,40)而输出层是(40,20),所以我需要一种方法来实例化这些层,以便它们的权重被绑定但也被转置。我怎样才能做到这一点?谢谢

【问题讨论】:

  • Matias 的回答解决了这个问题。但想知道为什么你会想要这样做?使用多层网络的目的是学习不同级别的抽象/表示。通过固定层的权重,我认为它不会比单层更好。
  • 我想这样做的原因是我正在构建一个模型,我希望输入和输出层的权重绑定,而 2 个外部隐藏层的权重绑定。尺寸不会相同,但可能会转置。例如,输入层可能有 input_dim = 20 和 80 个节点,而输出层有输出 dim=20 和 80 个节点。在这种情况下是否可以捆绑他们的权重?
  • 我将编辑我的问题,以更清楚地说明我想做什么。

标签: python tensorflow keras


【解决方案1】:

这对于函数式 API 来说非常简单,您只需要做:

layer = Dense(units=40, activation='relu', name="one")
n1 = layer(someInput)
n2 = layer(someOtherInput)

您创建一个图层实例,然后给它两个不同的输入。当您两次调用该层时,两个实例具有相同的权重。

【讨论】:

  • 谢谢。我正在尝试制作一个有 5 层的模型。我希望输入和输出层的权重绑定,并且 2 个外部隐藏层的权重绑定。我怎样才能用你提供的代码做到这一点?
  • 假设我想创建 两个 层,其中一层中的权重是另一层中权重的转置。我怎么能这样做?
猜你喜欢
  • 1970-01-01
  • 2017-12-25
  • 1970-01-01
  • 2017-03-22
  • 2019-04-18
  • 2017-09-28
  • 2019-08-21
  • 1970-01-01
  • 2019-06-18
相关资源
最近更新 更多