标签: recurrent-neural-network

Keras 中的序列标记

我正在研究句子标签问题。我自己完成了嵌入和填充,我的输入看起来像:

X_i = [[0,1,1,0,2,3...], [0,1,1,0,2,3...], ..., [0,0,0,0,0...],  [0,0,0,0,0...], ....]
Run Code Online (Sandbox Code Playgroud)

对于句子中的每个单词,我想预测四个类别之一,所以我想要的输出应该是这样的:

Y_i = [[1,0,0,0], [0,0,1,0], [0,1,0,0], ...]
Run Code Online (Sandbox Code Playgroud)

我的简单网络架构是:

model = Sequential()

model.add(LSTM(input_shape = (emb,),input_dim=emb, output_dim=hidden, return_sequences=True))
model.add(TimeDistributedDense(output_dim=4))
model.add(Activation('softmax'))
    model.compile(loss='binary_crossentropy', optimizer='adam')

model.fit(X_train, Y_train, batch_size=32, nb_epoch=3, validation_data=(X_test, Y_test), verbose=1, show_accuracy=True)
Run Code Online (Sandbox Code Playgroud)

它在训练时显示大约 95%,但是当我尝试使用训练有素的模型预测新句子时,结果非常糟糕。看起来模型只是为第一个单词学习了一些类,并且每次都显示它。我认为问题可能是:

  1. 自己写的padding(句末零向量),会不会让学习更糟?

  2. 我应该尝试学习不同长度的句子,没有填充(如果是,你能帮助我如何在 Keras 中训练这种模型吗?)

  3. 错误的学习目标,但我尝试了均方误差,二元交叉熵等,它没有改变。

  4. TimeDistributedDense和 的东西softmax,我想,我已经知道它是如何工作的,但仍然不是 100% 确定。

我很高兴看到有关此问题的任何提示或帮助,谢谢!

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

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

个别LSTM细胞中隐藏的单位是什么?

我是神经网络的新手,在个别LSTM细胞中发现了"隐藏单位"的概念.我理解有"门"(输入/输出/忘记等)的概念,但隐藏的单位是什么?我也理解这与每层中展开的LSTM单元的数量(等于时间步数)不同.

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

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

如何对连续音频进行分类

我有一个音频数据集,每个都有不同的长度.这些音频中有一些事件,我想训练和测试,但这些事件是随机放置的,加上长度不同,使用该数据集构建机器学习系统真的很难.我想要修复默认的长度大小并构建多层NN,但事件的长度也不同.然后我考虑使用CNN,就像它用于识别图像上的图案或多个人一样.这个问题是我在尝试理解音频文件时真的很挣扎.

所以,我的问题,是否有人可以给我一些关于构建机器学习系统的技巧,该系统将不同类型的已定义事件分类,并在具有这些事件的数据集上进行自我训练(1个数据包含多于1个事件,它们是不同的来自彼此.)并且他们每个人都有不同的长度?

如果有人帮忙,我将非常感激.

python classification machine-learning conv-neural-network recurrent-neural-network

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

如何正确使用keras遮罩层?

Keras遮罩层可用于处理RNN的可变长度序列训练。当我使用它们时,与单批训练相比,蒙版层的准确性较低。我怀疑我没有正确使用遮罩层。

我的目标是训练LSTM学习如何拼写单词。这些序列是不同的英语单词,用一键表示编码。以下是数据编码部分的代码:chars是组成序列的所有字母的集合,mylist是序列的列表,是序列MAXLEN的最大长度。

char_indices = dict((c, i) for i, c in enumerate(chars))
indices_char = dict((i, c) for i, c in enumerate(chars))

X = np.zeros((len(mylist), MAXLEN, len(chars)), dtype=np.bool)
y = np.zeros((len(mylist), MAXLEN, len(chars)), dtype=np.bool)

for i, sentence in enumerate(mylist):
    for t in range(len(sentence)-Data_end):
        X[i, t, char_indices[sentence[t]]] = 1
        y[i, t, char_indices[sentence[t+1]]] = 1
Run Code Online (Sandbox Code Playgroud)

我的网络定义为:

model = Sequential()
model.add(Masking(mask_value=0., input_shape=(None, len(chars))))
model.add(LSTM(2000, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(2000, return_sequences=True))
model.add(Dropout(0.2))
model.add(TimeDistributed(Dense(len(chars))))
model.add(Activation('softmax'))

sgd = SGD(lr=lr_init, decay=decay_init, momentum=momentum_init, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd) …
Run Code Online (Sandbox Code Playgroud)

python nlp keras recurrent-neural-network

5
推荐指数
0
解决办法
2638
查看次数

Keras中的默认激活功能

有谁知道Keras中的循环图层中使用的默认激活函数?https://keras.io/layers/recurrent/

它说默认激活功能是线性的.但是默认的重复激活功能呢?没有提到这一点.任何帮助将受到高度赞赏.提前致谢

neural-network deep-learning keras recurrent-neural-network keras-layer

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

带有顺序模块的PyTorch中的简单LSTM

在PyTorch中,我们可以通过多种方式定义体系结构.在这里,我想使用该Sequential模块创建一个简单的LSTM网络.

在Lua的火炬中,我通常会选择:

model = nn.Sequential()
model:add(nn.SplitTable(1,2))
model:add(nn.Sequencer(nn.LSTM(inputSize, hiddenSize)))
model:add(nn.SelectTable(-1)) -- last step of output sequence
model:add(nn.Linear(hiddenSize, classes_n))
Run Code Online (Sandbox Code Playgroud)

但是,在PyTorch中,我找不到相当于SelectTable获得最后一个输出.

nn.Sequential(
  nn.LSTM(inputSize, hiddenSize, 1, batch_first=True),
  # what to put here to retrieve last output of LSTM ?,
  nn.Linear(hiddenSize, classe_n))
Run Code Online (Sandbox Code Playgroud)

deep-learning torch lstm recurrent-neural-network pytorch

5
推荐指数
2
解决办法
4558
查看次数

我们为什么要使用RNN而不是Markov模型?

最近我偶然发现了这篇文章,我想知道你会从一个递归神经网络得到的结果与上面描述的结果之间的区别,以及一个简单的马尔可夫链.

我并不真正理解在RNN中发生的线性代数,但似乎你基本上只是设计一种超级复杂的方法,根据之前的字母为下一个字母制作统计模型,马尔可夫链中非常简单的事情.

为什么RNN很有趣?是因为它们是一个更普遍的解决方案,还是我发现了一些我不知道的事情?

artificial-intelligence markov-chains neural-network recurrent-neural-network

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

如何获取tensorflow RNN的摘要信息

我使用tensorflow实现了一个简单的RNN,如下所示:

cell = tf.contrib.rnn.BasicRNNCell(state_size)
cell = tf.contrib.rnn.DropoutWrapper(cell, output_keep_prob=keep_prob)

rnn_outputs, final_state = tf.nn.dynamic_rnn(cell, batch_size, dypte=tf.float32)
Run Code Online (Sandbox Code Playgroud)

这很好用.但是我想将权重变量记录到摘要编写器中.有没有办法做到这一点?

顺便问一下,我们使用tf.nn.rnn_cell.BasicRNNCelltf.contrib.rnn.BasicRNNCell?还是他们一模一样?

machine-learning neural-network tensorflow recurrent-neural-network tensorboard

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

Keras中的GRU / LSTM具有不同长度的输入序列

我正在做一个较小的项目,以更好地理解RNN,尤其是LSTM和GRU。我根本不是专家,所以请记住这一点。

我面临的问题以数据的形式给出:

>>> import numpy as np
>>> import pandas as pd
>>> pd.DataFrame([[1, 2, 3],[1, 2, 1], [1, 3, 2],[2, 3, 1],[3, 1, 1],[3, 3, 2],[4, 3, 3]], columns=['person', 'interaction', 'group'])
   person  interaction  group
0       1            2      3
1       1            2      1
2       1            3      2
3       2            3      1
4       3            1      1
5       3            3      2
6       4            3      3
Run Code Online (Sandbox Code Playgroud)

这仅是为了说明。我们有不同的人以不同的方式与不同的群体进行交互。我已经编码了各种功能。用户的最后一次互动始终是3,这意味着选择某个组。在上面的简短示例中,person 1选择组2person 2选择组1等。

我的整个数据集要大得多,但是我想先了解概念部分,然后再投入模型。我要学习的任务有一系列互动,该互动由个人选择。更具体一点,我想输出一个列表,其中所有组(有3个组1, 2, 3 …

lstm keras recurrent-neural-network

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

简单的香草RNN无法通过梯度检查

我最近尝试RNN从头开始实现香草。我实现了所有内容,甚至运行了一个看似不错的示例!但是我注意到渐变检查不成功!并且只有某些部分(特别是输出的权重和偏差)通过了梯度检查,而其他权重(WhhWhx)没有通过梯度检查。

我遵循karpathy / corsera的实现,并确保一切都已实现。但是karpathy / corsera的代码通过了梯度检查,而我的却没有。我目前不知道这是什么原因!

这是负责向后传递原始代码的摘录:

def rnn_step_backward(dy, gradients, parameters, x, a, a_prev):

    gradients['dWya'] += np.dot(dy, a.T)
    gradients['dby'] += dy
    da = np.dot(parameters['Wya'].T, dy) + gradients['da_next'] # backprop into h
    daraw = (1 - a * a) * da # backprop through tanh nonlinearity
    gradients['db'] += daraw
    gradients['dWax'] += np.dot(daraw, x.T)
    gradients['dWaa'] += np.dot(daraw, a_prev.T)
    gradients['da_next'] = np.dot(parameters['Waa'].T, daraw)
    return gradients

def rnn_backward(X, Y, parameters, cache):
    # Initialize gradients as an …
Run Code Online (Sandbox Code Playgroud)

python-3.x deep-learning recurrent-neural-network

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