标签: recurrent-neural-network

用于预测数字序列的 Keras 模型

我正在尝试训练 Keras LSTM 模型来预测序列中的下一个数字。

  1. 下面我的模型有什么问题,当模型没有学习时我如何调试
  2. 我如何决定使用哪些图层类型
  3. 编译时我应该根据什么选择损失和优化器参数

我的输入训练数据的形状 (16000, 10) 如下所示

[
    [14955 14956 14957 14958 14959 14960 14961 14962 14963 14964]
    [14731 14732 14733 14734 14735 14736 14737 14738 14739 14740]
    [35821 35822 35823 35824 35825 35826 35827 35828 35829 35830]
    [12379 12380 12381 12382 12383 12384 12385 12386 12387 12388]
    ...
]
Run Code Online (Sandbox Code Playgroud)

相应的输出训练数据的形状 (16000, 1) 如下所示

[[14965] [14741] [35831] [12389] ...]
Run Code Online (Sandbox Code Playgroud)

正如 LSTM 所抱怨的,我重塑了训练/测试数据

X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)
Run Code Online (Sandbox Code Playgroud)

这是最终的训练/测试数据形状

Total Samples: 20000 …
Run Code Online (Sandbox Code Playgroud)

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

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

Tensorflow LSTM 抛出 ValueError: Shape () must have rank at least 2

尝试运行时,抛出以下异常(ValueError)

ValueError: Shape () must have rank at least 2
Run Code Online (Sandbox Code Playgroud)

这是针对以下行抛出的:

states_series, current_state = tf.contrib.rnn.static_rnn(cell, inputs_series, init_state)
Run Code Online (Sandbox Code Playgroud)

这里cell定义的地方:

cell = tf.contrib.rnn.BasicLSTMCell(state_size, state_is_tuple=True)
Run Code Online (Sandbox Code Playgroud)

查看RNNTesor_shape的规则,我可以看到这是某种张量维度形状问题。据我所知,它没有被BasicLSTMCell视为一个秩为 2 的矩阵?

完整错误:

/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 /Users/glennhealy/PycharmProjects/firstRNNTest/LSTM-RNN.py
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: compiletime version 3.5 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.6
  return f(*args, **kwds)
Traceback (most recent call last):
  File "/Users/glennhealy/PycharmProjects/firstRNNTest/LSTM-RNN.py", line 42, in <module>
    states_series, current_state = tf.contrib.rnn.static_rnn(cell, inputs_series, init_state)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/ops/rnn.py", line 1181, in static_rnn
    input_shape = first_input.get_shape().with_rank_at_least(2)
  File …
Run Code Online (Sandbox Code Playgroud)

python neural-network lstm tensorflow recurrent-neural-network

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

如何在 Keras 中对卷积循环网络 (CRNN) 建模

我试图将CRNN模型移植到 Keras。

但是,我在将 Conv2D 层的输出连接到 LSTM 层时卡住了。

CNN 层的输出将具有(batch_size, 512, 1, width_dash)的形状,其中第一个取决于 batch_size,最后一个取决于输入的输入宽度(此模型可以接受可变宽度输入)

例如:形状为[2, 1, 32, 829]的输入产生形状为(2, 512, 1, 208) 的输出

现在,根据Pytorch 模型,我们必须执行挤压 (2)permute(2, 0, 1) 它将产生一个形状为 [208, 2, 512] 的张量

我试图实现这是 Keras,但我无法做到这一点,因为在 Keras 中,我们无法更改keras.models.Sequential模型中的batch_size 维度

有人可以指导我如何将这个模型的一部分移植到 Keras 吗?

移植 CNN 层的当前状态

lstm keras recurrent-neural-network pytorch

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

有状态 LSTM - 批次之间和批次内的隐藏状态转移 (Keras)

当您的 batch_size > 1 时,隐藏/单元格状态如何从一个批次内转移,以及跨批次,我一直很困惑。

我目前的假设是隐藏状态永远不会在一个批次内从一个系列转移到另一个系列。即当batch_size = 3 时,第一项的隐藏状态不会传递给第二项。

接下来,设置 Stateful=True 将意味着第一批的第一个元素的隐藏状态被传递给第二批的第一个元素,依此类推。

这是文档状态:

    If True, the last state
    for each sample at index i in a batch will be used as initial
    state for the sample of index i in the following batch.
Run Code Online (Sandbox Code Playgroud)

我一直在努力寻找对此的确认,而且它似乎也不是很直观,因为假设我的数据是连续的,并且我已将我的数据批量处理为 3,我不明白为什么我想要隐藏状态从第 1 个单元转移到第 4 个单元,第 2 个单元转移到第 5 个单元,以此类推。

machine-learning lstm keras recurrent-neural-network rnn

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

Tensorflow:低级 LSTM 实现

我正在寻找在 Tensorflow 中使用 LSTM 单元的 RNN 的低级实现。我已经实现了几个使用低级 API 的前馈网络。这对我理解人工神经网络的内部运作有很大帮助。我可以对 RNN 做同样的事情,还是建议使用 LSTM 单元的 Tensorflow 实现(tf.nn.rnn_cell.BasicLSTMCell)?我没有在 Tensorflow 中找到任何 RNN 的低级实现。我在哪里可以找到这么低级的实现?Tensorflow 是为此而设计的吗?我可以从哪里开始?我希望我的一些问题可以在这里得到解答

python lstm tensorflow recurrent-neural-network

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

Torchtext AttributeError: 'Example' 对象没有属性 'text_content'

我正在使用 RNN 并使用 Pytorch 和 Torchtext。我在 RNN 中构建词汇时遇到问题。我的代码如下:

TEXT = Field(tokenize=tokenizer, lower=True)
LABEL = LabelField(dtype=torch.float)

trainds = TabularDataset(
    path='drive/{}'.format(TRAIN_PATH), format='tsv',
    fields=[
        ('label_start', LABEL),
        ('label_end', None),
        ('title', None),
        ('symbol', None),
        ('text_content', TEXT),
    ])

testds = TabularDataset(
    path='drive/{}'.format(TEST_PATH), format='tsv',
    fields=[
        ('text_content', TEXT),
    ])

TEXT.build_vocab(trainds, testds)
Run Code Online (Sandbox Code Playgroud)

当我想构建 vocab 时,我收到了这个烦人的错误:

AttributeError: 'Example' object has no attribute 'text_content'
Run Code Online (Sandbox Code Playgroud)

我敢肯定,没有缺少text_contentattr。我做了 try-catch 以显示这个特定案例:

try:
    print(len(trainds[i]))
except:
    print(trainds[i].text_content)
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,我没有收到任何错误,这个特定的打印命令显示:

['znana', 'okresie', 'masarni', 'walc', 'y', 'my?l', 'programie', 'sprawy', ...]
Run Code Online (Sandbox Code Playgroud)

所以它表明, text_contentattr。当我在较小的数据集上执行此操作时,它就像一个魅力。当我想使用正确的数据时会出现此问题。我的想法用完了。也许有人有类似的情况,可以解释一下。

我的完整追溯:

AttributeError                            Traceback (most …
Run Code Online (Sandbox Code Playgroud)

nlp neural-network recurrent-neural-network pytorch torchtext

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

提供 POS 标签作为 RNN 的输入以及词嵌入

我必须将输入作为词嵌入 + POS 标签提供给 RNN。但是词嵌入仅由代码生成。所以我不能连接嵌入和 POS 一个热向量。完成此任务的最佳方法是什么?

def BidLstm(maxlen, N_TAGS, EMBEDDING_DIM, embedding_matrix):
    inp = Input(shape=(maxlen,), dtype='int32')
    x = Embedding(len(word2int) + 1,
                            EMBEDDING_DIM,
                            weights=[embedding_matrix],
                            input_length=maxlen,
                            trainable=False)(inp)


    x = Bidirectional(LSTM(300, return_sequences=True, dropout=0.25,
                           recurrent_dropout=0.25))(x)
    xa = Attention(maxlen)(x)
    xd = Dense(256, activation="relu")(xa)
    xdp = Dropout(0.25)(xd)
    xd1 = Dense(5, activation="softmax")(xdp)
    #x = TimeDistributed(Dense(N_TAGS + 1, activation='softmax'))(x)
    model = Model(inputs=inp, outputs=xd1)
    return model


model = BidLstm(max(sentence_length_list),5, EMBEDDING_DIM, embedding_matrix)
model.compile(loss='binary_crossentropy', optimizer='adam',
              metrics=['accuracy'])
file_path = ".model.hdf5"
ckpt = ModelCheckpoint(file_path, monitor='val_loss', verbose=1,
                       save_best_only=True, mode='min')
early = EarlyStopping(monitor="val_loss", mode="min", patience=1) …
Run Code Online (Sandbox Code Playgroud)

keras recurrent-neural-network

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

堆叠 LSTM 的初始状态结构

使用tf.keras.layers.RNNAPI 的TensorFlow (1.13.1) 中多层/堆叠 RNN 的初始状态所需的结构是什么?

我尝试了以下方法:

lstm_cell_sizes = [256, 256, 256]
lstm_cells = [tf.keras.layers.LSTMCell(size) for size in lstm_cell_sizes]

state_init = [tf.placeholder(tf.float32, shape=[None] + cell.state_size) for cell in lstm_cells]

tf.keras.layers.RNN(lstm_cells, ...)(inputs, initial_state=state_init)
Run Code Online (Sandbox Code Playgroud)

这导致:

ValueError: Could not pack sequence. Structure had 6 elements, but flat_sequence had 3 elements.  Structure: ([256, 256], [256, 256], [256, 256]), flat_sequence: [<tf.Tensor 'player/Placeholder:0' shape=(?, 256, 256) dtype=float32>, <tf.Tensor 'player/Placeholder_1:0' shape=(?, 256, 256) dtype=float32>, <tf.Tensor 'player/Placeholder_2:0' shape=(?, 256, 256) dtype=float32>].
Run Code Online (Sandbox Code Playgroud)

如果我改为state_init具有形状的扁平张量列表[None, 256] …

lstm keras tensorflow recurrent-neural-network

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

如何在 tensorflow 2.0 RNN 中使用预训练的嵌入矩阵作为嵌入层的初始权重?

我想使用预训练的 GloVe 嵌入作为 RNN 编码器/解码器中嵌入层的初始权重。代码在 Tensorflow 2.0 中。简单地将嵌入矩阵作为 weights = [embedding_matrix] 参数添加到 tf.keras.layers.Embedding 层不会这样做,因为编码器是一个对象,我现在不确定在训练时间。

我的代码严格遵循Tensorflow 2.0 文档中神经机器翻译示例。在此示例中,我将如何向编码器添加预先训练的嵌入矩阵?编码器是一个对象。当我开始训练时,GloVe 嵌入矩阵对 Tensorflow 图不可用。我收到错误消息:

运行时错误:无法在 Tensorflow 图形函数中获取值。

代码在训练过程中使用了 GradientTape 方法和教师强制。

我尝试修改编码器对象以在各个点包含 embedding_matrix,包括在编码器的init、 call 和 initialize_hidden_​​state 中。所有这些都失败了。stackoverflow 和其他地方的其他问题是针对 Keras 或更旧版本的 Tensorflow,而不是 Tensorflow 2.0。

class Encoder(tf.keras.Model):
    def __init__(self, vocab_size, embedding_dim, enc_units, batch_sz):
        super(Encoder, self).__init__()
        self.batch_sz = batch_sz
        self.enc_units = enc_units
        self.embedding = tf.keras.layers.Embedding(vocab_size, embedding_dim, weights=[embedding_matrix])
        self.gru = tf.keras.layers.GRU(self.enc_units,
                                       return_sequences=True,
                                       return_state=True,
                                       recurrent_initializer='glorot_uniform')

    def call(self, x, hidden):
        x = self.embedding(x)
        output, state …
Run Code Online (Sandbox Code Playgroud)

nlp embedding tensorflow recurrent-neural-network glove

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

在 Keras 分类中实现注意力

我想实现对训练有素的图像分类 CNN 模型的关注。例如,有 30 个类,使用 Keras CNN,我为每个图像获得预测类。但是,要可视化预测结果的重要特征/位置。我想在 FC 层之后添加一个 Soft Attention。我尝试阅读“展示、出席和讲述:具有视觉注意的神经图像字幕生成”以获得类似的结果。但是,我无法理解作者是如何实现的。因为我的问题不是图像标题或文本 seq2seq 问题。

我有一个图像分类 CNN,想提取特征并将其放入 LSTM 以可视化软注意力。虽然我每次都卡住了。

我采取的步骤:

  1. 加载CNN模型
  2. 从单个图像中提取特征(但是,LSTM 会检查同一图像并删除图像中的一些补丁)

我采取的步骤:

  1. 加载 CNN 模型(我之前已经训练了 CNN 进行预测)
  2. 从单个图像中提取特征(但是,LSTM 会检查同一图像并删除图像中的一些补丁)

执行以下步骤后卡住:

  1. 用软注意力创建 LSTM
  2. 获取单个输出

我正在使用具有 TensorFlow 背景的 Keras。使用 ResNet50 提取 CNN 特征。图像为 224x224,FC 层有 2048 个单位作为输出形状。

#Extract CNN features:

base_model = load_model(weight_file, custom_objects={'custom_mae': custom_mae})
last_conv_layer = base_model.get_layer("global_average_pooling2d_3")
cnn_model = Model(input=base_model.input, output=last_conv_layer.output)
cnn_model.trainable = False
bottleneck_features_train_v2 = cnn_model.predict(train_gen.images)


#Create LSTM:    

seq_input = Input(shape=(1, 224, 224, 3 ))
encoded_frame = TimeDistributed(cnn_model)(seq_input) …
Run Code Online (Sandbox Code Playgroud)

python keras tensorflow recurrent-neural-network attention-model

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