我想知道在以下代码中是否共享两个堆叠单元格的权重:
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
如果我在Keras中使用有状态的RNN来处理长度为N的序列,该序列被分成N个部分(每个时间步骤被单独处理),
backpropagation neural-network keras recurrent-neural-network
我想训练一个 RNN 来解决一个简单的回归问题。我有一个X_train形状数组(35584,),表示数年来每小时的测量值。我也有Y_train形状(35584,)作为预期值的通讯员。一小时的值h受前 6 小时值的影响,所以我想使用 RNN。
在 Keras 中,我理解我的情况:timesteps = 6和nb_samples = 35584. 就我而言,nb_features = 1.
我如何在 Keras 中编程?我应该使用Embedding图层吗?以及怎么做?
在使用RNN时,我遇到了一个奇怪的问题.我正在关注TensorFlow RNN教程并尝试我自己的(更简单的)实现,这非常受到R2RT博客文章的启发:Tensorflow I中的递归神经网络.
调试后我中标识的问题是从即将ranger_input_producer在tensorflow.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
所以我正在学习机器学习并想知道 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
我正在尝试使用dynamic_rnnTensorflow中的功能来加快训练速度。阅读后,我的理解是,加快训练速度的一种方法是sequence_length在此函数中将值显式传递给参数。经过一番阅读之后,找到了这样的解释,看来我需要传递的是一个向量(可能由定义tf.placeholder),其中包含批处理中每个序列的长度。
这是我感到困惑的地方:为了利用这一优势,我应该将每个批次填充到批次中最长长度的序列,而不是训练集中的最长序列吗?Tensorflow如何处理任何较短序列中的其余零/填充令牌?另外,这里的主要优势是真的可以提高速度吗,还是可以额外保证我们在训练过程中掩盖了垫子令牌?任何帮助/上下文将不胜感激。
machine-learning sequence deep-learning tensorflow recurrent-neural-network
我正在尝试构建一个基于 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)
但它让我出现以下错误 …
我对如何在 keras 中正确使用带有 RNN 的 dropout 感到困惑,特别是对于 GRU 单元。keras 文档参考了这篇论文(https://arxiv.org/abs/1512.05287),我知道所有时间步长都应该使用相同的 dropout 掩码。这是通过指定 GRU 层本身的 dropout 参数来实现的。我不明白的是:
为什么互联网上有几个例子,包括 keras 自己的例子(https://github.com/keras-team/keras/blob/master/examples/imdb_bidirectional_lstm.py)和 Andrew Ng 的 Coursera Seq 中的“触发词检测”作业。模型课程,他们显式地添加了一个 dropout 层“model.add(Dropout(0.5))”,据我所知,它将为每个时间步添加一个不同的掩码。
上面提到的论文表明,这样做是不合适的,由于在所有时间步长中这种 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
我收到错误: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 的矩阵。
目前我认为我在 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)或在 …
keras ×6
python ×5
tensorflow ×4
keras-layer ×2
lstm ×2
dropout ×1
librosa ×1
mfcc ×1
python-3.x ×1
sequence ×1