簡體   English   中英

將標簽編碼器實現為 TensorFlow 預處理層

[英]Implementing Label Encoder as a Tensorflow Preprocessing layer

根據我對 SKLearn 文檔的理解,SKLearn 中的LabelEncoder對 0 和減去 1 的類數之間的值進行編碼(即n_classes - 1)。

我想使用類似的東西作為 Tensorflow 預處理操作的一部分,以避免將 SKLearn 用於包。 例如,我理解預處理層提供了用於 OneHot 編碼和分類編碼的 API,如下所示:

tf.keras.layers.CategoryEncoding(
    num_tokens=None, output_mode='multi_hot', sparse=False, **kwargs
)

有什么方法可以通過CategoryEncoding API 中的某些參數使用 LabelEncoder,還是我必須使用 Tensorflow 文檔中提供的抽象基類模板定義一個全新的預處理層?

如果是這樣,是否有任何關於如何編寫自己的類以將LabelEncoder用作 Tensorflow 層的參考?

IIUC,你只需要稀疏的整數標簽。 所以,也許先嘗試一些簡單而天真的事情:

classes = ['fish1', 'fish2', 'fish3']

data = ['fish1', 'fish2', 'fish3', 'fish2', 'fish3', 'fish1']

class_indices = dict(zip(classes, range(len(classes))))
labels = list(map(class_indices.get, data))

print(labels) 
[0, 1, 2, 1, 2, 0]

或者使用Tensorflow ,您可以使用StaticHashTable

import tensorflow as tf

classes = ['fish1', 'fish2', 'fish3']
data = tf.constant(['fish1', 'fish2', 'fish3', 'fish2', 'fish3', 'fish1'])

table = tf.lookup.StaticHashTable(
    tf.lookup.KeyValueTensorInitializer(tf.constant(classes), tf.range(len(classes))),
    default_value=-1)

label_encoder = tf.keras.layers.Lambda(lambda x: table.lookup(x))

print(label_encoder(data))
tf.Tensor([0 1 2 1 2 0], shape=(6,), dtype=int32)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM