标签: recurrent-neural-network

如何确定seq2seq tensorflow RNN训练模型的最大批量大小

目前,我使用默认的64作为seq2seq tensorflow模型的批量大小.什么是最大批量大小,层大小等我可以使用具有12 GB RAM和Haswell-E xeon 128GB RAM的单个Titan X GPU.输入数据将转换为嵌入.以下是我正在使用的一些有用参数,似乎单元格输入大小为1024:

encoder_inputs: a list of 2D Tensors [batch_size x cell.input_size].
 decoder_inputs: a list of 2D Tensors [batch_size x cell.input_size].
 tf.app.flags.DEFINE_integer("size", 1024, "Size of each model layer.")
Run Code Online (Sandbox Code Playgroud)

那么基于我的硬件,我可以去的最大批量大小,层数,输入大小是多少?目前GPU显示99%的内存被占用.

machine-learning gpu-programming tensorflow recurrent-neural-network

4
推荐指数
2
解决办法
4611
查看次数

张量流中RNN和Seq2Seq模型的API参考

在哪里可以找到指定RNN和Seq2Seq模型中可用函数的API引用.

在github页面中,提到rnn和seq2seq被移动到tf.nn

tensorflow recurrent-neural-network

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

贪婪解码器RNN和k = 1的波束解码器之间有什么区别?

给定状态向量,我们可以通过连续生成每个输出以贪婪的方式递归地解码序列,其中每个预测以先前的输出为条件.我最近读了一篇论文,描述了在解码过程中使用光束搜索,光束大小为1(k = 1).如果我们只是在每一步保留最佳输出,这不是贪婪解码的同一个东西,并没有提供光束搜索通常提供的任何好处吗?

beam-search recurrent-neural-network

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

批次内的 LSTM 状态

我目前正在编写用于循环网络训练Keras 教程,但我无法理解有状态 LSTM 概念。为了使事情尽可能简单,序列具有相同的长度seq_length。据我所知,输入数据是有形状的(n_samples, seq_length, n_features),然后我们在n_samples/M批量大小上训练我们的 LSTM M,如下所示:

对于每批:

  1. (seq_length, n_features)输入二维张量,并为每个输入二维张量计算梯度
  2. 将这些梯度相加以获得批次的总梯度
  3. 反向传播梯度并更新权重

在本教程的示例中,输入 2D 张量是输入seq_length编码为长度向量的字母大小序列n_features。但是,教程说在 LSTM 的 Keras 实现中,在输入整个序列(2D-张量)后不会重置隐藏状态,而是在输入一批序列以使用更多上下文之后。

为什么保持先前序列的隐藏状态并将其用作我们当前序列的初始隐藏状态可以改善我们测试集的学习和预测,因为在进行预测时“先前学习”的初始隐藏状态将不可用?此外,Keras 的默认行为是在每个 epoch 开始时打乱输入样本,以便在每个 epoch 更改批处理上下文。这种行为似乎与通过批处理保持隐藏状态相矛盾,因为批处理上下文是随机的。

stateful lstm keras recurrent-neural-network

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

Keras LSTM第二层(但不是第一层)中的输入形状误差

为简洁而编辑。

我正在尝试建立一个LSTM模型,请参考以下文档示例

https://keras.io/layers/recurrent/

from keras.models import Sequential
from keras.layers import LSTM
Run Code Online (Sandbox Code Playgroud)

以下三行代码(加上注释)直接来自上面的文档链接:

model = Sequential()
model.add(LSTM(32, input_dim=64, input_length=10))

# for subsequent layers, not need to specify the input size:
model.add(LSTM(16))
Run Code Online (Sandbox Code Playgroud)

ValueError:输入0与层lstm_2不兼容:预期ndim = 3,找到的ndim = 2

在执行第二个model.add()语句之后,但在将模型暴露给我的数据甚至编译它之前,我在上面得到了该错误。

我在这里做错了什么?任何帮助深表感谢。仅供参考,我正在使用Keras 1.2.1。编辑:刚刚升级到当前的1.2.2,仍然有相同的问题。

python lstm keras tensorflow recurrent-neural-network

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

为什么我的 keras 神经网络模型在不同的机器上输出不同的值?

我正在使用 aws ec2 为多标签分类任务训练模型。训练后,我在同一台机器上测试了模型,结果很好(准确度为 90+%)。但是,当我将保存的模型导入本地机器(没有 GPU)后,它给出了不同的结果(准确度小于 5%)。关于为什么会发生这种情况的任何建议?谢谢。

TL;DR:当从 GPU机器转移到 CPU时,Keras/tensorflow模型会产生不同的结果。

amazon-ec2 keras recurrent-neural-network

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

在将它们投入RNN之前,我应该将其功能标准化吗?

我正在播放关于递归神经网络的一些演示.

我注意到每列中我的数据规模差异很大.所以我在考虑将数据批量输入我的RNN之前做一些预处理工作.关闭列是我希望将来预测的目标.

     open   high    low     volume  price_change  p_change     ma5    ma10  \
0  20.64  20.64  20.37  163623.62         -0.08     -0.39  20.772  20.721
1  20.92  20.92  20.60  218505.95         -0.30     -1.43  20.780  20.718
2  21.00  21.15  20.72  269101.41         -0.08     -0.38  20.812  20.755
3  20.70  21.57  20.70  645855.38          0.32      1.55  20.782  20.788
4  20.60  20.70  20.20  458860.16          0.10      0.48  20.694  20.806

     ma20      v_ma5     v_ma10     v_ma20  close
0  20.954  351189.30  388345.91  394078.37  20.56
1  20.990  373384.46  403747.59  411728.38  20.64
2  21.022  392464.55  405000.55  426124.42  20.94
3 …
Run Code Online (Sandbox Code Playgroud)

machine-learning neural-network deep-learning recurrent-neural-network

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

如何提高 LSTM、GRU 循环神经网络的分类精度

Tensorflow 中的二元分类问题:

我已经阅读了在线教程并尝试使用门控循环单元 (GRU) 将其应用于实时问题。我已经尝试了所有我知道的改进分类的可能性。

1) 开始添加堆叠的 RNN(GRU) 层 2) 增加每个 RNN 层的隐藏单元 3) 为隐藏层添加“sigmoid”和“RelU”激活函数 4) 标准化输入数据 5) 更改超参数

请找到数据集的链接:https : //github.com/madhurilalitha/Myfirstproject/blob/master/ApplicationLayerTrainingData1.txt

如果您可以浏览数据集,它会带有“正常”和“非正常”标签。我将“正常”编码为“1 0”,将异常编码为“0 1”。我还将数据集更改为以下形状的 3D:

新列车 X 的形状 (7995, 5, 40) 新列车 Y 的形状 (7995, 2) 新测试 X 的形状 (1994, 5, 40) 新测试 Y 的形状 (1994, 2)

我不太确定我在哪里缺少逻辑,有人可以帮我找到代码中的错误吗?

测试数据的分类准确率为52.3%。即使在训练数据上,它也具有相同的精度。请在下面找到代码:

#Hyper Parameters for the model
learning_rate = 0.001   
n_classes = 2    
display_step = 100    
input_features = train_X.shape[1] #No of selected features(columns)    
training_cycles = 1000    
time_steps = 5 # No …
Run Code Online (Sandbox Code Playgroud)

deep-learning lstm tensorflow recurrent-neural-network gated-recurrent-unit

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

没有MAX_LENGTH的AttentionDecoderRNN

从PyTorch Seq2Seq教程,http: //pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html#attention-decoder

我们看到注意机制严重依赖于MAX_LENGTH参数来确定输出维数attn -> attn_softmax -> attn_weights,即

class AttnDecoderRNN(nn.Module):
    def __init__(self, hidden_size, output_size, dropout_p=0.1, max_length=MAX_LENGTH):
        super(AttnDecoderRNN, self).__init__()
        self.hidden_size = hidden_size
        self.output_size = output_size
        self.dropout_p = dropout_p
        self.max_length = max_length

        self.embedding = nn.Embedding(self.output_size, self.hidden_size)
        self.attn = nn.Linear(self.hidden_size * 2, self.max_length)
        self.attn_combine = nn.Linear(self.hidden_size * 2, self.hidden_size)
        self.dropout = nn.Dropout(self.dropout_p)
        self.gru = nn.GRU(self.hidden_size, self.hidden_size)
        self.out = nn.Linear(self.hidden_size, self.output_size)
Run Code Online (Sandbox Code Playgroud)

进一步来说

self.attn = nn.Linear(self.hidden_size * 2, self.max_length)
Run Code Online (Sandbox Code Playgroud)

我理解MAX_LENGTH变量是减少no的机制.需要训练的参数AttentionDecoderRNN.

如果我们没有MAX_LENGTH预先决定.我们应该用什么值初始化attn图层? …

machine-translation recurrent-neural-network attention-model sequence-to-sequence pytorch

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

基于RNN的非线性多元时间序列响应预测

考虑到室内和室外的气候,我试图预测墙壁的湿热响应。根据文献研究,我相信使用RNN应该可以做到这一点,但我一直无法获得很好的准确性。

该数据集具有12个输入要素(外部和内部气候数据的时间序列)和10个输出要素(湿热响应的时间序列),均包含10年的小时值。该数据是使用湿热模拟软件创建的,没有丢失的数据。

数据集功能: 输入功能

数据集目标: 输出功能

与大多数时间序列预测问题不同,我想在每个时间步长预测输入要素时间序列的全长响应,而不是时间序列的后续值(例如财务时间序列预测)。我还没有找到类似的预测问题(在相似或其他领域),因此,如果您知道其中一个,那么欢迎参考。


我认为使用RNN应该可以实现,因此我目前正在使用Keras的LSTM。在训练之前,我会通过以下方式预处理数据:

  1. 丢弃第一年的数据,因为壁的湿热响应的最初步骤受初始温度和相对湿度的影响。
  2. 分为训练和测试集。训练集包含前8年的数据,测试集包含其余2年的数据。
  3. 使用StandardScalerSklearn 归一化训练集(零均值,单位方差)。类似地使用均值与训练集的方差归一化测试集。

这导致:X_train.shape = (1, 61320, 12)y_train.shape = (1, 61320, 10)X_test.shape = (1, 17520, 12)y_test.shape = (1, 17520, 10)

由于这些都是较长的时间序列,因此我将使用有状态LSTM并按照此处的说明使用stateful_cut()函数削减时间序列。我只有1个样本,所以只有1个batch_size。因为T_after_cut我尝试了24和120(24 * 5);24似乎可以提供更好的结果。这导致X_train.shape = (2555, 24, 12)y_train.shape = (2555, 24, 10)X_test.shape = (730, 24, 12)y_test.shape = (730, 24, 10)

接下来,我按以下步骤构建和训练LSTM模型:

model = Sequential()
model.add(LSTM(128, 
               batch_input_shape=(batch_size,T_after_cut,features), 
               return_sequences=True,
               stateful=True,
               )) …
Run Code Online (Sandbox Code Playgroud)

machine-learning time-series prediction lstm recurrent-neural-network

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