Keras pad_sequences为基数为10的int()抛出无效文字

doo*_*ohr 4 python numpy python-3.x keras tensorflow

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"
Run Code Online (Sandbox Code Playgroud)

嗨,您好.我在尝试使用Keras的pad_sequence函数时遇到此错误.X_train是一系列字符串,其中"plus've添加的广告经历俗气"是这些字符串中的第一个.

Dan*_*ler 6

pad_sequence功能都有其默认的数据类型为"INT32":

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

您传递的数据是字符串.


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

你必须"标记"这些字符串.即使你认为它可以填充字符串,你必须决定它将填充的字符:

  • 空间?但空格可能是有意义的字符
  • 一个空的角色?最好的想法,但如何增加一个包含空字符的字符串的长度?
  • 如果您使用的是单词而不是字符,每个标记/标识的字符串长度不同,该怎么办?

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

那么你可能会从使用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.....
Run Code Online (Sandbox Code Playgroud)

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