我尝试了解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个任务中的每个任务,可能只需要一点点解释.
machine-learning neural-network deep-learning keras recurrent-neural-network
我知道这是一个有很多问题的主题,但我找不到任何问题的解决方案.
我正在使用屏蔽层训练可变长度输入的LSTM网络,但它似乎没有任何影响.
输入形状(100,362,24),其中362是最大序列长度,24是特征数量,100是样本数量(划分75列火车/ 25有效).
输出形状(100,362,1)稍后变换为(100,362-N,1).
这是我的网络代码:
from keras import Sequential
from keras.layers import Embedding, Masking, LSTM, Lambda
import keras.backend as K
# O O O
# example for N:3 | | |
# O O O O O O
# | | | | | |
# O O O O O O
N = 5
y= y[:,N:,:]
x_train = x[:75]
x_test = x[75:]
y_train = y[:75]
y_test = y[75:]
model = Sequential()
model.add(Masking(mask_value=0., input_shape=(timesteps, features)))
model.add(LSTM(128, return_sequences=True))
model.add(LSTM(64, return_sequences=True)) …Run Code Online (Sandbox Code Playgroud) 我有一个时间序列数据集,我用它作为LSTM-RNN的输入,用于行动预期.时间序列包括30fps(即150个数据点)的5秒时间,并且数据表示面部特征的位置/移动.
我从我的数据集中采样较小长度的其他子序列,以便在数据集中添加冗余并减少过度拟合.在这种情况下,我知道子序列的开始和结束帧.
为了批量训练模型,所有时间序列需要具有相同的长度,并且根据文献中的许多论文填充不应该影响网络的性能.
例:
原始序列:
1 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)
子序列:
4 5 6 7
8 9 10
2 3 4 5 6
Run Code Online (Sandbox Code Playgroud)
考虑到我的网络正在试图预测一个动作(意味着一旦P(动作)>阈值从t = 0变为T = tmax,它将预测该动作)填充的位置是否重要?
选项1:零替换原始值
0 0 0 4 5 6 7 0 0 0
0 0 0 0 0 0 0 8 9 10
0 2 3 4 5 6 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
选项2:最后全部为零
4 5 6 7 0 0 0 0 0 0
8 …Run Code Online (Sandbox Code Playgroud) machine-learning padding deep-learning lstm recurrent-neural-network
我正在尝试构建LSTM自动编码器来预测时间序列数据。由于我是Python新手,因此在解码部分会出错。我试图像这里和Keras那样建立它。我完全无法理解给定示例之间的区别。我现在拥有的代码如下所示:
问题1:每个样本有2000个值时,如何选择batch_size和input_dimension?
问题2:如何使LSTM自动编码器正常工作(模型和预测)?这仅是模型,但如何预测?是说从样本10开始一直到数据结束,这是在预测吗?
Mydata总共有1500个样本,我将使用10个时间步长(如果更好,则更多),每个样本有2000个值。如果您需要更多信息,我也会在以后包括它们。
trainX = np.reshape(data, (1500, 10,2000))
from keras.layers import *
from keras.models import Model
from keras.layers import Input, LSTM, RepeatVector
Run Code Online (Sandbox Code Playgroud)
参数
timesteps=10
input_dim=2000
units=100 #choosen unit number randomly
batch_size=2000
epochs=20
Run Code Online (Sandbox Code Playgroud)
模型
inpE = Input((timesteps,input_dim))
outE = LSTM(units = units, return_sequences=False)(inpE)
encoder = Model(inpE,outE)
inpD = RepeatVector(timesteps)(outE)
outD1 = LSTM(input_dim, return_sequences=True)(outD
decoder = Model(inpD,outD)
autoencoder = Model(inpE, outD)
autoencoder.compile(loss='mean_squared_error',
optimizer='rmsprop',
metrics=['accuracy'])
autoencoder.fit(trainX, trainX,
batch_size=batch_size,
epochs=epochs)
encoderPredictions = encoder.predict(trainX)
Run Code Online (Sandbox Code Playgroud) 我有我的数据DataFrame:
dOpen dHigh dLow dClose dVolume day_of_week_0 day_of_week_1 ... month_6 month_7 month_8 month_9 month_10 month_11 month_12
639 -0.002498 -0.000278 -0.005576 -0.002228 -0.002229 0 0 ... 0 0 1 0 0 0 0
640 -0.004174 -0.005275 -0.005607 -0.005583 -0.005584 0 0 ... 0 0 1 0 0 0 0
641 -0.002235 0.003070 0.004511 0.008984 0.008984 1 0 ... 0 0 1 0 0 0 0
642 0.006161 -0.000278 -0.000281 -0.001948 -0.001948 0 1 ... 0 0 1 0 0 …Run Code Online (Sandbox Code Playgroud)