标签: recurrent-neural-network

简单的回归神经网络输入形状

我试图用keras编写一个非常简单的RNN示例,但结果并不像预期的那样.

我的X_train是一个长度为6000的重复列表,如: 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, ...

我将其格式化为: (6000, 1, 1)

我的y_train是一个长度为6000的重复列表,如: 1, 0.8, 0.6, 0, 0, 0, 1, 0.8, 0.6, 0, ...

我将其格式化为: (6000, 1)

根据我的理解,递归神经网络应该学会正确地预测0.8和0.6,因为它可以记住两个时间段前X_train中的1.

我的模特:

model=Sequential()
model.add(SimpleRNN(input_dim=1, output_dim=50))
model.add(Dense(output_dim=1, activation = "sigmoid"))
model.compile(loss="mse", optimizer="rmsprop")
model.fit(X_train, y_train, nb_epoch=10, batch_size=32)
Run Code Online (Sandbox Code Playgroud)

该模型可以成功训练,损失最小〜0.1015但结果不如预期.

test case ---------------------------------------------  model result -------------expected result 

model.predict(np.array([[[1]]])) --------------------0.9825--------------------1

model.predict(np.array([[[1],[0]]])) ----------------0.2081--------------------0.8

model.predict(np.array([[[1],[0],[0]]])) ------------0.2778 -------------------0.6

model.predict(np.array([[[1],[0],[0],[0]]]))---------0.3186--------------------0
Run Code Online (Sandbox Code Playgroud)

我在这里有什么误解吗?

python neural-network keras recurrent-neural-network

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

Tensorflow seq2seq多维回归

编辑:我编辑了我的代码来制作seq2seq教程/练习,这里是:https: //github.com/guillaume-chevalier/seq2seq-signal-prediction


我尝试使用多维输入和输出进行序列到序列(seq2seq)回归.我尝试了一些随着时间的推移产生以下损失的东西

随时间推移的损失函数

该模型完全无法学习预测克隆在每个输入和输出维度上的正弦,即使我尝试非常小的学习率.

为RNN构建的Tensorflow损失函数似乎解决了我们直接想要训练标签或单词嵌入的情况,因此我尝试自己计算损失.关于这一点,我不知道我们应该如何处理dec_inp(解码器输入)变量,我尝试做的似乎还没有在Tensorflow中完成,但从概念上讲尤其简单(见标题).

这是张量图:

在此输入图像描述

图中有一些我不会想到的东西,例如RMSProp优化器和basic_rnn_seq2seq之间的链接.

这是我尝试过的:

import tensorflow as tf

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

import tempfile
import math


rnn_cell = tf.nn.rnn_cell
seq2seq = tf.nn.seq2seq

tf.reset_default_graph()
sess = tf.InteractiveSession()


# Neural net's parameters
seq_length = 5  # Inputs and outputs are sequences of 5 units
batch_size = 1  # Keeping it simple for now

# Each unit in the sequence is a float32 vector of lenght 10:
# Same dimension …
Run Code Online (Sandbox Code Playgroud)

python machine-learning deep-learning tensorflow recurrent-neural-network

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

存储和使用训练有素的神经网络

我正在尝试开发一个神经网络来预测时间序列.

据我所知,我正在训练我的神经网络训练集并用测试集验证它.

当我对我的结果感到满意时,我可以使用我的神经网络来预测新值,而神经网络本身基本上只是我使用训练集调整的所有权重.

它是否正确?

如果是这样,我应该只训练我的网络一次,然后只使用我的网络(权重)来预测未来的价值.您通常如何避免重新计算整个网络?我是否应该将所有权重保存在数据库或其他内容中,以便我可以随时访问它而无需再次训练?

如果我的理解是正确的,我可以在专用计算机(例如超级计算机)上进行大量计算,然后在网络服务器,iPhone应用程序或类似的东西上使用我的网络,但我不知道如何存储它.

python machine-learning neural-network heavy-computation recurrent-neural-network

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

如何在 Keras 中构建自定义 RNN 层?

我正在尝试在 Keras 中实现自定义 RNN 层,并尝试遵循此链接中的说明,该链接基本上指示如何从现有 RNN 类继承。然而,我的公式中隐藏层的更新方程有点不同:h(t) = tanh(W.x + U.h(t-1) + V.r(t) + b)我有点困惑。在此方程中,r(t) = f(x, p(t))是 的函数x,即随时间分布的固定输入,也是 的函数p(t) = O(t-1).alpha + p(t-1),其中O(t)是每个 RNN 单元的 Softmax 输出。

我认为super(customRNN, self).step在调用继承的step函数后,标准h(t)应该被我的定义覆盖h(t)。但是我不确定如何修改statesandget_constants函数,以及是否需要修改 Keras 中的循环和 simpleRNN 类的任何其他部分。我的直觉是,该get_constants函数仅将丢失矩阵作为额外状态返回到阶跃函数,因此我猜测应该为我的方程中的丢失矩阵添加至少一个状态V

我最近刚刚开始使用 Keras,但找不到很多关于自定义 Keras 层定义的参考。抱歉,如果我的问题因大量参数而有点不知所措,我只是想确保我没有遗漏任何要点。谢谢!

deep-learning keras recurrent-neural-network

7
推荐指数
0
解决办法
1798
查看次数

将有状态LSTM称为功能模型?

我将有状态LSTM定义为顺序模型:

model = Sequential()
model.add(LSTM(..., stateful=True))
...
Run Code Online (Sandbox Code Playgroud)

后来,我将它用作功能模型:

input_1, input_2 = Input(...), Input(...)
output_1 = model(input_1)
output_2 = model(input_2)  # Is the state from input_1 preserved?
Run Code Online (Sandbox Code Playgroud)

input_1当我们model再次申请时,input_2是否保留了州 ?如果是,我如何在呼叫之间重置模型状态?

python machine-learning neural-network keras recurrent-neural-network

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

批量主要与时间主要LSTM

当输入是批量主要而不是时间主要时,RNN会学习不同的依赖模式吗?

python deep-learning lstm tensorflow recurrent-neural-network

7
推荐指数
2
解决办法
3412
查看次数

Keras的一对多LSTM

是否有可能在Keras实施一对多LSTM?
如果是的话,你能给我一个简单的例子吗?

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

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

有状态LSTM:何时重置状态?

给定具有维度的X (m个样本,n个序列和k个特征),以及具有维度的y个标签(m个样本,0/1):

假设我想训练一个有状态的LSTM(通过keras定义,其中"stateful = True"意味着每个样本的序列之间没有重置单元状态 - 如果我错了请纠正我!),是否应该重置状态在每个时期每个样本的基础上?

例:

for e in epoch:
    for m in X.shape[0]:          #for each sample
        for n in X.shape[1]:      #for each sequence
            #train_on_batch for model...
            #model.reset_states()  (1) I believe this is 'stateful = False'?
        #model.reset_states()      (2) wouldn't this make more sense?
    #model.reset_states()          (3) This is what I usually see...
Run Code Online (Sandbox Code Playgroud)

总之,我不确定是否在每个序列或每个时期之后重置状态(在所有m个样本都在X中训练之后).

建议非常感谢.

python machine-learning lstm keras recurrent-neural-network

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

为什么这里使用clip_grad_norm_函数?

我正在从某人的代码中使用 PyTorch 学习 LSTM。这里他clip_grad_norm_在两层 LSTM 的训练过程中使用了该函数。我想知道他为什么clip_grad_norm_在这里使用这个函数,这样我就可以正确理解整个代码(他在倒数第二行使用了它)。

for x, y in get_batches(data, batch_size, seq_length):
    counter += 1
                            
    x = one_hot_encode(x, n_chars)
    inputs, targets = torch.from_numpy(x), torch.from_numpy(y)
            
    if(train_on_gpu):
        inputs, targets = inputs.cuda(), targets.cuda()

    h = tuple([each.data for each in h])                    
    net.zero_grad()
                            
    output, h = net(inputs, h)                
            
    loss = criterion(output, targets.view(batch_size*seq_length).long())
    loss.backward()

    nn.utils.clip_grad_norm_(net.parameters(), clip)
    opt.step() 
Run Code Online (Sandbox Code Playgroud)

如果您需要有关问题的更多信息,请告诉我。

python lstm recurrent-neural-network pytorch

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

Jax - 调试 NaN 值

大家晚上好,

我花了过去 6 个小时尝试调试 Jax 中看似随机出现的 NaN 值。我已经缩小范围,NaN 最初源于损失函数或其梯度。

此处提供了重现错误的最小笔记本https://colab.research.google.com/drive/1uXa-igMm9QBOOl8ZNdK1OkwxRFlLqvZD?usp=sharing

作为 Jax 的一个用例,这也可能很有趣。当只有有限数量的陀螺仪/加速度计测量可用时,我使用 Jax 来解决方向估计任务。在这里,四元数运算的有效实现是很好的。

训练循环一开始很好,但最终会出现分歧

Step 0| Loss: 4.550444602966309 | Time: 13.910547971725464s
Step 1| Loss: 4.110116481781006 | Time: 5.478027105331421s
Step 2| Loss: 3.7159230709075928 | Time: 5.476970911026001s
Step 3| Loss: 3.491917371749878 | Time: 5.474078416824341s
Step 4| Loss: 3.232130765914917 | Time: 5.433410406112671s
Step 5| Loss: 3.095140218734741 | Time: 5.433837413787842s
Step 6| Loss: 2.9580295085906982 | Time: 5.429029941558838s
Step 7| Loss: nan | Time: 5.427825689315796s
Step 8| Loss: …
Run Code Online (Sandbox Code Playgroud)

python nan recurrent-neural-network jax

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