首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线性激活函数LSTM

线性激活函数LSTM
EN

Data Science用户
提问于 2019-12-13 12:54:29
回答 1查看 3.2K关注 0票数 0

我试图进行多步回归,并使用输出层:

LSTM(1,激活=‘线性’,return_sequences=True)

这是否实现这个目标的错误方式?我应该使用TimeDistributed(稠密(1))作为输出吗?如果是,为什么?

EN

回答 1

Data Science用户

回答已采纳

发布于 2019-12-13 13:43:01

我不认为使用线性(即:无)激活有什么特别的优势。神经网络的力量在于它们在数据中“学习”非线性模式的能力。此外,Tanh和sigmoid门被认为控制着信息流在时间上的流动,它们是为此而设计的,我个人会谨慎地改变这一点。

如果您想进行多步回归,您有许多选项,但最高级的体系结构是序列到序列,即seq2seq:

代码语言:javascript
复制
from tensorflow.keras import Sequential

from tensorflow.keras.layers import Bidirectional, LSTM
from tensorflow.keras.layers import RepeatVector, TimeDistributed
from tensorflow.keras.layers import Dense

from tensorflow.keras.activations import elu, relu

seq2seq = Sequential([

    Bidirectional(LSTM(len_input), input_shape = (len_input, no_vars)),

    RepeatVector(len_input),

    Bidirectional(LSTM(len_input, return_sequences = True)),

    TimeDistributed(Dense(hidden_size, activation = elu)),

    TimeDistributed(Dense(1, activation = relu))

])

其中len_input是输入序列的长度。输出是相同的序列,向前移动了许多步骤,相当于预测的长度。hidden_sizeDense()层的大小,这是完全可选的。

我使用了Bidirectional()包装器,但这也是可选的。并不是所有的任务都需要双LSTM,如果需要的话可以随时删除它.

RepeatVector()TimeDistributed()层的(组合)作用是复制潜在的表示和如下的神经网络体系结构,用于重构输出序列所需的步骤数。RepeatVector()生成这种“乘法”,而TimeDistributed()则重复在每个重复信号上的应用,在实践中生成最终的序列。

输入和输出都必须是三维numpy形状数组:

(观察次数、输入序列长度、变量数)

Seq2seq模型训练困难(参数数目多,训练时间长),但其性能优于其它的神经网络结构。目前,任何最先进的RNN都是某种seq2seq.

票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/64769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档