标签: recurrent-neural-network

如何在 Keras RNN 中实时实现前向传播?

我正在尝试在实时运行的应用程序中运行在 Keras 中训练的 RNN。这里循环网络(LSTM)中的“时间”是接收数据时的实际时刻。

我想以在线方式获取 RNN 的输出。对于非循环模型,我只是将输入塑造成形状inputDatum=1,input_shapeModel.predict在其上运行。我不确定这是否是在 Keras 中为应用程序使用前向传递的预期方法,但它对我有用。

但对于循环模块,Model.predict期望整个输入作为输入,包括时间维度。所以它不起作用...

有没有办法在 Keras 中执行此操作,或者我是否需要转到 Tensorflow 并在那里实现操作?

keras tensorflow recurrent-neural-network

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

训练文本语料库太大而无法加载到内存中

我创建了一个 2 层 LSTM 模型,我想在最近转储的英文维基百科文章(15.1 GB 文本)上对其进行训练。我无法将语料库加载到文本变量中以进行单词嵌入。Keras RNN 模型通常如何在如此庞大的文本语料库上进行训练以避免内存错误?

尝试使用以下命令打开 15.1 GB 文件后:

text = open('/home/connor/Desktop/wiki_en.txt').read().lower()
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

(结果,消耗)= self._buffer_decode(数据,self.errors,最终)MemoryError

python out-of-memory lstm keras recurrent-neural-network

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

双向 RNN 单元 - 共享与否?

我应该使用相同的权重来计算双向 RNN 中的前向和后向传递,还是应该独立学习这些权重?

neural-network keras tensorflow recurrent-neural-network pytorch

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

我们如何分析损失与历元图?

我正在训练一个语言模型,每次训练时都会绘制损失与历元的关系。我附上了其中的两个样本。

图片1

图2

显然,第二个表现出了更好的表现。但是,从这些图表来看,我们什么时候决定停止训练(提前停止)?

我们可以从这些图表中理解过度拟合和欠拟合还是我需要绘制额外的学习曲线?

从这些图中可以得出哪些额外的推论?

nlp machine-learning lstm recurrent-neural-network pytorch

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

如何在 LSTM 网络 (Keras) 中使用 Dropout 和 BatchNormalization

我正在使用 LSTM 网络进行多元多时间步预测。因此,基本上seq2seq预测是将多个数据n_inputs输入模型以预测n_outputs时间序列的多个数据。

我的问题是如何有意义地应用DropoutBatchnNormalization因为这似乎是循环网络和 LSTM 网络广泛讨论的主题。为了简单起见,我们坚持使用 Keras 作为框架。

案例 1:普通 LSTM

model = Sequential()
model.add(LSTM(n_blocks, activation=activation, input_shape=(n_inputs, n_features), dropout=dropout_rate))
model.add(Dense(int(n_blocks/2)))
model.add(BatchNormalization())
model.add(Activation(activation))
model.add(Dense(n_outputs))
Run Code Online (Sandbox Code Playgroud)
  • Q1:在 LSTM 层之后不直接使用 BatchNormalization 是一个好习惯吗?
  • Q2:在 LSTM 层内使用 Dropout 是一个好的做法吗?
  • Q3:在 Dense 层之间使用 BatchNormalization 和 Dropout 是一个好的实践吗?
  • Q4:如果我堆叠多个 LSTM 层,在它们之间使用 BatchNormalization 是一个好主意吗?

案例 2:带有 TimeDistributed Layers 的编码器解码器(如 LSTM)

model = Sequential()
model.add(LSTM(n_blocks, activation=activation, input_shape=(n_inputs,n_features), dropout=dropout_rate))
model.add(RepeatVector(n_outputs))
model.add(LSTM(n_blocks, activation=activation, return_sequences=True, dropout=dropout_rate))
model.add(TimeDistributed(Dense(int(n_blocks/2)), use_bias=False))
model.add(TimeDistributed(BatchNormalization()))
model.add(TimeDistributed(Activation(activation)))
model.add(TimeDistributed(Dropout(dropout_rate)))
model.add(TimeDistributed(Dense(1)))
Run Code Online (Sandbox Code Playgroud)
  • Q5:在层与层之间使用时,应该将 …

lstm keras recurrent-neural-network batch-normalization dropout

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

如何使用 Keras 构建预训练的 CNN-LSTM 网络

我正在尝试将 CNN-LSTM 网络与 Keras 结合使用来分析视频。我读到了它并遇到了TimeDistributed函数和一些示例。

实际上,我尝试了下面描述的网络,它实际上由卷积层和池化层以及后面的循环层和密集层组成。

model = Sequential()
model.add(TimeDistributed(Conv2D(2, (2,2), activation= 'relu' ), input_shape=(None, IMG_SIZE, IMG_SIZE, 3)))
model.add(TimeDistributed(MaxPooling2D(pool_size=(2, 2))))
model.add(TimeDistributed(Flatten()))
model.add(LSTM(50))
model.add(Dense(50, activation = 'softmax'))
model.compile(loss = 'categorical_crossentropy' , optimizer = 'adam' , metrics = ['acc'])
Run Code Online (Sandbox Code Playgroud)

我没有正确测试该模型,因为我的数据集太小。然而,在训练过程中,网络在 4-5 个 epoch 内达到了0.98 的准确度(也许是过度拟合,但这还不是问题,因为我希望稍后能得到合适的数据集)。

然后,我了解了如何使用预训练的卷积网络(MobileNet、ResNet 或 Inception)作为 LSTM 网络的特征提取器,因此我使用以下代码:

inputs = Input(shape = (frames, IMG_SIZE, IMG_SIZE, 3))
cnn_base = InceptionV3(include_top = False, weights='imagenet', input_shape = (IMG_SIZE, IMG_SIZE, 3))

cnn_out = GlobalAveragePooling2D()(cnn_base.output)
cnn = Model(inputs=cnn_base.input, outputs=cnn_out)
encoded_frames = …
Run Code Online (Sandbox Code Playgroud)

conv-neural-network keras tensorflow recurrent-neural-network

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

Keras 不同注意力层之间的差异

我正在尝试为我的文本分类模型添加一个注意层。输入是文本(例如电影评论),输出是二元结果(例如正面与负面)。

model = Sequential()
model.add(Embedding(max_features, 32, input_length=maxlen))
model.add(Bidirectional(CuDNNGRU(16,return_sequences=True)))
##### add attention layer here #####
model.add(Dense(1, activation='sigmoid'))
Run Code Online (Sandbox Code Playgroud)

经过一番搜索,我发现了几个 keras 的可阅读使用的注意力层。keras.layers.AttentionKeras 中内置了该层。还有SeqWeightedAttentionSeqSelfAttention layerkeras-self-attention包中。作为一个深度学习领域的新手,我很难理解这些层背后的机制。

这些外行各有什么作用?哪一款最适合我的模型?

非常感谢!

keras tensorflow recurrent-neural-network attention-model

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

如何在 Keras 中使用“有状态”变量/张量创建自定义层?

我想请您帮助创建我的自定义图层。我想做的实际上非常简单:生成一个带有“状态”变量的输出层,即其值在每个批次中更新的张量。

为了使一切更清楚,以下是我想做的事情的片段:

def call(self, inputs)

   c = self.constant
   m = self.extra_constant

   update = inputs*m + c 
   X_new = self.X_old + update 

   outputs = X_new

   self.X_old = X_new   

   return outputs
Run Code Online (Sandbox Code Playgroud)

这里的想法很简单:

  • X_old中初始化为0def__ init__(self, ...)
  • update被计算为层输入的函数
  • 计算该层的输出(即X_new
  • 的值X_old设置为等于X_new,以便在下一批中X_old不再等于零,而是等于X_new前一批。

我发现它K.update可以完成这项工作,如示例所示:

 X_new = K.update(self.X_old, self.X_old + update)
Run Code Online (Sandbox Code Playgroud)

这里的问题是,如果我尝试将层的输出定义为:

outputs = X_new

return outputs
Run Code Online (Sandbox Code Playgroud)

当我尝试 model.fit() 时,我会收到以下错误:

ValueError: An operation has `None` for gradient. Please make sure that all of …
Run Code Online (Sandbox Code Playgroud)

stateful layer keras tensorflow recurrent-neural-network

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

使用pytorch在rnn中隐藏维度和n_layers之间的差异

我陷入隐藏维度和 n_layers 之间。到目前为止我所理解的是,使用pytorch的RNN参数中的n_layers是隐藏层的数量。如果 n_layers 表示隐藏层数,那么隐藏维度是多少?

parameters hidden model recurrent-neural-network pytorch

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

与 pyTorch 相比,Jax/Flax(非常)慢的 RNN 前向传递?

我最近在 Jax 中实现了一个两层 GRU 网络,对其性能感到失望(无法使用)。

\n

所以,我尝试与 Pytorch 进行一些速度比较。

\n
最小工作示例
\n

这是我的最小工作示例,输出是在 Google Colab 上使用 GPU 运行时创建的。Colab 中的笔记本

\n
import flax.linen as jnn \nimport jax\nimport torch\nimport torch.nn as tnn\nimport numpy as np \nimport jax.numpy as jnp\n\ndef keyGen(seed):\n    key1 = jax.random.PRNGKey(seed)\n    while True:\n        key1, key2 = jax.random.split(key1)\n        yield key2\nkey = keyGen(1)\n\nhidden_size=200\nseq_length = 1000\nin_features = 6\nout_features = 4\nbatch_size = 8\n\nclass RNN_jax(jnn.Module):\n\n    @jnn.compact\n    def __call__(self, x, carry_gru1, carry_gru2):\n        carry_gru1, x = jnn.GRUCell()(carry_gru1, x)\n        carry_gru2, x = jnn.GRUCell()(carry_gru2, x)\n        x = jnn.Dense(4)(x)\n …
Run Code Online (Sandbox Code Playgroud)

python performance recurrent-neural-network pytorch jax

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