标签: lstm

tensorflow - 如何正确使用变分循环辍学

tensorflow配置dropout包装器具有三种不同的 dropout概率可以设置:input_keep_prob, output_keep_prob, state_keep_prob.

我想通过将variational_recurrent参数设置为 true 来为我的 LSTM 单元使用变分 dropout 。但是,我不知道必须使用三个 dropout 概率中的哪一个才能使变分 dropout 正常运行。

有人可以提供帮助吗?

lstm tensorflow recurrent-neural-network

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

Tensorflow:了解使用和不使用 Dropout Wrapper 的 LSTM 输出

import tensorflow as tf
import tensorflow.contrib.eager as tfe

tfe.enable_eager_execution()

x = tf.range(1, 11, dtype=tf.float32)
x = tf.reshape(x, (5, 1, 2))

cell = tf.contrib.rnn.LSTMCell(10)
initial_state = cell.zero_state(5, dtype=tf.float32)

y1, _ = tf.nn.dynamic_rnn(cell, x, dtype=tf.float32, initial_state=initial_state)

y2, _ = tf.nn.dynamic_rnn(
    tf.contrib.rnn.DropoutWrapper(cell, input_keep_prob=1.0, output_keep_prob=0.5, state_keep_prob=1.0),
    x,
    dtype=tf.float32,
    initial_state=initial_state)
Run Code Online (Sandbox Code Playgroud)

我正在使用 Tensorflow 1.8.0。

我期望的输出y2y1因为y2使用相同的 LSTM 单元相似,y1除了它也通过一个 dropout 层。由于 dropout 仅应用于 LSTM 单元的输出,我认为除了这里和那里的几个 0 之外,的值y2将相同y1。但这就是我得到的y1

<tf.Tensor: id=5540, shape=(5, 1, 10), dtype=float32, numpy= …
Run Code Online (Sandbox Code Playgroud)

lstm tensorflow dropout

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

如何在 Keras 中为有状态 LSTM 准备数据?

我想开发一种用于二元分类的时间序列方法,在 Keras 中使用有状态的 LSTM

这是我的数据的外观。我得到了很多,比如说N,录音。每个记录包含 22 个长度的时间序列M_i(i=1,...N)。我想在 Keras 中使用有状态模型,但我不知道如何重塑我的数据,尤其是我应该如何定义我的batch_size.

这是我如何进行statelessLSTM。我look_back为所有录音创建了长度序列,以便我拥有大小数据(N*(M_i-look_back), look_back, 22=n_features)

这是我为此目的使用的功能:

def create_dataset(feat,targ, look_back=1):
    dataX, dataY = [], []
#     print (len(targ)-look_back-1)
    for i in range(len(targ)-look_back):
        a = feat[i:(i+look_back), :]
        dataX.append(a)
        dataY.append(targ[i + look_back-1])
    return np.array(dataX), np.array(dataY)
Run Code Online (Sandbox Code Playgroud)

其中feat是大小的二维数据数组(n_samples, n_features)(对于每个记录),targ是目标向量。

所以,我的问题是,根据上面解释的数据,如何为有状态模型重塑数据并考虑批处理概念?有什么预防措施吗?

我想要做的是能够将每个录音的每个 time_step 分类为癫痫发作/非癫痫发作。

编辑:我想到的另一个问题是:我的录音包含不同长度的序列。我的有状态模型可以学习每个记录的长期依赖关系,这意味着 batch_size 从一个记录到另一个记录不同......如何处理?在完全不同的序列(test_set)上进行测试时会不会导致泛化问题?

谢谢

python lstm keras

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

Keras 验证准确度为 0,并在整个训练过程中保持不变

我正在 Python 中使用 Tensorflow/Keras 进行时间序列分析。整个 LSTM 模型看起来像,

model = keras.models.Sequential()
model.add(keras.layers.LSTM(25, input_shape = (1,1), activation =    'relu', dropout = 0.2, return_sequences = False))
model.add(keras.layers.Dense(1))
model.compile(optimizer = 'adam', loss = 'mean_squared_error', metrics=['acc'])
tensorboard = keras.callbacks.TensorBoard(log_dir="logs/{}".format(time()))
es = keras.callbacks.EarlyStopping(monitor='val_acc', mode='max', verbose=1, patience=50)
mc = keras.callbacks.ModelCheckpoint('/home/sukriti/best_model.h5',   monitor='val_loss', mode='min', save_best_only=True)
history = model.fit(trainX_3d, trainY_1d, epochs=50, batch_size=10, verbose=2, validation_data = (testX_3d, testY_1d), callbacks=[mc, es, tensorboard])
Run Code Online (Sandbox Code Playgroud)

我有以下结果,

Train on 14015 samples, validate on 3503 samples
Epoch 1/50
- 3s - loss: 0.0222 - acc: 7.1352e-05 - …
Run Code Online (Sandbox Code Playgroud)

machine-learning time-series neural-network lstm keras

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

如何在 Tensorflow 中拆分 LSTM 的训练数据和测试数据以进行时间序列预测

我最近从https://github.com/Hvass-Labs/TensorFlow-Tutorials/blob/master/23_Time-Series-Prediction.ipynb学习了用于时间序列预测的 LSTM

在他的教程中,他说:我们将使用以下函数创建一批从训练数据中随机选取的较短子序列,而不是在近 30 万个观察的完整序列上训练循环神经网络。

def batch_generator(batch_size, sequence_length):
"""
Generator function for creating random batches of training-data.
"""

# Infinite loop.
while True:
    # Allocate a new array for the batch of input-signals.
    x_shape = (batch_size, sequence_length, num_x_signals)
    x_batch = np.zeros(shape=x_shape, dtype=np.float16)

    # Allocate a new array for the batch of output-signals.
    y_shape = (batch_size, sequence_length, num_y_signals)
    y_batch = np.zeros(shape=y_shape, dtype=np.float16)

    # Fill the batch with random sequences of data.
    for i in range(batch_size):
        # Get a random …
Run Code Online (Sandbox Code Playgroud)

time-series python-3.x cross-validation lstm tensorflow

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

堆叠 LSTM 网络中每个 LSTM 层的输入是什么?

我在理解堆叠 LSTM 网络中层的输入-输出流时遇到了一些困难。假设我创建了一个堆叠的 LSTM 网络,如下所示:

# parameters
time_steps = 10
features = 2
input_shape = [time_steps, features]
batch_size = 32

# model
model = Sequential()
model.add(LSTM(64, input_shape=input_shape,  return_sequences=True))
model.add(LSTM(32,input_shape=input_shape))
Run Code Online (Sandbox Code Playgroud)

我们的堆叠 LSTM 网络由 2 个 LSTM 层组成,分别具有 64 个和 32 个隐藏单元。在这种情况下,我们希望在每个时间步长中,第 1 个 LSTM 层 -LSTM(64)- 将作为输入传递给第 2 个 LSTM 层 -LSTM(32)- 一个大小为 的向量[batch_size, time-step, hidden_unit_length],它表示隐藏状态当前时间步长的第 1 个 LSTM 层。让我困惑的是:

  1. 第二个 LSTM 层 -LSTM(32)- 是否接收X(t)(作为输入)第一层的隐藏状态 -LSTM(64)- 具有大小[batch_size, time-step, hidden_unit_length]并通过它自己的隐藏网络 - 在这种情况下由 32 个节点组成-?
  2. 如果第一个是真的,为什么input_shape …

stacked deep-learning lstm recurrent-neural-network

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

如何在 keras 序列模型中添加注意力层(以及 Bi-LSTM 层)?

我试图找到一种在 Keras 序列模型中添加注意力层的简单方法。但是,我在实现这一目标时遇到了很多问题。

我是深度学习的新手,所以我选择 Keras 作为我的开始。我的任务是构建一个带有注意力模型的 Bi-LSTM。在 IMDB 数据集上,我建立了一个 Bi-LSTM 模型。我找到了一个名为“keras-self-attention”的包?https://pypi.org/project/keras-self-attention/?? 但是在 keras Sequential 模型中添加注意力层时遇到了一些问题。

from keras.datasets import imdb
from keras.preprocessing import sequence
from keras_self_attention import SeqSelfAttention

max_features = 10000
maxlen = 500
batch_size = 32

# data
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)
x_train = sequence.pad_sequences(x_train, maxlen= maxlen)
x_test = sequence.pad_sequences(x_test, maxlen=maxlen)

# model 
from keras import models
from keras import layers
from keras.layers import Dense, Embedding, LSTM


model = models.Sequential()
model.add( Embedding(max_features, 32) )
model.add( Bidirectional( …
Run Code Online (Sandbox Code Playgroud)

python-3.x lstm keras attention-model

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

知道在 Keras 中需要多少个 LSTM 单元以及每个 LSTM 单元中有多少个单元的规则是什么?

我知道 LSTM 单元内部有许多 ANN。

但是在为同一问题定义隐藏层时,我看到有些人只使用 1 个 LSTM 单元,而其他人则使用 2、3 个 LSTM 单元,如下所示 -

model = Sequential()
model.add(LSTM(256, input_shape=(n_prev, 1), return_sequences=True))
model.add(Dropout(0.3))
model.add(LSTM(128, input_shape=(n_prev, 1), return_sequences=True))
model.add(Dropout(0.3))
model.add(LSTM(64, input_shape=(n_prev, 1), return_sequences=False))
model.add(Dropout(0.3))
model.add(Dense(1))
model.add(Activation('linear'))
Run Code Online (Sandbox Code Playgroud)
  1. 关于您应该使用多少个 LSTM 单元,是否有任何规则?或者它只是手动实验?
  2. 紧随其后的另一个问题是,您应该在 LSTM 单元中使用多少个单元。对于同样的问题,有些人需要 256,有些人需要 64。

python lstm keras tensorflow recurrent-neural-network

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

PyTorch LSTM:运行时错误:无效参数 0:张量的大小必须匹配,但维度 0 除外。在维度 1 中得到 1219 和 440

我有一个基本的 PyTorch LSTM:

import torch.nn as nn
import torch.nn.functional as F

class BaselineLSTM(nn.Module):
    def __init__(self):
        super(BaselineLSTM, self).__init__()

        self.lstm = nn.LSTM(input_size=13, hidden_size=13)

    def forward(self, x):
        x = self.lstm(x)

        return x
Run Code Online (Sandbox Code Playgroud)

对于我的数据,我有:

train_set = CorruptedAudioDataset(corrupted_path, train_set=True)
train_loader = torch.utils.data.DataLoader(train_set, batch_size=128, shuffle=True, **kwargs)
Run Code Online (Sandbox Code Playgroud)

我的 CorruptedAudioDataset有:

    def __getitem__(self, index):
        corrupted_sound_file = SoundFile(self.file_paths[index])
        corrupted_samplerate = corrupted_sound_file.samplerate
        corrupted_signal_audio_array = corrupted_sound_file.read()

        clean_path = self.file_paths[index].split('/')
        # print(self.file_paths[index], clean_path)
        clean_sound_file = SoundFile(self.file_paths[index])
        clean_samplerate = clean_sound_file.samplerate
        clean_signal_audio_array = clean_sound_file.read()


        corrupted_mfcc = mfcc(corrupted_signal_audio_array, samplerate=corrupted_samplerate)
        clean_mfcc = mfcc(clean_signal_audio_array, samplerate=clean_samplerate)


        print('return', corrupted_mfcc.shape, …
Run Code Online (Sandbox Code Playgroud)

python lstm pytorch

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

即使在使用正则化器后,LSTM 中的过度拟合

我有一个时间序列预测问题,正在构建一个如下所示的 LSTM:

def create_model():
    model = Sequential()
    model.add(LSTM(50,kernel_regularizer=l2(0.01), recurrent_regularizer=l2(0.01), bias_regularizer=l2(0.01), input_shape=(train_X.shape[1], train_X.shape[2])))
    model.add(Dropout(0.591))
    model.add(Dense(1))
    model.compile(loss='mean_squared_error', optimizer='adam')
    return model
Run Code Online (Sandbox Code Playgroud)

当我在 5 个分割上训练模型时,如下所示:

tss = TimeSeriesSplit(n_splits = 5)
X = data.drop(labels=['target_prediction'], axis=1)
y = data['target_prediction'] 
for train_index, test_index in tss.split(X):
   train_X, test_X = X.iloc[train_index, :].values, X.iloc[test_index,:].values
   train_y, test_y = y.iloc[train_index].values, y.iloc[test_index].values
   model=create_model()
   history = model.fit(train_X, train_y, epochs=10, batch_size=64,validation_data=(test_X, test_y), verbose=0, shuffle=False)
Run Code Online (Sandbox Code Playgroud)

我遇到过拟合问题。附上损失图在此处输入图片说明

我不确定为什么在我的 Keras 模型中使用正则化器时会出现过度拟合。任何帮助表示赞赏。

编辑: 尝试架构

def create_model():
    model = Sequential()
    model.add(LSTM(20, input_shape=(train_X.shape[1], train_X.shape[2])))
    model.add(Dense(1))
    model.compile(loss='mean_squared_error', optimizer='adam')
    return model


def create_model(x,y): …
Run Code Online (Sandbox Code Playgroud)

python deep-learning lstm keras recurrent-neural-network

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