TensorFlow的one_hot函数

本文详细介绍了TensorFlow中one_hot函数的使用方法及参数解释,包括如何生成独热向量,以及如何通过调整参数实现不同的独热向量布局。通过实例展示了不同参数设置下one_hot函数的行为变化。

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

import tensorflow as tf
tf.one_hot(indices, depth, on_value, off_value, axis)

indices是一个列表,指定张量中独热向量的独热位置,或者说indeces是非负整数表示的标签列表。len(indices)就是分类的类别数。

tf.one_hot返回的张量的阶数为indeces的阶数+1。

 

当indices的某个分量取-1时,即对应的向量没有独热值。

depth是每个独热向量的维度

on_value是独热值

off_value是非独热值

axis指定第几阶为depth维独热向量,默认为-1,即,指定张量的最后一维为独热向量

例如:对于一个2阶张量而言,axis=0时,即,每个列向量是一个独热的depth维向量

axis=1时,即,每个行向量是一个独热的depth维向量。axis=-1,等价于axis=1

import tensorflow as tf

# 得到4个5维独热行向量向量,
#    其中第1个向量的第0个分量是独热1,
#    第2个向量的第2个分量是独热,
#    第3个向量没有独热,因为指定为-1
#    第4个向量的第1个分量为独热
# labels向targets的转变
labels = [0, 2, -1, 1]
# labels是shape=(4,)的张量。则返回的targets是shape=(len(labels), depth)张量。
# 且这种情况下,axis=-1等价于axis=1
targets = tf.one_hot(indices=labels, depth=5, on_value=1.0, off_value=0.0, axis=-1)
with tf.Session() as sess:
    sess.run(targets)
[[ 1.  0.  0.  0.  0.]
 [ 0.  0.  1.  0.  0.]
 [ 0.  0.  0.  0.  0.]
 [ 0.  1.  0.  0.  0.]]

# 得到1个5维独热行向量。
targets = tf.one_hot(indices=3, depth=5, on_value=1.0, off_value=0.0, axis=0)
with tf.Session() as sess:
    sess.run(targets)
[ 0.  0.  0.  1.  0.]

# 得到1个5维独热列向量
targets = tf.one_hot(indices=[3], depth=5, on_value=1.0, off_value=0.0, axis=0)
with tf.Session() as sess:
    sess.run(targets)
[[ 0.]
[ 0.]
[ 0.]
[ 1.]
[ 0.]]

targets = tf.one_hot(indices=[[0,1],[1,0]], depth=3)
with tf.Session() as sess:
    print(sess.run(targets))
[[[ 1.  0.  0.]
  [ 0.  1.  0.]]
 [[ 0.  1.  0.]
  [ 1.  0.  0.]]]

注:indices如果是n阶张量,则返回的one-hot张量则为n+1阶张量

在实际神经网络的设计应用中,给定的labels通常是数字列表,以标识样本属于哪一个分类。类别数则是独热向量的维数。

# 得到分类的独热向量
targets = tf.one_hot(labels, num_classes)
### 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、付费专栏及课程。

余额充值