我想预测给定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很陌生,并希望能够向正确的方向发出任何暗示.
有谁知道Caffe是否存在一个漂亮的LSTM模块?我在russel91的github帐户中找到了一个,但显然包含示例和解释的网页消失了(以前http://apollo.deepmatter.io/ - >它现在只重定向到github页面,不再有例子或解释).
neural-network deep-learning caffe lstm recurrent-neural-network
我有一个长度为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输入其他内容?
谢谢
我在为Keras准备RNN的输入数据时遇到了麻烦.
目前,我的培训数据维度是: (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)?
我正在阅读有关RNN/LSTM的本教程,我很难理解有状态的LSTM.我的问题如下:
在关于RNN的Keras文档中,我发现i批次中位于样本中的样本的隐藏状态将作为输入隐藏状态提供i给下一批中的样本.这是否意味着如果我们想要将隐藏状态从样本传递到样本,我们必须使用大小为1的批次,因此执行在线梯度下降?有没有办法在批量> 1的批次中传递隐藏状态并在该批次上执行梯度下降?
在教程的段落中,"一个字符到一个字符映射的状态LSTM"被给出了一个代码,该代码使用batch_size = 1并stateful = 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) 我正在尝试使用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
当我尝试在帖子结束时运行代码时出现以下错误.但我不清楚我的代码有什么问题.有人能告诉我调试张量流程序的技巧吗?
$ ./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
有几个来源解释有状态/无状态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 LSTM和Keras - 有状态的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 …
我已经成功运行了以 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 _______________________________________________________ 没有任何 模型编译
看来问题是在模型拟合的时候出现的。但我不知道到底是什么问题?
在自动编码器的上下文中,我正在努力解决注意力的概念。我相信我理解注意力在 seq2seq 翻译方面的用法——在训练组合编码器和解码器后,我们可以同时使用编码器和解码器来创建(例如)语言翻译器。因为我们仍在生产中使用解码器,所以我们可以利用注意力机制。
但是,如果自编码器的主要目标主要是生成输入向量的潜在压缩表示呢?我说的是在训练后我们基本上可以处理模型的解码器部分的情况。
例如,如果我在没有注意的情况下使用 LSTM,“经典”方法是使用最后一个隐藏状态作为上下文向量——它应该代表我输入序列的主要特征。如果我要注意使用 LSTM,我的潜在表示必须是每个时间步长的所有隐藏状态。这似乎不符合输入压缩和保留主要功能的概念。维度甚至可能更高。
此外,如果我需要使用所有隐藏状态作为我的潜在表示(就像在注意力情况下一样) - 为什么要使用注意力?我可以使用所有隐藏状态来初始化解码器。
dimensionality-reduction autoencoder lstm recurrent-neural-network attention-model
lstm ×10
keras ×5
python ×3
tensorflow ×2
time-series ×2
autoencoder ×1
caffe ×1
cudnn ×1
stateful ×1