我有一个关于使用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 回答
从你的问题中不清楚RNN的权重是否应该随着f的训练而更新 .
1st option - They should
正如Matias所说 - 你可能正在寻找一个简单的Dense层:
option 2 - They should not
你的f函数仍然是一个Dense层,但你将分别迭代地训练f和RNN .
假设您有一个如上定义的rnn_model,请定义一个新模型f:
现在您可以通过以下方式单独训练它们:
最简单的方法是在模型中添加一个图层,以执行您想要的精确计算 . 根据你的评论,你似乎只想要f(W * X),这正是Dense层的作用,减去偏差项 .
因此,我认为添加具有适当激活功能的密集层是您需要做的一切 . 如果您不需要在输出处激活,则只需使用“线性”作为激活 .
请注意,函数f需要使用keras.backend中的方法指定为符号函数,它应该是一个可微函数 .