tf.one_hot()使用说明

这篇博客详细介绍了TensorFlow中的tf.one_hot函数,包括其参数解释和使用示例。tf.one_hot用于将整数索引转换为one-hot编码,其中指定位置的值为on_value,其他位置为off_value。当indices是多维张量时,输出会增加一维。文章强调了on_value和off_value的数据类型匹配以及如何处理不规则形状的输入。同时,提供了多个代码示例以帮助读者更好地理解和应用tf.one_hot。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@tensorflow学习笔记

tf.one_hot

本文只作为个人学习记录,参考tensorflow中文官网 tf中文官网

调用格式

tf.one_hot(indices, depth, on_value=None, off_value=None, axis=None, dtype=None, name=None)

参数说明

· indices :一个索引的张量。
· depth : 定义one_hot 维度的标量
· on_value: 定义一个填充输出的值,其中indices[j] = i(默认:1)
· off_value: 定义填充输出的值,其中indices[j]!= i(默认:0)
· axis: 将要填充的轴axis(默认 -1 ,一个新的最内轴)
· dtype:输出张量的数据类型。
· name:操作的名称(可选)。

输出

一个 one_hot 张量

可能会出的错误

  1. TypeError
    是否 on_value 或 off_value 与 dtype 不匹配。
  2. TypeError
    是否 on_value , off_value 彼此不匹配

提示

  1. indices 所在位置取值为 on_value,而其他位置从 off_value 取值。

  2. on_value 和 off_value 数据类型一定要匹配。如果 dtype 有值,它们必须取与 dtype所显示类型相同的值。
    如果 on_value 没有值,默认值为 1,类型为 dtype.
    如果 off_value 没有值, 默认值为 0,类型为 dtype.
    如果 indices 是 N 维,则输出为 N+1 维。新的一维创建在 axis 所示的维(默认:新的一轴加在末尾)

  3. 如果 indices 是标量,则输出是长度为深度的向量。
    如果 indices 是长为 feature 的向量,则输出将会是: 在这里插入图片描述
    如果 indices 是一个大小为 [batch, features] 的矩阵(batch) ,输出形式为: 在这里插入图片描述
    如果 indices 是不规则形状(RaggedTensor),axis 必须是正的,且指向一个非不规则的轴。输出会等价与 one_hot 应用与一个不规则形状的值的输出,且从结果中产生一个新的不规则形状。
    如果 dtype 没有值,它会尝试假设数据的类型是 on_value 或者 off_value,如果一个或者两个都通过的话。如果 on_value, off_value, dtype 都没有值,dtpye 会默认值 为tf.float32.
    **注意:如果需要非数值类型的输出(如tf.string, tf.bool, etc), on_value, off_value 都需要有值。

例子

在这里插入图片描述

### TensorFlow 中 `tf.one_hot` 函数详解 #### 函数概述 `tf.one_hot` 是用于将索引转换为 one-hot 编码张量的函数。此操作创建一个新的张量,其中每个位置都对应于输入中的一个类别标签,并将其标记为激活状态(通常是1),而其他位置则保持未激活状态(通常为0)。这在分类任务中特别有用,尤其是在处理多类别的场景下[^1]。 #### 参数解释 该函数接受多个参数来定制其行为: - **indices**: 输入的数据,可以是一个整数列表或张量,表示要被编码的位置。 - **depth**: 表示目标 one-hot 向量的长度,即总共可能存在的不同类别数量。 - **on_value**: 可选,默认值为 None;指定当某个元素处于激活状态时应赋予的具体数值。 - **off_value**: 可选,默认值也为 None;指定了非激活状态下应该设置为何种数值。 - **axis**: 控制 one-hot 编码的方向,在某些情况下可用于调整输出维度顺序。 - **dtype**: 设置返回张量的数据类型。 - **name**: 给这个操作命名以便更好地追踪图结构内的节点名称[^4]。 #### 使用实例 下面给出几个具体的例子展示如何调用 `tf.one_hot()` 来实现不同的需求: ```python import tensorflow as tf # 创建简单的one-hot向量 a = [1, 2, 3] b = tf.one_hot(a, depth=4) print(b.numpy()) ``` 这段代码会打印出如下结果: ``` [[0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]] ``` 这里可以看到,对于每一个原始数组中的数字 n ,都会生成一个大小为 depth 的新向量,在第 n 位上设为 1 而其余均为 0 。注意这里的 index 序号是从零开始计数的[^3]。 如果希望自定义激活和非激活的状态,则可以通过设定 `on_value` 和 `off_value` 参数来进行修改: ```python c = tf.one_hot([0, 1, 2], depth=3, on_value='yes', off_value='no') print(c.numpy()) ``` 上述代码将会得到字符串类型的 one-hot 编码矩阵,而不是默认的浮点型数值。 #### 特殊情况处理 需要注意的是,如果提供的 indices 值超出了所允许的最大范围 (由 depth 定义),那么超出部分对应的行将全部填充为 `off_value` 或者是默认的 0 值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值