【问题标题】:(To prevent Memory Error)How to one hot encode word list to a matrix of INTEGER 8 in Keras using Tokenize class(为了防止内存错误)如何使用 Tokenize 类在 Keras 中将一个热编码单词列表到 INTEGER 8 的矩阵
【发布时间】:2018-03-13 18:21:56
【问题描述】:

因为 FLOAT64 占用更多内存,这是标记化矩阵的默认数据类型,我希望它是 INT8 ,从而节省空间。

link to documentation

这就是我说的方法,

texts_to_matrix(texts):
Return: numpy array of shape (len(texts), num_words).
Arguments:
    texts: list of texts to vectorize.
    mode: one of "binary", "count", "tfidf", "freq" (default: "binary").

【问题讨论】:

    标签: python text keras nltk tokenize


    【解决方案1】:

    查看源代码,结果矩阵是使用np.zeros() 创建的here,没有dtype 关键字参数,这将导致dtype 被设置为function definition 中设置的默认值@ 987654328@。我认为选择这种数据类型是为了支持所有形式的转换,例如tfidf,这会导致非整数输出。 所以我认为你必须选择:

    1.更改源代码 您可以将关键字参数添加到texts_to_matrix 的定义中,例如dtype,并将创建矩阵的the line 更改为

    x = np.zeros((len(sequences), num_words), dtype=dtype)
    

    2.使用其他工具进行预处理: 您可以使用其他工具对文本进行预处理,然后将其提供给 keras 网络。例如你可以使用 scikit learn 的CountVectorizer like:

    from sklearn.feature_extraction.text import CountVectorizer
    cv = CountVectorizer(dtype=np.int8, ...)
    matrix = cv.fit_transform(texts).toarray()
    

    【讨论】:

    • 但这仅适用于我的本地计算机。我在 Google COLAB 中运行我的模型,那么如何在那里修改这个文件?
    • @ShashiTunga 我认为更改 Google Colab 上的源代码并不容易,因此我建议您在代码中将 keras.preprocessing.text.tokenizer 子类化(并将名称保留为 Tokenizer 所以不会是否需要更改其他代码)并在子类中应用您想要的修改并改用它。
    猜你喜欢
    • 1970-01-01
    • 2016-12-03
    • 2019-09-04
    • 2020-06-01
    • 2017-09-04
    • 2020-11-27
    • 1970-01-01
    • 2019-05-04
    • 2020-03-31
    相关资源
    最近更新 更多