有谁知道Caffe是否存在一个漂亮的LSTM模块?我在russel91的github帐户中找到了一个,但显然包含示例和解释的网页消失了(以前http://apollo.deepmatter.io/ - >它现在只重定向到github页面,不再有例子或解释).
neural-network deep-learning caffe lstm recurrent-neural-network
尝试在张量流中实现最小玩具RNN示例.目标是学习从输入数据到目标数据的映射,类似于这个精彩简洁的例子.
更新:我们到了那里.剩下的唯一部分是使它收敛(并且不那么复杂).有人可以帮助将以下内容转换为运行代码或提供一个简单的示例吗?
import tensorflow as tf
from tensorflow.python.ops import rnn_cell
init_scale = 0.1
num_steps = 7
num_units = 7
input_data = [1, 2, 3, 4, 5, 6, 7]
target = [2, 3, 4, 5, 6, 7, 7]
#target = [1,1,1,1,1,1,1] #converges, but not what we want
batch_size = 1
with tf.Graph().as_default(), tf.Session() as session:
# Placeholder for the inputs and target of the net
# inputs = tf.placeholder(tf.int32, [batch_size, num_steps])
input1 = tf.placeholder(tf.float32, [batch_size, 1])
inputs = …Run Code Online (Sandbox Code Playgroud) 我有一个长度为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以及我已经读过的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单元模拟RNN,以便根据多个输入时间序列预测多个输出时间序列.具体而言,我有4个输出时间序列,y1 [t],y2 [t],y3 [t],y4 [t],每个具有3,000的长度(t = 0,...,2999).我还有3个输入时间序列,x1 [t],x2 [t],x3 [t],每个都有3000秒的长度(t = 0,...,2999).目标是使用直到当前时间点的所有输入时间序列来预测y1 [t],... y4 [t],即:
y1[t] = f1(x1[k],x2[k],x3[k], k = 0,...,t)
y2[t] = f2(x1[k],x2[k],x3[k], k = 0,...,t)
y3[t] = f3(x1[k],x2[k],x3[k], k = 0,...,t)
y4[t] = f3(x1[k],x2[k],x3[k], k = 0,...,t)
Run Code Online (Sandbox Code Playgroud)
对于具有长期记忆的模型,我通过以下方式创建了有状态的RNN模型.keras-stateful-lstme.我的案例和keras-stateful-lstme之间的主要区别在于我:
我的代码正在运行.然而,即使使用简单的数据,模型的预测结果也很糟糕.所以我想问你我是否有任何错误.
这是我的代码与玩具示例.
在玩具示例中,我们的输入时间序列是简单的cosign和sign wave:
import numpy as np
def random_sample(len_timeseries=3000):
Nchoice = 600
x1 = np.cos(np.arange(0,len_timeseries)/float(1.0 + np.random.choice(Nchoice)))
x2 = np.cos(np.arange(0,len_timeseries)/float(1.0 + np.random.choice(Nchoice)))
x3 = np.sin(np.arange(0,len_timeseries)/float(1.0 + np.random.choice(Nchoice)))
x4 = np.sin(np.arange(0,len_timeseries)/float(1.0 + np.random.choice(Nchoice))) …Run Code Online (Sandbox Code Playgroud) 我想了解RNN,特别是LSTM如何使用Keras和Tensorflow处理多个输入维度.我的意思是输入形状是(batch_size,timesteps,input_dim),其中input_dim> 1.
我认为如果input_dim = 1,下面的图像很好地说明了LSTM的概念.
这是否意味着如果input_dim> 1则x不是单个值还有一个阵列?但是如果它是这样的那么权重也变成数组,形状与x +上下文相同?
machine-learning neural-network keras recurrent-neural-network
我培养了tf.nn.seq2seq.model_with_buckets具有seq2seq = tf.nn.seq2seq.embedding_attention_seq2seq非常相似的例子Tensorflow教程.
现在我想使用冻结图表freeze_graph.py.如何在模型中找到"output_node_names"?
我正在尝试进行多级分类,这里是我的训练输入和输出的详细信息:
train_input.shape =(1,95000,360)(95000长度输入数组,每个元素是360长度的数组)
train_output.shape =(1,95000,22)(22门课程)
model = Sequential()
model.add(LSTM(22, input_shape=(1, 95000,360)))
model.add(Dense(22, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())
model.fit(train_input, train_output, epochs=2, batch_size=500)
Run Code Online (Sandbox Code Playgroud)
错误是:
ValueError:输入0与层lstm_13不兼容:期望ndim = 3,在行中找到ndim = 4:model.add(LSTM(22,input_shape =(1,95000,360)))
请帮帮我,我无法通过其他答案解决.