标签: recurrent-neural-network

TensorFlow:简单的递归神经网络

我用TensorFlow建立了一些神经网络,比如基本的MLP和卷积神经网络.现在我想转向循环神经网络.但是,我在自然语言处理方面没有经验.因此,针对RNN的TensorFlow NLP教程对我来说并不容易阅读(并且也不是很有趣).

基本上我想从简单的事情开始,而不是LSTM.

如何在TensorFlow中构建一个简单的递归神经网络,如Elman网络?

我只能找到TensorFlow的GRU或LSTM RNN示例,主要用于NLP.有没有人知道一些简单的递归神经网络教程或TensorFlow的例子?

该图显示了一个基本的Elman网络,通常简称为SRN(简单的循环网络):

elman网络的例子

python neural-network tensorflow recurrent-neural-network

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

在while_loop的上下文中使用TensorArrays来累积值

下面我有一个Tensorflow RNN Cell的实现,旨在模拟Alex Graves的算法ACT:http://arxiv.org/abs/1603.08983 .

在通过rnn.rnn调用的序列中的单个时间步(带有静态sequence_length参数,因此rnn动态展开 - 我使用的固定批量大小为20),我们递归调用ACTStep,生成大小为(1,200)的输出RNN单元的隐藏维数为200,批量大小为1.

在Tensorflow中使用while循环,我们迭代直到累积的停止概率足够高.所有这些工作都相当顺利,但是我在while循环中积累状态,概率和输出时遇到了问题,我们需要这样做才能创建这些的加权组合作为最终的单元输出/状态.

我已经尝试使用一个简单的列表,如下所示,但是当编译图形时输出不在同一帧中,这会失败(是否可以使用control_flow_ops中的"switch"函数将张量转发到以下点:它们是必需的,即在返回值之前的add_n函数?).我也尝试使用TensorArray结构,但我发现这很难使用,因为它似乎破坏了形状信息并且手动替换它没有用.我也无法找到关于TensorArrays的大量文档,大概就像我们想象的那样,主要是用于内部TF使用.

关于如何正确累积ACTStep产生的变量的任何建议都将非常感激.

class ACTCell(RNNCell):
"""An RNN cell implementing Graves' Adaptive Computation time algorithm"""
def __init__(self, num_units, cell, epsilon, max_computation):

    self.one_minus_eps = tf.constant(1.0 - epsilon)
    self._num_units = num_units
    self.cell = cell
    self.N = tf.constant(max_computation)
@property
def input_size(self):
    return self._num_units
@property
def output_size(self):
    return self._num_units
@property
def state_size(self):
    return self._num_units

def __call__(self, inputs, state, scope=None):

    with vs.variable_scope(scope or type(self).__name__):

        # define within cell constants/ counters used to control while loop
        prob …
Run Code Online (Sandbox Code Playgroud)

tensorflow recurrent-neural-network

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

在神经网络中添加辍学的地方?

我已经看到有关神经网络不同部分的丢失的描述:

  1. 重量矩阵中的丢失,

  2. 在矩阵乘法之后和relu之前隐藏层中的丢失,

  3. relu后隐藏层中的丢失,

  4. 并且在softmax函数之前输出分数中的丢失

我对应该在哪里执行辍学感到有点困惑.有人可以帮忙详细说明吗?谢谢!

neural-network conv-neural-network recurrent-neural-network dropout

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

在Tensor Flow中保存和恢复训练有素的LSTM

我使用BasicLSTMCell训练了LSTM分类器.如何保存模型并将其恢复以用于以后的分类?

lstm tensorflow recurrent-neural-network

6
推荐指数
2
解决办法
9524
查看次数

Keras简单的RNN实现

尝试使用一个循环图层编译网络时发现了问题.似乎第一层的维度存在一些问题,因此我理解RNN层在Keras中的工作方式.

我的代码示例是:

model.add(Dense(8,
                input_dim = 2,
                activation = "tanh",
                use_bias = False))
model.add(SimpleRNN(2,
                    activation = "tanh",
                    use_bias = False))
model.add(Dense(1,
                activation = "tanh",
                use_bias = False))
Run Code Online (Sandbox Code Playgroud)

错误是

ValueError: Input 0 is incompatible with layer simple_rnn_1: expected ndim=3, found ndim=2
Run Code Online (Sandbox Code Playgroud)

无论input_dim值如何,都会返回此错误.我错过了什么?

machine-learning neural-network keras recurrent-neural-network rnn

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

我的LSTM学习,损失减少,但数值梯度与分析梯度不匹配

以下是自包含的,当您运行它时,它将:

1.打印损失以确认它正在减少(学习sin波浪),

2.根据手工衍生的梯度函数检查数值梯度.

两个渐变倾向于匹配1e-1 to 1e-2(这仍然是坏的,但显示它正在尝试)并且偶尔会出现极端异常值.

我已经花了整个星期六回到正常的FFNN,让它工作(yay,渐变匹配!),现在星期天在这个LSTM上,好吧,我找不到我的逻辑中的错误.哦,这在很大程度上取决于我的随机种子,有时它很棒,有时很糟糕.

我亲自检查了我对LSTM方程的手衍生衍生物的实现(我做了微积分),并反对这3个博客/ gist中的实现:

并尝试了这里建议的(惊人的)调试方法:https://blog.slavv.com/37-reasons-why-your-neural-network-is-not-working-4020854bd607

你能帮忙看看我实施错误的地方吗?

import numpy as np
np.set_printoptions(precision=3, suppress=True)

def check_grad(params, In, Target, f, df_analytical, delta=1e-5, tolerance=1e-7, num_checks=10):
    """
    delta : how far on either side of the param value to go

    tolerance : how far the analytical and numerical values can diverge
    """

    h_n = params['Wf'].shape[1] # TODO: h & c should be passed in …
Run Code Online (Sandbox Code Playgroud)

python machine-learning lstm recurrent-neural-network

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

如何为Seq2Seq模型提供多个目标?

我正在对MSR-VTT数据集进行视频字幕。

在此数据集中,我有10,000个视频,每个视频有20个不同的字幕

我的模型由seq2seq RNN组成。编码器的输入是视频功能,解码器的输入是嵌入式目标字幕,解码器的输出是预测字幕。

我想知道使用几次相同标题不同标题的视频是否有用。


由于我找不到明确的信息,因此尝试对其进行基准测试

基准测试:

模型1:每个视频一个字幕

我在1108个运动视频中对其进行了训练,批量大小为5,超过60个时期。此配置每个时期大约需要211秒。

Epoch 1/60 ; Batch loss: 5.185806 ; Batch accuracy: 14.67% ; Test accuracy: 17.64%
Epoch 2/60 ; Batch loss: 4.453338 ; Batch accuracy: 18.51% ; Test accuracy: 20.15%
Epoch 3/60 ; Batch loss: 3.992785 ; Batch accuracy: 21.82% ; Test accuracy: 54.74%
...
Epoch 10/60 ; Batch loss: 2.388662 ; Batch accuracy: 59.83% ; Test accuracy: 58.30%
...
Epoch 20/60 ; Batch loss: 1.228056 ; Batch accuracy: 69.62% ; …
Run Code Online (Sandbox Code Playgroud)

python deep-learning tensorflow recurrent-neural-network

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

LSTM 单元如何映射到层?

我无法准确理解 LSTM 单元的范围——它如何映射到网络层。来自格雷夫斯 (2014):

在我看来,在单层网络中,layer = lstm 单元。这实际上如何在多层 rnn 中工作?

三层RNN 三层循环神经网络

LSTM单元 LSTM单元

单元格的输出是h_t,没有表示特定层的超级索引。等式也是一样。每个单元格是否跨越单个层?或者每个单元格是否在每个时间步跨越整个三个节点?

lstm recurrent-neural-network

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

用于预测数字序列的 Keras 模型

我正在尝试训练 Keras LSTM 模型来预测序列中的下一个数字。

  1. 下面我的模型有什么问题,当模型没有学习时我如何调试
  2. 我如何决定使用哪些图层类型
  3. 编译时我应该根据什么选择损失和优化器参数

我的输入训练数据的形状 (16000, 10) 如下所示

[
    [14955 14956 14957 14958 14959 14960 14961 14962 14963 14964]
    [14731 14732 14733 14734 14735 14736 14737 14738 14739 14740]
    [35821 35822 35823 35824 35825 35826 35827 35828 35829 35830]
    [12379 12380 12381 12382 12383 12384 12385 12386 12387 12388]
    ...
]
Run Code Online (Sandbox Code Playgroud)

相应的输出训练数据的形状 (16000, 1) 如下所示

[[14965] [14741] [35831] [12389] ...]
Run Code Online (Sandbox Code Playgroud)

正如 LSTM 所抱怨的,我重塑了训练/测试数据

X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)
Run Code Online (Sandbox Code Playgroud)

这是最终的训练/测试数据形状

Total Samples: 20000 …
Run Code Online (Sandbox Code Playgroud)

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

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

如何在 Keras 中对卷积循环网络 (CRNN) 建模

我试图将CRNN模型移植到 Keras。

但是,我在将 Conv2D 层的输出连接到 LSTM 层时卡住了。

CNN 层的输出将具有(batch_size, 512, 1, width_dash)的形状,其中第一个取决于 batch_size,最后一个取决于输入的输入宽度(此模型可以接受可变宽度输入)

例如:形状为[2, 1, 32, 829]的输入产生形状为(2, 512, 1, 208) 的输出

现在,根据Pytorch 模型,我们必须执行挤压 (2)permute(2, 0, 1) 它将产生一个形状为 [208, 2, 512] 的张量

我试图实现这是 Keras,但我无法做到这一点,因为在 Keras 中,我们无法更改keras.models.Sequential模型中的batch_size 维度

有人可以指导我如何将这个模型的一部分移植到 Keras 吗?

移植 CNN 层的当前状态

lstm keras recurrent-neural-network pytorch

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