【问题标题】:How to save one_hot from tensorflow?如何从张量流中保存 one_hot?
【发布时间】:2022-01-15 11:00:48
【问题描述】:

我正在做一个自然语言处理项目。

为此,我使用来自 tensorflow 的一种热编码。

from keras.preprocessing.text import one_hot

我已经为一个特定的句子生成了一个数字序列。 即[7473, 7491, 6019, 5950, 7562, 1396, 4641, 7098, 135, 6836, 4566, 934, 5085, 5521, 5786, 第2854章

现在。我创建了一个 lstm 模型并希望使用 Flask API 进行部署。 但是,现在,最热门的不是为相同的句子生成相同的数字序列。

我曾尝试使用 pickle 文件保存一个热文件..但它没有奏效。

import joblib
joblib.dump(one_hot,"encoder.pkl")

我什至尝试在终端中使用 PythonHashSeed。他们只在同一时间在同一环境中工作。

!PYTHONHASHSEED=0

但它们都不适用于其他地方/未来用途。

是否有任何方法可以使用 dict、json 或任何其他方法保存一个热编码列表?

【问题讨论】:

  • 那么您的问题是如何将数字列表保存到文件中?那里有很多答案。还是您在问如何使编码可重现?
  • 我想保存编码字典 .. 就像现在编码器将“地球”转换为 100... “地球”,它应该给 100..
  • 回答有用吗?

标签: python tensorflow nlp tensorflow2.0 one-hot-encoding


【解决方案1】:

也许可以尝试像这样使用pickle,但请注意one_hot 一次只接受一个字符串文本输入。因此,您可能希望使用如下所述的不同方法:

import tensorflow as tf
import pickle

one_hot_encoded = tf.keras.preprocessing.text.one_hot('This is another fish', n=7)
print(one_hot_encoded)

with open('one_hot.pkl', 'wb') as f:
    pickle.dump(one_hot_encoded, f)

with open('one_hot.pkl', 'rb') as f:
    new_one_hot_encoded = pickle.load(f)
    
print(new_one_hot_encoded)
[1, 6, 4, 3]
[1, 6, 4, 3]

您还可以使用TextVectorization 并使用pickle 保存单词到索引字典:

import tensorflow as tf
import pickle

data = [
    "You are a fish",
    "This is a fish",
    "He is a fish",
]
layer = tf.keras.layers.TextVectorization()
layer.adapt(data)
vectorized_text = layer(data)
word_index = {key: i for i, key in enumerate(layer.get_vocabulary())}
print(word_index['fish'])

with open('one_hot.pkl', 'wb') as f:
    pickle.dump(word_index, f)

with open('one_hot.pkl', 'rb') as f:
    word_index = pickle.load(f)
    
print(word_index['fish'])

2
2

或者StringLookup:

layer = tf.keras.layers.StringLookup()
layer.adapt(tf.strings.split(tf.strings.lower(data)))
layer.get_vocabulary()

其余代码保持不变。

【讨论】:

  • 我想保存编码机器/对象......不是数字序列......就像我的编码器现在为“地球”提供 100......我想保存并重新使用它另一个地方....如果我转换“地球”,它应该给我 100
  • 更新答案。
猜你喜欢
  • 2018-07-10
  • 1970-01-01
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
  • 2021-08-30
相关资源
最近更新 更多