目前,我使用默认的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
在哪里可以找到指定RNN和Seq2Seq模型中可用函数的API引用.
在github页面中,提到rnn和seq2seq被移动到tf.nn
给定状态向量,我们可以通过连续生成每个输出以贪婪的方式递归地解码序列,其中每个预测以先前的输出为条件.我最近读了一篇论文,描述了在解码过程中使用光束搜索,光束大小为1(k = 1).如果我们只是在每一步保留最佳输出,这不是贪婪解码的同一个东西,并没有提供光束搜索通常提供的任何好处吗?
我目前正在编写用于循环网络训练的Keras 教程,但我无法理解有状态 LSTM 概念。为了使事情尽可能简单,序列具有相同的长度seq_length。据我所知,输入数据是有形状的(n_samples, seq_length, n_features),然后我们在n_samples/M批量大小上训练我们的 LSTM M,如下所示:
对于每批:
(seq_length, n_features)输入二维张量,并为每个输入二维张量计算梯度在本教程的示例中,输入 2D 张量是输入seq_length编码为长度向量的字母大小序列n_features。但是,教程说在 LSTM 的 Keras 实现中,在输入整个序列(2D-张量)后不会重置隐藏状态,而是在输入一批序列以使用更多上下文之后。
为什么保持先前序列的隐藏状态并将其用作我们当前序列的初始隐藏状态可以改善我们测试集的学习和预测,因为在进行预测时“先前学习”的初始隐藏状态将不可用?此外,Keras 的默认行为是在每个 epoch 开始时打乱输入样本,以便在每个 epoch 更改批处理上下文。这种行为似乎与通过批处理保持隐藏状态相矛盾,因为批处理上下文是随机的。
为简洁而编辑。
我正在尝试建立一个LSTM模型,请参考以下文档示例
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,仍然有相同的问题。
我正在使用 aws ec2 为多标签分类任务训练模型。训练后,我在同一台机器上测试了模型,结果很好(准确度为 90+%)。但是,当我将保存的模型导入本地机器(没有 GPU)后,它给出了不同的结果(准确度小于 5%)。关于为什么会发生这种情况的任何建议?谢谢。
TL;DR:当从 GPU机器转移到 CPU时,Keras/tensorflow模型会产生不同的结果。
我正在播放关于递归神经网络的一些演示.
我注意到每列中我的数据规模差异很大.所以我在考虑将数据批量输入我的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
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
从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
考虑到室内和室外的气候,我试图预测墙壁的湿热响应。根据文献研究,我相信使用RNN应该可以做到这一点,但我一直无法获得很好的准确性。
该数据集具有12个输入要素(外部和内部气候数据的时间序列)和10个输出要素(湿热响应的时间序列),均包含10年的小时值。该数据是使用湿热模拟软件创建的,没有丢失的数据。
与大多数时间序列预测问题不同,我想在每个时间步长预测输入要素时间序列的全长响应,而不是时间序列的后续值(例如财务时间序列预测)。我还没有找到类似的预测问题(在相似或其他领域),因此,如果您知道其中一个,那么欢迎参考。
我认为使用RNN应该可以实现,因此我目前正在使用Keras的LSTM。在训练之前,我会通过以下方式预处理数据:
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
lstm ×4
tensorflow ×4
keras ×3
amazon-ec2 ×1
beam-search ×1
prediction ×1
python ×1
pytorch ×1
stateful ×1
time-series ×1