gpt4 book ai didi

tensorflow keras嵌入LSTM

转载 作者:行者123 更新时间:2023-11-30 08:32:13 25 4
gpt4 key购买 nike

我想在将输入数据输入到我尝试创建的 LSTM 网络之前使用嵌入层。以下是代码的相关部分:

input_step1 = Input(shape=(SEQ_LENGTH_STEP1, NR_FEATURES_STEP1), 
name='input_step1')

step1_lstm = CuDNNLSTM(50,
return_sequences=True,
return_state = True,
name="step1_lstm")

out_step1, state_h_step1, state_c_step1 = step1_lstm(input_step1)

我对如何在此处添加嵌入层有点困惑..

以下是文档中对嵌入层的描述:

keras.layers.Embedding(input_dim, 
output_dim,
embeddings_initializer='uniform',
embeddings_regularizer=None,
activity_regularizer=None,
embeddings_constraint=None,
mask_zero=False,
input_length=None)

令人困惑的部分是我定义的Input定义了序列长度和特征数量。再次写在这里:

input_step1 = Input(shape=(SEQ_LENGTH_STEP1, NR_FEATURES_STEP1), 
name='input_step1')

在定义嵌入层时,我对嵌入函数的哪些参数对应于“序列数”和“每个时间步中的特征数”感到非常困惑。谁能指导我如何将嵌入层集成到上面的代码中?

附录:

如果我尝试以下操作:

SEQ_LENGTH_STEP1  = 5 
NR_FEATURES_STEP1 = 10

input_step1 = Input(shape=(SEQ_LENGTH_STEP1, NR_FEATURES_STEP1),
name='input_step1')

emb = Embedding(input_dim=NR_FEATURES_STEP1,
output_dim=15,
input_length=NR_FEATURES_STEP1)

input_step1_emb = emb(input_step1)

step1_lstm = CuDNNLSTM(50,
return_sequences=True,
return_state = True,
name="step1_lstm")

out_step1, state_h_step1, state_c_step1 = step1_lstm(input_step1_emb)

我收到以下错误:

ValueError: Input 0 of layer step1_lstm is incompatible with the layer:
expected ndim=3, found ndim=4. Full shape received: [None, 5, 10, 15]

我显然没有做正确的事情。有没有办法将Embedding集成到我尝试尝试的LSTM网络中?

最佳答案

来自 Keras Embedding文档:

Arguments

  • input_dim: int > 0. Size of the vocabulary, i.e. maximum integer index + 1.
  • output_dim: int >= 0. Dimension of the dense embedding.
  • input_length: Length of input sequences, when it is constant. This argument is required if you are going to connect Flatten then Dense layers upstream (without it, the shape of the dense outputs cannot be computed).
<小时/>

因此,根据您的描述,我认为:

  • input_dim 对应于数据集的词汇量(不同单词的数量)。例如,以下数据集的词汇量为5:

    data = ["Come back Peter,",
    "Come back Paul"]
  • output_dim 是一个任意超参数,指示嵌入空间的维度。换句话说,如果设置 output_dim=x,则句子中的每个单词都将具有 x 个特征。

  • input_length 应设置为 SEQ_LENGTH_STEP1(一个表示每个句子长度的整数),假设所有句子都具有相同的长度。

嵌入层的输出形状为(batch_size,input_length,output_dim)

<小时/>

有关附录的进一步说明:

  • team_in_step1 未定义。
  • 假设您的第一层是 Embedding 层,则输入张量 input_step1 的预期形状为 (batch_size, input_length):

    input_step1 = Input(shape=(SEQ_LENGTH_STEP1,), 
    name='input_step1')

    该张量中的每个整数对应一个单词。

  • 如上所述,嵌入层可以实例化如下:

    emb = Embedding(input_dim=VOCAB_SIZE,
    output_dim=15,
    input_length=SEQ_LENGTH_STEP1)

    其中 VOCAB_SIZE 是词汇量的大小。

  • 这个answer包含一个您可能会觉得有用的可重现示例。

关于 tensorflow keras嵌入LSTM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54822156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com