标签: lstm

使用Keras进行视频预测(时间序列)

我想预测给定N前一帧的(灰度)视频的下一帧 - 使用Keras中的CNN或RNN.关于时间序列预测和Keras的大多数教程和其他信息在他们的网络中使用1维输入,但我的是3D(N frames x rows x cols)

我现在真的不确定这个问题的好方法是什么.我的想法包括:

  • 使用一个或多个LSTM图层.这里的问题是我不确定他们是否适合拍摄一系列图像而不是一系列标量作为输入.内存消耗不会爆炸吗?如果可以使用它们:我如何在Keras中使用它们以获得更高的尺寸?

  • 在输入上使用3D卷积(先前视频帧的堆栈).这提出了其他问题:为什么在我不进行分类而是预测时这会有所帮助?如何以网络输入具有尺寸(N x cols x rows)和输出的方式堆叠图层(1 x cols x rows)

我对CNN/RNN和Keras很陌生,并希望能够向正确的方向发出任何暗示.

machine-learning time-series neural-network lstm keras

16
推荐指数
2
解决办法
8226
查看次数

Caffe的LSTM模块

有谁知道Caffe是否存在一个漂亮的LSTM模块?我在russel91的github帐户中找到了一个,但显然包含示例和解释的网页消失了(以前http://apollo.deepmatter.io/ - >它现在只重定向到github页面,不再有例子或解释).

neural-network deep-learning caffe lstm recurrent-neural-network

15
推荐指数
2
解决办法
1万
查看次数

输入到LSTM网络张量流

我有一个长度为t(x0,...,xt)的时间序列,每个xi是一个d维向量,即xi =(x0i,x1i,...,xdi).因此我的输入X的形状[batch_size,d]

张量流LSTM的输入应为[batchSize,hidden_​​size]的大小.我的问题是我应该如何输入我的时间序列到LSTM.我想到的一个可能的解决方案是具有额外的权重矩阵W,其大小为[d,hidden_​​size]并且用X*W + B输入LSTM.

这是正确的还是我应该向netwoרk输入其他内容?

谢谢

python lstm tensorflow recurrent-neural-network

15
推荐指数
1
解决办法
5027
查看次数

Keras:我应该如何为RNN准备输入数据?

我在为Keras准备RNN的输入数据时遇到了麻烦.

目前,我的培训数据维度是: (6752, 600, 13)

  • 6752:训练数据的数量
  • 600:时间步数
  • 13:特征向量的大小(向量是浮点数)

X_train并且Y_train都在这个方面.

我想把这些数据准备好SimpleRNN用于Keras.假设我们正在经历时间步骤,从步骤#0到步骤#599.假设我想使用input_length = 5,这意味着我想使用最近的5个输入.(例如步骤#10,#11,#12,#13,#14 @步骤#14).

我应该如何重塑X_train

应该是(6752, 5, 600, 13)或应该是(6752, 600, 5, 13)吗?

什么形状应该Y_train在?

它应该是(6752, 600, 13)(6752, 1, 600, 13)(6752, 600, 1, 13)

deep-learning lstm keras recurrent-neural-network

15
推荐指数
2
解决办法
5986
查看次数

了解有状态LSTM

我正在阅读有关RNN/LSTM的本教程,我很难理解有状态的LSTM.我的问题如下:

1.培训批量大小

在关于RNN的Keras文档中,我发现i批次中位于样本中的样本的隐藏状态将作为输入隐藏状态提供i给下一批中的样本.这是否意味着如果我们想要将隐藏状态从样本传递到样本,我们必须使用大小为1的批次,因此执行在线梯度下降?有没有办法在批量> 1的批次中传递隐藏状态并在该批次上执行梯度下降?

2. One-Char映射问题

在教程的段落中,"一个字符到一个字符映射的状态LSTM"被给出了一个代码,该代码使用batch_size = 1stateful = True学习在给定字母表字母的情况下预测字母表的下一个字母.在代码的最后部分(第53行到完整代码的结尾),模型以随机字母('K')开始测试并预测'B'然后给出'B'它预测'C'等等除了'K'之外,它似乎运作良好.但是,我尝试了下面的代码调整(最后一部分,我保持52行及以上):

    # demonstrate a random starting point
    letter1 = "M"
    seed1 = [char_to_int[letter1]]
    x = numpy.reshape(seed, (1, len(seed), 1))
    x = x / float(len(alphabet))
    prediction = model.predict(x, verbose=0)
    index = numpy.argmax(prediction)
    print(int_to_char[seed1[0]], "->", int_to_char[index])
    letter2 = "E"
    seed2 = [char_to_int[letter2]]
    seed = seed2
    print("New start: ", letter1, letter2)
    for i in range(0, 5):
        x = numpy.reshape(seed, …
Run Code Online (Sandbox Code Playgroud)

stateful deep-learning lstm keras recurrent-neural-network

15
推荐指数
1
解决办法
5928
查看次数

如何利用外部特征为LSTM构建具有时间序列多步幅度的输入数据?

我正在尝试使用LSTM进行商店销售预测.以下是我的原始数据的样子:

|     Date   | StoreID | Sales | Temperature |  Open   | StoreType |
|------------|---------|-------|-------------|---------|-----------|
| 01/01/2016 |   1     |   0   |      36     |    0    |     1     |
| 01/02/2016 |   1     | 10100 |      42     |    1    |     1     |
| ...
| 12/31/2016 |   1     | 14300 |      39     |    1    |     1     |
| 01/01/2016 |   2     | 25000 |      46     |    1    |     3     |
| 01/02/2016 |   2     | 23700 |      43     |    1    | …
Run Code Online (Sandbox Code Playgroud)

time-series neural-network lstm keras recurrent-neural-network

15
推荐指数
1
解决办法
4588
查看次数

Tensorflow:尝试使用未初始化的值beta1_power

当我尝试在帖子结束时运行代码时出现以下错误.但我不清楚我的代码有什么问题.有人能告诉我调试张量流程序的技巧吗?

$ ./main.py 
Extracting /tmp/data/train-images-idx3-ubyte.gz
Extracting /tmp/data/train-labels-idx1-ubyte.gz
Extracting /tmp/data/t10k-images-idx3-ubyte.gz
Extracting /tmp/data/t10k-labels-idx1-ubyte.gz
2017-12-11 22:53:16.061163: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
Traceback (most recent call last):
  File "./main.py", line 55, in <module>
    sess.run(opt, feed_dict={x: batch_x, y: batch_y})
  File "/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 889, in run
    run_metadata_ptr)
  File "/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1120, in _run
    feed_dict_tensor, options, run_metadata)
  File "/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1317, in _do_run
    options, run_metadata)
  File "/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1336, in _do_call
    raise …
Run Code Online (Sandbox Code Playgroud)

python machine-learning lstm tensorflow recurrent-neural-network

15
推荐指数
1
解决办法
1万
查看次数

了解Keras LSTM:批量大小和有状态的作用

来源

有几个来源解释有状态/无状态LSTM以及我已经读过的batch_size的作用.我稍后会在帖子中提及它们:

[ 1 ] https://machinelearningmastery.com/understanding-stateful-lstm-recurrent-neural-networks-python-keras/

[ 2 ] https://machinelearningmastery.com/stateful-stateless-lstm-time-series-forecasting-python/

[ 3 ] http://philipperemy.github.io/keras-stateful-lstm/

[ 4 ] https://machinelearningmastery.com/use-different-batch-sizes-training-predicting-python-keras/

Ans还有其他SO线程,比如了解Keras LSTMKeras - 有状态的vs无状态LSTM,但是并没有完全解释我正在寻找的东西.


我的问题

我仍然不确定有关状态和确定batch_size的任务的正确方法是什么.

我有大约1000个独立的时间序列(samples),每个长度大约600天(timesteps)(实际上是可变长度,但我考虑将数据修剪到一个恒定的时间帧),input_dim每个时间步长有8个特征(或)(一些特征与每个样本相同,每个样本一些个体).

Input shape = (1000, 600, 8)

其中一个特征是我想要预测的特征,而其他特征(应该是)支持预测这一个"主要特征".我会为1000个时间序列中的每一个都这样做.什么是模拟这个问题的最佳策略?

Output shape = (1000, 600, 1)


什么是批次?

从[ 4 ]:

Keras使用快速符号数学库作为后端,例如TensorFlow和Theano.

使用这些库的缺点是,无论您是在训练网络还是进行预测,数据的形状和大小都必须预先定义并保持不变.

[...]

当您希望进行的预测少于批量大小时,这确实会成为一个问题.例如,您可以获得批量较大的最佳结果,但需要在时间序列或序列问题等方面对一次观察进行预测.

这听起来像是一个"批处理"将沿着timesteps-dimension 分割数据.

但是,[ 3 ]指出:

换句话说,无论何时训练或测试LSTM,首先必须建立批量大小分割的输入X形状矩阵.例如,如果和,则表示您的模型将接收64个样本的块,计算每个输出(无论每个样本的时间步数是多少),平均梯度并传播它以更新参数向量.nb_samples, timesteps, input_dimnb_samplesnb_samples=1024batch_size=64

当深入研究[ 1 ]和[ 4 ] 的例子时,Jason总是将他的时间序列分成几个只包含1个时间步长的样本(在他的例子中完全确定序列中下一个元素的前身).所以我认为批次实际上是沿着samples-axis …

python lstm keras recurrent-neural-network

15
推荐指数
1
解决办法
4827
查看次数

CuDNNLSTM: UnknownError: 找不到 dnn 实现

我已经成功运行了以 LSTM 作为第一层的模型。但出于好奇,我用 CuDNNLSTM 替换了 LSTM。但是在model.fit之后,它回复了以下错误信息:

UnknownError: Fail to find the dnn implementation.
    [[{{node cu_dnnlstm_5/CudnnRNN}} = CudnnRNN[T=DT_FLOAT, _class=["loc:@training_2/Adam/gradients/cu_dnnlstm_5/CudnnRNN_grad/CudnnRNNBackprop"], direction="unidirectional", dropout=0, input_mode="linear_input", is_training=true, rnn_mode="lstm", seed=87654321, seed2=0, _device="/job:localhost/replica:0/task:0/device:GPU:0"](cu_dnnlstm_5/transpose, cu_dnnlstm_5/ExpandDims_1, cu_dnnlstm_5/ExpandDims_1, cu_dnnlstm_5/concat_1)]]
    [[{{node metrics_3/mean_squared_error/Mean_1/_1877}} = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_4852_metrics_3/mean_squared_error/Mean_1", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]
Run Code Online (Sandbox Code Playgroud)

我在这个讨论中尝试了 TestCudnnLSTM()并成功通过了测试:

Keras 版本:2.2.4
Tensorflow 版本:1.12.0
创建模型
_______________________________________________________
层(类型)输出形状参数#   
================================================== ================
cu_dnnlstm_1 (CuDNNLSTM) (无, 1000, 1) 16        
================================================== ================
总参数:16
可训练参数:16
不可训练的参数:0
_______________________________________________________
没有任何
模型编译

看来问题是在模型拟合的时候出现的。但我不知道到底是什么问题?

lstm cudnn

15
推荐指数
3
解决办法
1万
查看次数

注意力对自动编码器有意义吗?

在自动编码器的上下文中,我正在努力解决注意力的概念。我相信我理解注意力在 seq2seq 翻译方面的用法——在训练组合编码器和解码器后,我们可以同时使用编码器和解码器来创建(例如)语言翻译器。因为我们仍在生产中使用解码器,所以我们可以利用注意力机制。

但是,如果自编码器的主要目标主要是生成输入向量的潜在压缩表示呢?我说的是在训练后我们基本上可以处理模型的解码器部分的情况。

例如,如果我在没有注意的情况下使用 LSTM,“经典”方法是使用最后一个隐藏状态作为上下文向量——它应该代表我输入序列的主要特征。如果我要注意使用 LSTM,我的潜在表示必须是每个时间步长的所有隐藏状态。这似乎不符合输入压缩和保留主要功能的概念。维度甚至可能更高。

此外,如果我需要使用所有隐藏状态作为我的潜在表示(就像在注意力情况下一样) - 为什么要使用注意力?我可以使用所有隐藏状态来初始化解码器。

dimensionality-reduction autoencoder lstm recurrent-neural-network attention-model

15
推荐指数
1
解决办法
1792
查看次数