首页 文章

Keras:如何在图层之后添加计算然后训练模型?

提问于
浏览
1

我有一个关于使用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中的权重(即列车f(W * x)对Y) .

感谢任何帮助,谢谢!

2 回答

  • 0

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

    1st option - They should

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

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

    option 2 - They should not

    你的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
    
  • 1

    最简单的方法是在模型中添加一个图层,以执行您想要的精确计算 . 根据你的评论,你似乎只想要f(W * X),这正是Dense层的作用,减去偏差项 .

    因此,我认为添加具有适当激活功能的密集层是您需要做的一切 . 如果您不需要在输出处激活,则只需使用“线性”作为激活 .

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

相关问题