标签: lstm

Keras - 有状态与无状态LSTM

我很难概念化Keras中有状态和无状态LSTM之间的区别.我的理解是,在每个批处理结束时,在无状态情况下"重置网络状态",而对于有状态情况,每个批处理都保留网络状态,然后必须在每个时代的结束.

我的问题如下:1.在无状态的情况下,如果状态未在批次之间保留,网络如何学习?2.何时使用LSTM的无状态与有状态模式?

deep-learning lstm keras tensorflow

19
推荐指数
2
解决办法
5927
查看次数

TensorFlow的LSTMCell究竟如何运作?

我尝试重现TensorFlow的LSTMCell生成的结果,以确保我知道它的作用.

这是我的TensorFlow代码:

num_units = 3
lstm = tf.nn.rnn_cell.LSTMCell(num_units = num_units)

timesteps = 7
num_input = 4
X = tf.placeholder("float", [None, timesteps, num_input])
x = tf.unstack(X, timesteps, 1)
outputs, states = tf.contrib.rnn.static_rnn(lstm, x, dtype=tf.float32)

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

x_val = np.random.normal(size = (1, 7, num_input))

res = sess.run(outputs, feed_dict = {X:x_val})

for e in res:
    print e
Run Code Online (Sandbox Code Playgroud)

这是它的输出:

[[-0.13285545 -0.13569424 -0.23993783]]
[[-0.04818152  0.05927373  0.2558436 ]]
[[-0.13818116 -0.13837864 -0.15348436]]
[[-0.232219    0.08512601  0.05254192]]
[[-0.20371495 -0.14795329 -0.2261929 ]]
[[-0.10371902 -0.0263292  -0.0914975 …
Run Code Online (Sandbox Code Playgroud)

python lstm tensorflow

19
推荐指数
1
解决办法
608
查看次数

lstm 将不会使用 cuDNN 内核,因为它不符合标准。在 GPU 上运行时,它将使用通用 GPU 内核作为后备

我正在使用 GPU 在 Databricks 上运行以下 LSTM 代码

model = Sequential()
model.add(LSTM(64, activation=LeakyReLU(alpha=0.05), batch_input_shape=(1, timesteps, n_features), 
    stateful=False, return_sequences = True))
model.add(Dropout(0.2))
model.add(LSTM(32))
model.add(Dropout(0.2))
model.add(Dense(n_features))
model.compile(loss='mean_squared_error', optimizer=Adam(learning_rate = 0.001), metrics='acc')
model.fit(generator, epochs=epochs, verbose=0, shuffle=False)
Run Code Online (Sandbox Code Playgroud)

但不断出现以下警告

WARNING:tensorflow:Layer lstm will not use cuDNN kernels since it doesn't meet the criteria. It will use a generic GPU kernel as fallback when running on GPU.
Run Code Online (Sandbox Code Playgroud)

它的训练速度比没有 GPU 时慢得多。我正在使用 DBR 9.0 ML(包括 Apache Spark 3.1.2、GPU、Scala 2.12),我是否需要任何其他库?

python lstm tensorflow databricks

19
推荐指数
2
解决办法
3万
查看次数

了解Tensorflow LSTM输入形状

我有一个数据集X,其中包含N = 4000个样本,每个样本由d = 2个特征(连续值)组成,跨越t = 10个时间步长.在时间步骤11,我还具有每个样本的相应"标签",它们也是连续值.

目前,我的数据集的形状为X:[4000,20],Y:[4000].

考虑到d特征的10个先前输入,我想使用TensorFlow训练LSTM来预测Y(回归)的值,但是我很难在TensorFlow中实现它.

我目前面临的主要问题是了解TensorFlow如何期望输入格式化.我见过各种各样的例子,如,但这些例子处理连续时间序列数据的一个大的字符串.我的数据是不同的样本,每个都是独立的时间序列.

python regression lstm tensorflow

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

为什么用于预测的Keras LSTM批量大小必须与拟合批量大小相同?

当使用Keras LSTM预测时间序列数据时,当我尝试使用批量大小为50训练模型时,我一直在收到错误,然后尝试使用批量大小为1(即批量大小)进行预测只是预测下一个值).

为什么我无法同时训练和匹配多个批次的模型,然后使用该模型预测除了相同批次大小之外的任何其他内容.它似乎没有意义,但后来我很容易就会遗漏一些关于此的东西.

编辑:这是模型. batch_size是50,sl是序列长度,目前设置为20.

    model = Sequential()
    model.add(LSTM(1, batch_input_shape=(batch_size, 1, sl), stateful=True))
    model.add(Dense(1))
    model.compile(loss='mean_squared_error', optimizer='adam')
    model.fit(trainX, trainY, epochs=epochs, batch_size=batch_size, verbose=2)
Run Code Online (Sandbox Code Playgroud)

这是预测RMSE训练集的线

    # make predictions
    trainPredict = model.predict(trainX, batch_size=batch_size)
Run Code Online (Sandbox Code Playgroud)

这是对看不见的时间步骤的实际预测

for i in range(test_len):
    print('Prediction %s: ' % str(pred_count))

    next_pred_res = np.reshape(next_pred, (next_pred.shape[1], 1, next_pred.shape[0]))
    # make predictions
    forecastPredict = model.predict(next_pred_res, batch_size=1)
    forecastPredictInv = scaler.inverse_transform(forecastPredict)
    forecasts.append(forecastPredictInv)
    next_pred = next_pred[1:]
    next_pred = np.concatenate([next_pred, forecastPredict])

    pred_count += 1
Run Code Online (Sandbox Code Playgroud)

这个问题与行:

forecastPredict = model.predict(next_pred_res, batch_size=batch_size)

batch_size此处设置为1时的错误是:

ValueError: Cannot feed value of …

deep-learning lstm keras

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

Pytorch LSTM 与 LSTMCell

Pytorch(目前是1.1版)中的LSTMLSTMCell有什么区别?看起来 LSTMCell 是 LSTM 的一个特例(即只有一层,单向,没有 dropout)。

那么,拥有这两种实现的目的是什么?除非我遗漏了什么,否则将 LSTM 对象用作 LSTMCell 是微不足道的(或者,使用多个 LSTMCell 来创建 LSTM 对象非常容易)

lstm recurrent-neural-network pytorch lstm-stateful

17
推荐指数
1
解决办法
8525
查看次数

实施双向LSTM-CRF网络

我需要在最后实现一个带有CRF层的双向LSTM网络.特别是本文提出的模型,并对其进行训练.

http://www.aclweb.org/anthology/P15-1109

我想用Python实现它.任何人都可以提供一些库或示例代码来说明如何做到这一点.我看了PyBrain,但真的不明白.

我也对其他编程语言的工具包持开放态度.

python crf lstm

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

Tensorflow LSTM中的c_state和m_state是什么?

Tensorflow r0.12的tf.nn.rnn_cell.LSTMCell文档将其描述为init:

tf.nn.rnn_cell.LSTMCell.__call__(inputs, state, scope=None)
Run Code Online (Sandbox Code Playgroud)

其中state如下:

state:如果state_is_tuple为False,则必须是状态Tensor,2-D,batch x state_size.如果state_is_tuple为True,则它必须是状态Tensors的元组,两者都是2-D,列大小为c_state和m_state.

它们是什么c_state以及m_state它们如何适合LSTM?我在文档中的任何地方都找不到对它们的引用.

以下是文档中该页面的链接.

python deep-learning lstm tensorflow

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

如何使用图像数据而不是字体文件训练tesseract 4?

我正在尝试使用图像而不是字体来训练Tesseract 4.

文档中,他们只解释了字体的方法,而不是图像.

我知道它是如何工作的,当我使用以前版本的Tesseract但我没有得到如何使用box/tiff文件在Tesseract 4中使用LSTM进行训练.

我查看了tesstrain.sh,它用于生成LSTM训练数据,但找不到任何有用的信息.有任何想法吗?

ocr tesseract training-data lstm

16
推荐指数
1
解决办法
1844
查看次数

使用LSTM预测时间序列的多个前向时间步长

我想预测每周可预测的某些值(低SNR).我需要预测一年中形成的一年的整个时间序列(52个值 - 图1)

图1:按周计算的年度时间序列

我的第一个想法是使用Keras over TensorFlow开发多对多LSTM模型(图2).我正在使用52输入层(前一年的给定时间序列)和52预测输出层(明年的时间序列)训练模型.train_X的形状是(X_examples,52,1),换言之,要训练的X_examples,每个1个特征的52个时间步长.据我所知,Keras会将52个输入视为同一域的时间序列.train_Y的形状是相同的(y_examples,52,1).我添加了一个TimeDistributed层.我的想法是算法会将值预测为时间序列而不是孤立值(我是否正确?)

Keras的模型代码是:

y = y.reshape(y.shape[0], 52, 1)
X = X.reshape(X.shape[0], 52, 1)
# design network
model = Sequential()
model.add(LSTM(n_neurons, input_shape=(X.shape[1], X.shape[2]), return_sequences=True))
model.add(TimeDistributed(Dense(1)))
model.compile(loss='mean_squared_error', optimizer='adam')
# fit network
model.fit(X, y, epochs=n_epochs, batch_size=n_batch, verbose=2)
Run Code Online (Sandbox Code Playgroud)

图2:多对多LSTM架构

问题是算法没有学习这个例子.它预测的值与属性的值非常相似.我是否正确建模了问题?

第二个问题:另一个想法是用1输入和1输出训练算法,但是在测试期间如何在不查看'1输入'的情况下预测整个2015时间序列?测试数据将具有与训练数据不同的形状.

time-series forward prediction lstm keras

16
推荐指数
1
解决办法
9560
查看次数