标签: lstm

使用 numpy 为 RNN 准备数据的最快方法是什么?

我目前有一个(1631160,78)np 数组作为神经网络的输入。我想尝试使用 LSTM,它需要 3D 结构作为输入数据。我目前正在使用以下代码来生成所需的 3D 结构,但速度非常慢(预计到达时间 > 1 天)。有没有更好的方法用 numpy 来做到这一点?

我当前生成数据的代码:

def transform_for_rnn(input_x, input_y, window_size):
    output_x = None
    start_t = time.time()
    for i in range(len(input_x)):
        if i > 100 and i % 100 == 0:
            sys.stdout.write('\rTransform Data: %d/%d\tETA:%s'%(i, len(input_x), str(datetime.timedelta(seconds=(time.time()-start_t)/i * (len(input_x) - i)))))
            sys.stdout.flush()
        if output_x is None:
            output_x = np.array([input_x[i:i+window_size, :]])
        else:
            tmp = np.array([input_x[i:i+window_size, :]])
            output_x = np.concatenate((output_x, tmp))

    print
    output_y = input_y[window_size:]
    assert len(output_x) == len(output_y)
    return output_x, output_y
Run Code Online (Sandbox Code Playgroud)

python performance numpy machine-learning lstm

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

Keras - 类型错误:只有整数标量数组可以转换为标量索引

我正在尝试学习 keras,特别是用于时间序列异常检测的 LSTM,为此我一直在关注在线示例。但由于某种原因,它不起作用。我已经按照之前有关 的帖子中的建议进行了操作TypeError: only integer scalar arrays can be converted to a scalar index,但没有任何效果。由此看来,我认为这与 Numpy 有关。这是我的代码:

import numpy
import pandas
import matplotlib.pyplot as plt
import math
import tensorflow as tf
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error

# fix random seed for reproducibility
numpy.random.seed(7)

#load the dataset
dataframe = pandas.read_csv('international-airline-passengers.csv', usecols=[1], engine='python', skipfooter=3)
dataset = dataframe.values
dataset = dataset.astype('float32')

#normalize the dataset

scaler = …
Run Code Online (Sandbox Code Playgroud)

python numpy lstm keras

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

Keras——使用 LSTM 层时精度较低,但不使用 LSTM 时精度很好

我正在使用 IMDB 数据集在 Keras 中训练模型。对于这个带有 LSTM 层的模型,准确率约为 50%:

 model = Sequential()
 model.add(Embedding(max_features, 32))
 model.add(LSTM(32, return_sequences=True))
 model.add(LSTM(32, return_sequences=True))
 model.add(LSTM(32))
 model.add(Dense(1, activation='sigmoid'))
Run Code Online (Sandbox Code Playgroud)

准确性:

loss: 0.6933 - acc: 0.5007 - val_loss: 0.6932 - val_acc: 0.4947
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用单个 LSTM 层,但它也提供了类似的准确性。

然而,如果我不使用 LSTM 层,准确率会达到 82% 左右

model = models.Sequential()
model.add(layers.Dense(16, kernel_regularizer=regularizers.l1(0.001), activation='relu', input_shape=(10000,)))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(16, kernel_regularizer=regularizers.l1(0.001), activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(1, activation='sigmoid'))
Run Code Online (Sandbox Code Playgroud)

准确性:

 loss: 0.6738 - acc: 0.8214 - val_loss: 0.6250 - val_acc: 0.8320
Run Code Online (Sandbox Code Playgroud)

这就是我编译和拟合模型的方式:

model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])
model.fit(partial_x_train, partial_y_train, epochs=Numepochs, batch_size=Batchsize, validation_data=(x_val, y_val))
Run Code Online (Sandbox Code Playgroud)

这该如何解释呢?我认为 LSTM 对于顺序文本数据非常有效?

python machine-learning deep-learning lstm keras

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

TimeDistributed Layers 与 ConvLSTM-2D

谁能帮我解释一下时间分布式层(来自Keras Wrapper)和 ConvLSTM-2D (卷积 LSTM)之间的差异,目的、用法等?

deep-learning conv-neural-network lstm keras

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

如何测试使用教师强制训练的模型

我使用 keras 来训练 seq2seq 模型(keras.models.Model)。模型的 X 和 y 是 [X_encoder, X_decoder] , y 即编码器和解码器输入和标签的列表(请注意,解码器输入 X_decoder 是 \xe2\x80\x98y\xe2\x80\x99 ,前面有一个位置比实际的 y 基本上是老师强迫的)。

\n\n

所以我现在的问题是在训练之后,当涉及到实际预测时,我没有任何标签,如何为我的输入提供 \xe2\x80\x98X_decoder\xe2\x80\x99 ?还是我要训练别的东西?

\n\n

这是模型定义的片段(如果有帮助的话):)

\n\n
# Encoder\nencoder_inputs = Input(batch_shape=(batch_size, max_len,), dtype='int32')\nencoder_embedding = embedding_layer(encoder_inputs)\nencoder_LSTM = CuDNNLSTM(hidden_dim, return_state=True, stateful=True)\nencoder_outputs, state_h, state_c = encoder_LSTM(encoder_embedding)\n\n# Decoder\ndecoder_inputs = Input(shape=(max_len,), dtype='int32')\ndecoder_embedding = embedding_layer(decoder_inputs)\ndecoder_LSTM = CuDNNLSTM(hidden_dim, return_state=True, return_sequences=True)\ndecoder_outputs, _, _ = decoder_LSTM(decoder_embedding, initial_state=[state_h, state_c])\n\n# Output\noutputs = TimeDistributed(Dense(vocab_size, activation='softmax'))(decoder_outputs)\nmodel = Model([encoder_inputs, decoder_inputs], outputs)\n\n# model fitting:\nmodel.fit([X_encoder, X_decoder], y, steps_per_epoch=int(number_of_train_samples/batch_size),\nepochs=epochs)\n
Run Code Online (Sandbox Code Playgroud)\n

nlp lstm recurrent-neural-network seq2seq

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

Keras 的默认 LSTM 是展开的还是有状态的?

在 Keras 文档中, 和statefulunroll设置为False。那么如果这两者都不是的话,Keras 中的循环是如何完成的呢? Keras RNN 文档

我检查了Keras中RNN的源代码,似乎默认操作是在每个时间步初始化LSTM。我累了吗?

       if initial_state is not None:
            pass
       elif self.stateful:
            initial_state = self.states
       else:
            initial_state = self.get_initial_state(inputs)
Run Code Online (Sandbox Code Playgroud)

如果我是正确的,是否意味着对于时间序列分析,设置 会更好unroll=True

machine-learning deep-learning lstm keras recurrent-neural-network

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

Keras padding 将我的所有值替换为 0

为了适应我想在单变量 LSTM 中使用并且具有“多步时间”的数据序列,最简单的方法是进行一些填充。我的初始数据集如下所示,它是一个 numpyarray:

X
[0.295046, 0.325147, 0.361293]
[0.249307,0.444077]
[0.570017,0.525082,0.475404,0.390616]
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的是:

from keras.preprocessing.sequence import pad_sequences
padded_x = pad_sequences(X)
print(padded_x)
Run Code Online (Sandbox Code Playgroud)

而不是添加零来“完成”数据集:

X
[0.0, 0.295046, 0.325147, 0.361293]
[0.0, 0.0, 0.249307,0.444077]
[0.570017,0.525082,0.475404,0.390616]
Run Code Online (Sandbox Code Playgroud)

它只是将所有值替换为 0。我不知道我错过了什么......

提前致谢 :)

python padding lstm

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

nn.Linear() 在 pytorch 的最后做什么,为什么有必要?

我正在使用一些训练 lstm 生成序列的代码。训练模型后,调用 lstm() 方法:

x = some_input
lstm_output, (h_n, c_n) = lstm(x, hc) 
funcc = nn.Linear(in_features=lstm_num_hidden,
                  output_features=vocab_size,
                  bias=True)
func_output = func(lstm_output)
Run Code Online (Sandbox Code Playgroud)

我已经查看了文档,nn.Linear()但我仍然不明白这个转换正在做什么以及为什么它是必要的。如果 lstm 已经经过训练,那么它给出的输出应该已经具有预先建立的维度。该输出(lstm_output)将是生成的序列,或者在我的例子中是向量数组。我在这里错过了什么吗?

neural-network lstm recurrent-neural-network pytorch

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

无法使用 tf.contrib

我导入了 tensorflow 模块,但无法使用 tf.contrib。我不知道是什么问题。我尝试在不同版本中运行它,但我一直得到相同的输出。

模块导入:

import tensorflow.compat.v1 as tf1
tf1.disable_v2_behavior() 
import tensorflow as tf2
Run Code Online (Sandbox Code Playgroud)

代码:

tf2.contrib.rnn.LSTMCell(num_units=num_nodes[li],
                            state_is_tuple=True,
                            initializer= tf.contrib.layers.xavier_initializer()
                           )
Run Code Online (Sandbox Code Playgroud)

输出:

AttributeError: module 'tensorflow' has no attribute 'contrib'
Run Code Online (Sandbox Code Playgroud)

python machine-learning attributeerror lstm tensorflow

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

将外生变量添加到我的单变量 LSTM 模型中

我的数据框是每小时一次(我的 df 的索引),我想预测 y。

> df.head()

          Date           y             
    2019-10-03 00:00:00 343   
    2019-10-03 01:00:00 101  
    2019-10-03 02:00:00 70  
    2019-10-03 03:00:00 67  
    2019-10-03 04:00:00 122  
Run Code Online (Sandbox Code Playgroud)

我现在将导入库并训练模型:

  from keras.models import Sequential
  from keras.layers import Dense
  from keras.layers import LSTM
  from sklearn.preprocessing import MinMaxScaler
  min_max_scaler = MinMaxScaler()
  prediction_hours = 24
  df_train= df[:len(df)-prediction_hours]
  df_test= df[len(df)-prediction_hours:]
  print(df_train.head())
  print('/////////////////////////////////////////')
  print (df_test.head())
  training_set = df_train.values
  training_set = min_max_scaler.fit_transform(training_set)

  x_train = training_set[0:len(training_set)-1]
  y_train = training_set[1:len(training_set)]
  x_train = np.reshape(x_train, (len(x_train), 1, 1))
  num_units = 2
  activation_function = 'sigmoid'
  optimizer = …
Run Code Online (Sandbox Code Playgroud)

python forecasting lstm keras recurrent-neural-network

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