【问题标题】:Tensorflow range vs. labelsTensorflow 范围与标签
【发布时间】:2021-01-08 00:04:35
【问题描述】:

Tensorflow 正在杀死我,请帮助 :) 我在这里找到了一些关于我遇到的问题的答案,但它们没有用......我不明白为什么会收到这条消息:


InvalidArgumentError:  Received a label value of 3 which is outside the valid range of [0, 3).  Label values: 2 3 3 1 2 1 1 3 1 1 1 2 3 3 1 1 1 3 1 3 2 3 1 2 1 3 2 1 2 2 2 3
     [[node sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits (defined at <ipython-input-68-069e54b769de>:2) ]] [Op:__inference_train_function_47373]

Function call stack:
train_function

我有三个输出标签,但错误提示 233121... 超过三个... 为什么?有趣的是,当我将最后一个密集层中的标签数量更改为 4 时,一切正常。但我不想要 4 个类,因为预测矩阵返回 4 列概率。

我的简单网络如下所示:

model = Sequential()
model.add(Embedding(len(word_index) + 1,
                     EMBEDDING_DIMENSION))
model.add(SpatialDropout1D(0.3))
model.add(Bidirectional(LSTM(EMBEDDING_DIMENSION)))
model.add(Dense(EMBEDDING_DIMENSION, activation='relu'))
model.add(Dropout(0.8))

model.add(Dense(EMBEDDING_DIMENSION, activation='relu'))
model.add(Dropout(0.8))

model.add(Dense(3, activation='softmax'))

我做错了什么?我有最新的 tf 2.3。我只在复制适用于原始数据的示例时更改数据输入...有什么想法吗?

【问题讨论】:

    标签: python tensorflow nlp label model-fitting


    【解决方案1】:

    您的标签应从 0 开始。也就是说,消息中的值将是 [1, 2, 2, 0, 1, 0, 0, ...]。通常,当您有n 类时,将标签编码为0n-1 之间的整数。由于您没有包含定义标签的代码,很遗憾我无法包含代码示例。

    【讨论】:

    • 它没有用。我将我的标签重新编码为 0,1,2 但错误仍然存​​在......在我复制的示例中(这个有效)标签是文本的 [thr, bfg, tdf] 最初我的标签也是文本的 [a,b,c ,]。感谢您的帮助!
    • 我想我找到了解决方案。在embedding层中shape需要通过三个args来定义:model.add(Embedding(VOCAB_SIZE, EMBEDDING_DIM, input_length=X.shape[1])) 关键是,input_length需要和X.shape[1]正确的值相匹配! !!它适用于我的情况(多标签分类,NLP)。
    猜你喜欢
    • 2022-06-29
    • 1970-01-01
    • 2012-09-20
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    • 2020-03-11
    相关资源
    最近更新 更多