【问题标题】:LSTM InvalidArgumentErrorLSTM InvalidArgumentError
【发布时间】:2020-12-09 12:06:13
【问题描述】:

我正在尝试同时实现字符和单词 lstms,但我不断收到此错误:

InvalidArgumentError:  indices[310,0] = 119 is not in [0, 119)
     [[node model_3/time_distributed_12/embedding_7/embedding_lookup (defined at <ipython-input-64-51f6ad92087d>:3) ]] [Op:__inference_train_function_28785]

Errors may have originated from an input operation.
Input Source operations connected to node model_3/time_distributed_12/embedding_7/embedding_lookup:
 model_3/time_distributed_12/embedding_7/embedding_lookup/24179

这是我的模型:

# input and embedding for words
word_in = Input(shape=(max_len,))
emb_word = embedding_layer(word_in)

# input and embeddings for characters
char_in = Input(shape=(max_len, max_len_char,)) 
emb_char = Embedding(input_dim=n_chars + 1, output_dim=20, 
                           input_length=max_len_char, mask_zero=True)
print(emb_char)
char_dist = TimeDistributed(emb_char)(char_in)
# character LSTM to get word encodings by characters
char_enc = TimeDistributed(LSTM(units=20, return_sequences=False,
                                recurrent_dropout=0.5))(char_dist)

# main LSTM

x = concatenate([emb_word, char_enc])

x = SpatialDropout1D(0.3)(x)
main_lstm = Bidirectional(LSTM(units=50, return_sequences=False,recurrent_dropout=0.6))(x)
out = Dense(num_of_classes, activation="sigmoid")(main_lstm)


model = Model([word_in, char_in], out)

我读过它与输入有关。我的 X_char_tr 形状是 (2770, 10, 30) X_word_tr.shape 是 (2770, 10) 而 y_tr 是 (2770,135)

history = model.fit([X_word_tr,
                    (np.array(X_char_tr)).astype('float32').reshape((len(X_char_tr), max_len, max_len_char))],
                    np.array(to_categorical(y_tr)), epochs=10, verbose=1)

这是我的词嵌入层:

embedding_layer = Embedding(
    vocab_size + 1,
    config['W2V_DIM'],
    weights=[w2v_weights],
    input_length=max_sequence_len,
    trainable=False
)

词向量形状为(n_words,128)

【问题讨论】:

    标签: python tensorflow keras lstm embedding


    【解决方案1】:

    检查 X_char_tr。据我了解 - 词汇量 (n_char) 为 118。因此该张量的最大允许值为 118。但第一个值为 119。

    试试这个:

    print(tf.where(X_char_tr>118))
    

    【讨论】:

    • 是的,这就是我拥有的唯一字符 n_chars 的数量。 char 嵌入的 input_dim 应该是别的吗?
    • 什么是 X_char_tr[0][0][0] ?是 119 吗?
    • 不,38。我是X_char_tr[0][0]array([ 38, 79, 115, 61, 46, 55, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
    • 我知道tf.Tensor([], shape=(0, 3), dtype=int64) ,但不确定这意味着什么。第一次运行它,它抱怨数组中的 NoneTypes 所以我必须将它们转换为浮点数
    • 这意味着你的 X_char_tr 没有超过 118 的元素。所以它是正确的。请在问题中添加 embedding_layer() 的代码
    猜你喜欢
    • 2021-09-04
    • 1970-01-01
    • 2021-09-02
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 2020-03-13
    相关资源
    最近更新 更多