【问题标题】:Keras: How to add computation after a layer and then train model?Keras:如何在一层之后添加计算然后训练模型?
【发布时间】:2017-04-17 16:25:00
【问题描述】:

我有一个关于使用 Keras(以 Theano 作为我的后端)的问题,我对它相当陌生。我使用多对一 RNN(将时间序列作为输入,计算一个数字作为输出)作为我的第一组层。到目前为止,这对于使用循环层 IO 的 Keras 来说是微不足道的。

这是我遇到麻烦的地方:

现在我想将这个 RNN 的输出(一个数字)传递给一个单独的函数(我们称之为 f),然后用它做一些计算。

我想做的是获取这个计算的输出(在函数 f 之后)并针对预期的输出进行训练(通过一些损失,例如 mse)。

我想要一些关于如何从函数 f 提供输出后计算并仍然通过 Keras 中的 model.fit 功能对其进行训练的建议。

我的伪代码如下:

  X = input
  Y = output 

  #RNN layer 
  model.add(LSTM(....))
  model.add(Activation(...))     %%Returns W*X

  #function f   %%Returns f(W*X)
  (Needs to take in output from final RNN layer to generate a new number)

  model.fit(X,Y,....)

在上面,我不确定如何编写代码来包含函数 f 的输出,同时它正在训练 RNN 中的权重(即针对 Y 训练 f(W*x))。

感谢任何帮助,谢谢!

【问题讨论】:

    标签: neural-network deep-learning theano keras


    【解决方案1】:

    最简单的方法是在模型中添加一个层,以执行您想要的精确计算。从你的 cmets 看来你只是想要 f(W*X),这正是 Dense 层所做的,减去偏置项。

    所以我相信添加具有适当激活函数的密集层是您需要做的一切。如果您不需要在输出处激活,则只需使用“线性”作为激活。

    请注意,函数 f 需要使用 keras.backend 中的方法指定为符号函数,并且它应该是一个可微函数。

    【讨论】:

      【解决方案2】:

      从您的问题中不清楚 RNN 的权重是否应该随着 f 的训练而更新。

      第一个选项 - 他们应该

      正如 Matias 所说 - 您可能正在寻找一个简单的 Dense 层:

      X = input
      Y = output 
      
      #RNN layer 
      model.add(LSTM(....))
      model.add(Activation(...))     %%Returns W*X
      model.add(Dense(...))
      model.fit(X,Y,....)
      

      选项 2 - 他们不应该

      您的 f 函数仍将是一个 Dense 层,但您将分别迭代训练 f 和 RNN。

      假设你有一个如上所述定义的 rnn_model,定义一个新模型 f:

      X = input
      Y = output 
      
      #RNN layer 
      rnn_model = Sequential()
      rnn_model .add(LSTM(....))
      rnn_model .add(Activation(...))     %%Returns W*X
      
      f_model = Sequential()
      f_model.add(rnn_model)
      f_model.add(Dense(...))
      

      现在您可以通过以下方式单独训练它们:

      # Code to train rnn_model
      rnn_model.trainable = False
      # Code to train f_model
      rnn_model.trainable = True
      

      【讨论】:

        猜你喜欢
        • 2021-10-07
        • 1970-01-01
        • 2018-01-07
        • 2017-09-28
        • 1970-01-01
        • 1970-01-01
        • 2018-04-15
        • 1970-01-01
        • 2023-03-19
        相关资源
        最近更新 更多