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

Neural network Keras:如何在图层之后添加计算,然后训练模型?,neural-network,deep-learning,theano,keras,Neural Network,Deep Learning,Theano,Keras,关于使用Keras(以Theano为后端),我有一个问题,我对它还比较陌生。我使用多对一RNN(以时间序列作为输入,计算一个数字作为输出)作为我的第一组层。到目前为止,这对于使用循环层IO的Keras来说是微不足道的 以下是我遇到的问题: 现在我想把这个RNN(一个数字)的输出传递给一个单独的函数(让我们调用这个f),然后用它进行一些计算 我想做的是获取这个计算出的输出(在函数f之后),并根据预期输出(通过一些损失,例如mse)对其进行训练 我想了解一些关于如何从函数f提供输出后计算的建议,并且

关于使用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)


非常感谢您的帮助,谢谢

最简单的方法是向模型中添加一个层,该层可以进行您想要的精确计算。从你的评论看来,你只是想 f(W*X),这就是致密层的作用,减去偏置项

所以我相信添加一个具有适当激活功能的致密层就是你需要做的一切。如果您不需要在输出端激活,那么只需使用“线性”作为激活


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

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

第一选项-他们应该

正如Matias所说,一个简单的致密层可能就是你想要的:

X = input
Y = output 

#RNN layer 
model.add(LSTM(....))
model.add(Activation(...))     %%Returns W*X
model.add(Dense(...))
model.fit(X,Y,....)
选项2-他们不应

您的f函数仍然是一个密集层,但您将分别迭代地训练f和RNN

假设您有一个如上定义的rnn_模型,请定义一个新模型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