Luc*_*ede 86 machine-learning neural-network deep-learning keras recurrent-neural-network
我尝试了解LSTM以及如何使用Keras构建它们.我发现,主要有4种运行RNN的模式(图中右边4种)
图片来源:Andrej Karpathy
现在我想知道他们每个人的简约代码片段在Keras中会是什么样子.所以像
model = Sequential()
model.add(LSTM(128, input_shape=(timesteps, data_dim)))
model.add(Dense(1))
Run Code Online (Sandbox Code Playgroud)
对于4个任务中的每个任务,可能只需要一点点解释.
Mar*_*jko 94
所以:
Dense图层,因为您不处理序列:model.add(Dense(output_size, input_shape=input_shape))
Run Code Online (Sandbox Code Playgroud)
2. 一对多:此选项不受支持,因为链接模型不是很容易Keras,因此以下版本是最简单的:
model.add(RepeatVector(number_of_times, input_shape=input_shape))
model.add(LSTM(output_size, return_sequences=True))
Run Code Online (Sandbox Code Playgroud)
model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim)))
Run Code Online (Sandbox Code Playgroud)
model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim), return_sequences=True))
Run Code Online (Sandbox Code Playgroud)
编辑:广告5
在我最近的一个应用程序中,我们实现了与第4张图像中的多对多相似的内容.如果您希望网络具有以下架构(当输入长于输出时):
O O O
| | |
O O O O O O
| | | | | |
O O O O O O
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式实现此目的:
model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim), return_sequences=True))
model.add(Lambda(lambda x: x[:, -N:, :]
Run Code Online (Sandbox Code Playgroud)
哪里N是你想覆盖(图像最后的步数N = 3).
从这一点开始:
O O O
| | |
O O O O O O
| | |
O O O
Run Code Online (Sandbox Code Playgroud)
N与使用例如0矢量的人工填充长度序列一样简单,以便将其调整到合适的大小.
gus*_*avz 13
@Marcin Mo?ejko 的好答案
我会将以下内容添加到 NR.5(具有不同输入/输出长度的多对多):
A) 作为香草 LSTM
model = Sequential()
model.add(LSTM(N_BLOCKS, input_shape=(N_INPUTS, N_FEATURES)))
model.add(Dense(N_OUTPUTS))
Run Code Online (Sandbox Code Playgroud)
B) 作为编码器-解码器 LSTM
model.add(LSTM(N_BLOCKS, input_shape=(N_INPUTS, N_FEATURES))
model.add(RepeatVector(N_OUTPUTS))
model.add(LSTM(N_BLOCKS, return_sequences=True))
model.add(TimeDistributed(Dense(1)))
model.add(Activation('linear'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31999 次 |
| 最近记录: |