【问题标题】:Keras pad_sequences throwing invalid literal for int () with base 10Keras pad_sequences 以 10 为基数为 int () 抛出无效文字
【发布时间】:2018-03-01 14:06:57
【问题描述】:
Traceback (most recent call last):
    File ".\keras_test.py", line 62, in <module>
        X_train = sequence.pad_sequences(X_train, maxlen=max_review_length)
    File "C:\Program Files\Python36\lib\site-packages\keras\preprocessing\sequence.py", line 69, in pad_sequences
        trunc = np.asarray(trunc, dtype=dtype)
    File "C:\Program Files\Python36\lib\site-packages\numpy\core\numeric.py", line 531, in asarray
    return array(a, dtype, copy=False, order=order)
ValueError: invalid literal for int() with base 10: "plus 've added commercials experience tacky"

你好。 尝试使用 Keras 的 pad_sequence 函数时出现此错误。 X_train 是一个字符串序列,其中“plus 've added commercials experience tacky”是这些字符串中的第一个。

【问题讨论】:

    标签: python python-3.x numpy tensorflow keras


    【解决方案1】:

    pad_sequence 函数的默认数据类型为“int32”:

    keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype='int32', 
                                               padding='pre', truncating='pre', value=0.)
    

    您传递的数据是一个字符串。


    除此之外,您不能在 keras 模型中使用字符串。

    您必须“标记化”这些字符串。即使你可能认为它可以填充字符串,你也必须决定它用什么字符填充:

    • 空格?但空格可能是有意义的字符
    • 空字符?最好的主意,但是如何增加带有空字符的字符串的长度?
    • 如果您使用的是单词而不是字符,其中每个标记/id 具有不同的字符串长度,该怎么办?

    这就是为什么您必须创建一个整数 id 值字典,以表示现有数据中的每个字符或单词。并在 ids 列表中转换所有字符串

    那么您可能会从使用Embedding 层启动模型中受益。


    例如,如果您使用的是单词 ID:

    Word 0: null word
    Word 1: end of sentence
    Word 2: space character (maybe not important to some languages)    
    Word 3: a
    Word 4: added
    Word 5: am    
    Word 6: and
    ....
    Word 520: plus
    Word 2014: 've
    Word 
    etc.....
    

    那么你的句子将是一个列表:[520, 2014, 4, ....]

    【讨论】:

    • 谢谢。想通了,我可能需要整数而不是单词。我现在有一个新问题。看起来我仍然没有正确的格式。实际尝试训练时出现“ValueError:检查输入时出错:预期 embedding_1_input 具有 2 维,但得到了形状为 (11802,25,1) 的数组”。 25 似乎也是所有句子填充的维度。不知道11802是从哪里来的。这不是句子的总数量......
    • 这个维度应该是(batch size, sentence length),其中batch size和句子数一样。如果你做对了,你有 11802 个句子,每个句子有 25 个标记(单词)。您的模型需要二维输入,但您的数据有 3 个(那里还有一个 1,在这种情况下没有用)。你可以简单地x_train.reshape((11802,25))
    • 那没有成功。同样的错误。 pastebin.com/01XhUnXZ也许我在错误的地方添加了reshape? :D 11802 是句子的数量 - 我脑子里有总数(训练+测试)。
    猜你喜欢
    • 2017-12-06
    • 2023-03-17
    • 2013-08-04
    • 2013-07-27
    • 2015-10-15
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多