标签: recurrent-neural-network

Tensorflow RNN细胞分重

我想知道在以下代码中是否共享两个堆叠单元格的权重:

cell = rnn_cell.GRUCell(hidden_dim)
stacked_cell = tf.nn.rnn_cell.MultiRNNCell([cell] * 2)
Run Code Online (Sandbox Code Playgroud)

如果不共享,如何强制共享任何RNN?

注意:我可能更希望在嵌套的输入到输出连接的RNN配置中共享权重,其中第一层被克隆多次以用于第二层的每个输入(例如,第一层表示字母而第二层表示收集的字的句子从迭代第一层的输出)

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

3
推荐指数
1
解决办法
2666
查看次数

在有状态的RNN中通过时间反向传播

如果我在Keras中使用有状态的RNN来处理长度为N的序列,该序列被分成N个部分(每个时间步骤被单独处理),

  1. 如何处理反向传播?它只影响最后一个时间步,还是反过来传播整个序列?
  2. 如果它没有传播整个序列,有没有办法做到这一点?

backpropagation neural-network keras recurrent-neural-network

3
推荐指数
1
解决办法
1943
查看次数

用于回归层的 RNN

我想训练一个 RNN 来解决一个简单的回归问题。我有一个X_train形状数组(35584,),表示数年来每小时的测量值。我也有Y_train形状(35584,)作为预期值的通讯员。一小时的值h受前 6 小时值的影响,所以我想使用 RNN。

在 Keras 中,我理解我的情况:timesteps = 6nb_samples = 35584. 就我而言,nb_features = 1.

我如何在 Keras 中编程?我应该使用Embedding图层吗?以及怎么做?

python neural-network keras recurrent-neural-network

3
推荐指数
1
解决办法
5699
查看次数

tf.train.range_input_producer(epoch_size,shuffle = True)不会终止也不会导致CPU/GPU负载

在使用RNN时,我遇到了一个奇怪的问题.我正在关注TensorFlow RNN教程并尝试我自己的(更简单的)实现,这非常受到R2RT博客文章的启发:Tensorflow I中的递归神经网络.

调试后我中标识的问题是从即将ranger_input_producertensorflow.models.rnn.ptb.reader.py(线115).

我在最小的例子中隔离了它:

import tensorflow as tf

epoch_size = 20
i = tf.train.range_input_producer(epoch_size, shuffle=False).dequeue()
Run Code Online (Sandbox Code Playgroud)

这是什么ptb_producer(具有可变值epoch_size).事实证明,这个代码不会终止(我甚至不会调用任何代码session.run(...)也不会使用CPU.我猜这个队列正在按照Daving Wong的建议等待.

有线索吗?谢谢

pltrdy

python tensorflow recurrent-neural-network word-embedding

3
推荐指数
1
解决办法
1253
查看次数

mfcc 特征大小如何影响递归神经网络

所以我正在学习机器学习并想知道 mfcc 特征大小如何影响 RNN(递归神经网络)?

使用 librosa,我提取了 mfcc,然后提取了 delta 系数,然后我得到了维度数组 [13, sound_length]

用python提取mfcc和delta系数的代码:(y - 声音文件数据,sr - y的长度)

mfcc = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13)
mfcc_delta = librosa.feature.delta(mfcc, axis=0, order=1)
Run Code Online (Sandbox Code Playgroud)

所以理论上如果我想用这种数据和 n_mfcc=39 的数据训练网络。谁会更好,为什么?(忽略所有其他超参数)我只想知道这个参数如何影响 RNN 的理论。

python machine-learning mfcc recurrent-neural-network librosa

3
推荐指数
1
解决办法
1143
查看次数

在TensorFlow dynamic_rnn中使用sequence_length参数时如何处理填充

我正在尝试使用dynamic_rnnTensorflow中的功能来加快训练速度。阅读后,我的理解是,加快训练速度的一种方法是sequence_length在此函数中将值显式传递给参数。经过一番阅读之后,找到了这样的解释,看来我需要传递的是一个向量(可能由定义tf.placeholder),其中包含批处理中每个序列的长度。

这是我感到困惑的地方:为了利用这一优势,我应该将每个批次填充到批次中最长长度的序列,而不是训练集中的最长序列吗?Tensorflow如何处理任何较短序列中的其余零/填充令牌?另外,这里的主要优势是真的可以提高速度吗,还是可以额外保证我们在训练过程中掩盖了垫子令牌?任何帮助/上下文将不胜感激。

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

3
推荐指数
1
解决办法
1380
查看次数

Python - 基于 LSTM 的 RNN 需要 3D 输入?

我正在尝试构建一个基于 LSTM RNN 的深度学习网络,这是尝试过的

from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.layers import Embedding
from keras.layers import LSTM
import numpy as np

train = np.loadtxt("TrainDatasetFinal.txt", delimiter=",")
test = np.loadtxt("testDatasetFinal.txt", delimiter=",")

y_train = train[:,7]
y_test = test[:,7]

train_spec = train[:,6]
test_spec = test[:,6]


model = Sequential()
model.add(LSTM(32, input_shape=(1415684, 8),return_sequences=True))
model.add(LSTM(64, input_dim=8, input_length=1415684, return_sequences=True))
##model.add(Embedding(1, 256, input_length=5000))
##model.add(LSTM(64,input_dim=1, input_length=10, activation='sigmoid',
##               return_sequences=True, inner_activation='hard_sigmoid'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='rmsprop')

model.fit(train_spec, y_train, batch_size=2000, nb_epoch=11)
score = model.evaluate(test_spec, y_test, batch_size=2000)
Run Code Online (Sandbox Code Playgroud)

但它让我出现以下错误 …

python-3.x lstm keras recurrent-neural-network keras-layer

3
推荐指数
1
解决办法
3923
查看次数

关于在 RNN (Keras) 中正确使用 dropout

我对如何在 keras 中正确使用带有 RNN 的 dropout 感到困惑,特别是对于 GRU 单元。keras 文档参考了这篇论文(https://arxiv.org/abs/1512.05287),我知道所有时间步长都应该使用相同的 dropout 掩码。这是通过指定 GRU 层本身的 dropout 参数来实现的。我不明白的是:

  1. 为什么互联网上有几个例子,包括 keras 自己的例子(https://github.com/keras-team/keras/blob/master/examples/imdb_bidirectional_lstm.py)和 Andrew Ng 的 Coursera Seq 中的“触发词检测”作业。模型课程,他们显式地添加了一个 dropout 层“model.add(Dropout(0.5))”,据我所知,它将为每个时间步添加一个不同的掩码。

  2. 上面提到的论文表明,这样做是不合适的,由于在所有时间步长中这种 dropout 噪声的积累,我们可能会丢失信号和长期记忆。但是,这些模型(在每个时间步使用不同的 dropout 掩码)如何能够学习并表现良好。

我自己训练了一个模型,它在每个时间步使用不同的 dropout 掩码,虽然我没有得到我想要的结果,但该模型能够过度拟合训练数据。根据我的理解,这使所有时间步长的“噪声累积”和“信号丢失”无效(我有 1000 个时间步长序列输入到 GRU 层)。

对这种情况的任何见解、解释或经验都会有所帮助。谢谢。

更新:

为了更清楚地说明,我将提到 keras 文档中 Dropout Layer 的摘录(“noise_shape: 1D integer tensor表示将与输入相乘的二进制 dropout 掩码的形状。例如,如果您的输入具有形状(batch_size , timesteps, features) 并且您希望所有时间步长的 dropout 掩码都相同,您可以使用 noise_shape=(batch_size, 1, features")。所以,我相信,可以看出,当明确使用 Dropout 层并且需要在每个时间步使用相同的掩码(如论文中所述),我们需要编辑这个 noise_shape 参数,这在我之前链接的示例中没有完成。

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

3
推荐指数
1
解决办法
2633
查看次数

ValueError: Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=2 [keras]

我收到错误:ValueError: Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=2使用以下代码:

def make_model():
  model = Sequential()      

  model.add(Conv2D(20,(5,5), input_shape = (24,48,30), activation = "relu", strides = 1, padding = "valid"))
  model.add(MaxPooling2D(pool_size=(2,2)))        
  model.add(Conv2D(50, (5,5), use_bias = 50))    
  model.add(MaxPooling2D(pool_size=(2,2)))    
  model.add(Flatten())
  model.add(Dense(20, activation = "relu"))
  model.add(LSTM(50, activation="relu", return_sequences=True))

  return model
Run Code Online (Sandbox Code Playgroud)

我的输入是 30 个大小为 24*48 的矩阵。

machine-learning keras recurrent-neural-network keras-layer

3
推荐指数
1
解决办法
7928
查看次数

LSTM 在预测和真实情况之间具有系统偏移

目前我认为我在 LSTM 模型中遇到了预测和真实值之间的系统偏移。从现在开始继续前进的最佳方法是什么?

模型架构以及预测和真实值如下所示。这是一个回归问题,其中使用目标的历史数据加上 5 个其他相关特征X来预测目标y。当前输入序列n_input的长度为 256,其中输出序列n_out为 1。简单来说,前256个点用来预测下一个目标值。

X被归一化。均方误差用作损失函数。具有余弦退火学习率的 Adam 用作优化器 ( min_lr=1e-7, max_lr=6e-2)。

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
cu_dnnlstm_8 (CuDNNLSTM)     (None, 256)               270336    
_________________________________________________________________
batch_normalization_11 (Batc (None, 256)               1024      
_________________________________________________________________
leaky_re_lu_11 (LeakyReLU)   (None, 256)               0         
_________________________________________________________________
dropout_11 (Dropout)         (None, 256)               0         
_________________________________________________________________
dense_11 (Dense)             (None, 1)                 257       
=================================================================
Total params: 271,617
Trainable params: 271,105
Non-trainable params: 512
_________________________________________________________________
Run Code Online (Sandbox Code Playgroud)

增加 LSTM 层中的节点大小、添加更多 LSTM 层(具有return_sequences=True)或在 …

python lstm keras tensorflow recurrent-neural-network

3
推荐指数
1
解决办法
3718
查看次数