【问题标题】:How to add new nodes / neurons dynamically in tensorflow如何在张量流中动态添加新节点/神经元
【发布时间】:2017-08-22 21:05:23
【问题描述】:

如果我想在我的 tensorflow 层中动态添加新节点,我该怎么做?

例如,如果我想在模型训练一段时间后将隐藏节点的数量从 10 个更改为 11 个。另外,假设我知道我希望进出这个节点/神经元的权重是什么值。

我可以创建一个全新的图表,但有没有不同/更好的方法?

【问题讨论】:

  • 为什么要即时添加?
  • 您可以尝试使用动态 TensorArrays,ta.stack() 将它们变成张量,然后使用 matmul 激活。我不确定这是否可行——您需要 tensorflow 将值视为变量并在优化步骤期间更新它们,这可能不可能或很难实现(至少我不知道如何实现) .
  • @ShreyashSSarnayak 我想使用我正在制作的算法制作一个随时间增长的神经网络

标签: python machine-learning tensorflow neural-network artificial-intelligence


【解决方案1】:

假设res 是考虑到有 10 个隐藏层的输出,我们将第 10 个隐藏层称为layer10。所以你要做的是

res = f(layer10)

其中f 是在layer10 上运行并返回结果张量的某个函数。

预创建layer11 作为对layer10res2 的一些操作作为layer11 的输出。

现在运行您只需评估res,它将在 10 层上使用。如果您想使用 11 层,请使用 res2。如果您知道权重,则可以像 tensor.assign(val).eval() 一样分配它

【讨论】:

    【解决方案2】:

    TensorFlow 有很多优点,但动态图修改不是其中之一。

    如果您真的希望能够即时更改图表,我推荐您使用 PyTorch (http://pytorch.org/)。虽然它比 TensorFlow 更新得多,但文档并不完整。

    【讨论】:

      【解决方案3】:

      与其创建一个全新的图形,不如创建一个最初具有比您需要的更多神经元的图形,并通过乘以一个具有 1 和 0 的不可训练变量来屏蔽它。然后,您可以更改此掩码变量的值,以使新神经元首次有效地发挥作用。

      【讨论】:

      • 有没有办法即时更改权重?所以当我揭开神经元的面纱时,我可以初始化它的权重?
      • 权重存储在一个变量中,您可以随时 session.run 一个操作来为变量分配您想要的任何值。
      猜你喜欢
      • 2020-02-27
      • 2018-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-23
      • 1970-01-01
      • 2012-10-24
      相关资源
      最近更新 更多