我正在尝试在实时运行的应用程序中运行在 Keras 中训练的 RNN。这里循环网络(LSTM)中的“时间”是接收数据时的实际时刻。
我想以在线方式获取 RNN 的输出。对于非循环模型,我只是将输入塑造成形状inputDatum=1,input_shape并Model.predict在其上运行。我不确定这是否是在 Keras 中为应用程序使用前向传递的预期方法,但它对我有用。
但对于循环模块,Model.predict期望整个输入作为输入,包括时间维度。所以它不起作用...
有没有办法在 Keras 中执行此操作,或者我是否需要转到 Tensorflow 并在那里实现操作?
我创建了一个 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
我应该使用相同的权重来计算双向 RNN 中的前向和后向传递,还是应该独立学习这些权重?
neural-network keras tensorflow recurrent-neural-network pytorch
我正在训练一个语言模型,每次训练时都会绘制损失与历元的关系。我附上了其中的两个样本。
显然,第二个表现出了更好的表现。但是,从这些图表来看,我们什么时候决定停止训练(提前停止)?
我们可以从这些图表中理解过度拟合和欠拟合还是我需要绘制额外的学习曲线?
从这些图中可以得出哪些额外的推论?
我正在使用 LSTM 网络进行多元多时间步预测。因此,基本上seq2seq预测是将多个数据n_inputs输入模型以预测n_outputs时间序列的多个数据。
我的问题是如何有意义地应用Dropout,BatchnNormalization因为这似乎是循环网络和 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)
案例 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)
lstm keras recurrent-neural-network batch-normalization dropout
我正在尝试将 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
我正在尝试为我的文本分类模型添加一个注意层。输入是文本(例如电影评论),输出是二元结果(例如正面与负面)。
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包中。作为一个深度学习领域的新手,我很难理解这些层背后的机制。
这些外行各有什么作用?哪一款最适合我的模型?
非常感谢!
我想请您帮助创建我的自定义图层。我想做的实际上非常简单:生成一个带有“状态”变量的输出层,即其值在每个批次中更新的张量。
为了使一切更清楚,以下是我想做的事情的片段:
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) 我陷入隐藏维度和 n_layers 之间。到目前为止我所理解的是,使用pytorch的RNN参数中的n_layers是隐藏层的数量。如果 n_layers 表示隐藏层数,那么隐藏维度是多少?
我最近在 Jax 中实现了一个两层 GRU 网络,对其性能感到失望(无法使用)。
\n这是我的最小工作示例,输出是在 Google Colab 上使用 GPU 运行时创建的。Colab 中的笔记本
\nimport 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) keras ×7
tensorflow ×5
pytorch ×4
lstm ×3
python ×2
dropout ×1
hidden ×1
jax ×1
layer ×1
model ×1
nlp ×1
parameters ×1
performance ×1
stateful ×1