1.作用
⭐️ 对指定张量,进行one-hot编码,这一编码可以指定编码的维度(与传统的one-hot编码不同,传统的向量的长度取决于张量的维度数)
2.参数详解
⭐️ API形式如下
tf.one_hot(
indices, depth, on_value=None, off_value=None, axis=None, dtype=None, name=None
)
⭐️ 参数说明如下表:
参数名 | 说明 |
---|---|
indices | 要映射的张量 |
depth | 映射出来的维度 |
on_value | 符合时的值 |
off_value | 不符合时的值 |
axis | 要填充的维度 |
dtype | 输出张量的数据类型 |
name | 为这一操作取个名字,一般为None |
⭐️ 返回值: one-hot之后的张量
⭐️ 错误如下表:
错误代码 | 说明 |
---|---|
TypeError | 如果on_value或off_value的dtype不匹配dtype |
TypeError | 如果on_value和off_value的dtype不匹配dtype |
3.举例
⭐️ 传统one-hot编码,代码如下:
a = [1, 2, 3, 4, 5]
b = tf.one_hot(a, depth=len(a))
print(b)
# 输出结果为
tf.Tensor(
[[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]
[0. 0. 0. 0. 0.]], shape=(5, 5), dtype=float32)
⭐️ 张量A 映射成 4维one-hot, 代码如下:
a = [1, 2, 3, 4, 5]
b = tf.one_hot(a, depth=4)
print(b)
# 输出结果为
tf.Tensor(
[[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]], shape=(5, 4), dtype=float32)
⭐️ 设置on_value
、 off_value
和 dtype
a = [1, 2, 3, 4, 5]
b = tf.one_hot(a, depth=5, on_value=5, off_value=1, dtype="float16")
print(b)
# 输出结果为
tf.Tensor(
[[1. 5. 1. 1. 1.]
[1. 1. 5. 1. 1.]
[1. 1. 1. 5. 1.]
[1. 1. 1. 1. 5.]
[1. 1. 1. 1. 1.]], shape=(5, 5), dtype=float16)
⭐️ 指定映射维度axis
a = [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]
b = tf.one_hot(a, depth=5,axis=1, dtype="float16")
print(b)
# 输出结果为
tf.Tensor(
[[[0. 0. 0. 0. 0.]
[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]]
[[0. 0. 0. 0. 0.]
[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]]], shape=(2, 5, 5), dtype=float16)
4.总结
⭐️ 在缩小映射维度时,有些数据并不能用one-hot进行表征
⭐️ 在指定映射维度时,要注意想要映射的维度,以免造成意想不到的结果
5.参考资料
📗 1. 官方说明文档: tf.one_hot