一直在寻找,但似乎找不到任何关于如何从 TensorFlow 中的单热值解码或转换回单个整数的示例。
我使用tf.one_hot
并且能够训练我的模型,但在分类后如何理解标签有点困惑。我的数据是通过TFRecords
我创建的文件输入的。我想过在文件中存储一个文本标签,但无法让它工作。似乎TFRecords
无法存储文本字符串,或者我弄错了。
一直在寻找,但似乎找不到任何关于如何从 TensorFlow 中的单热值解码或转换回单个整数的示例。
我使用tf.one_hot
并且能够训练我的模型,但在分类后如何理解标签有点困惑。我的数据是通过TFRecords
我创建的文件输入的。我想过在文件中存储一个文本标签,但无法让它工作。似乎TFRecords
无法存储文本字符串,或者我弄错了。
您可以使用 找出矩阵中最大元素的索引tf.argmax
。由于您的一个热向量将是一维的,并且只有一个1
和其他0
s,因此假设您正在处理单个向量,这将起作用。
index = tf.argmax(one_hot_vector, axis=0)
对于 的更标准的矩阵batch_size * num_classes
,使用axis=1
来获得 size 的结果batch_size * 1
。
由于 one-hot 编码通常只是一个包含batch_size
行和num_classes
列的矩阵,并且每一行都为零,并且有一个与所选类相对应的非零,您可以使用它tf.argmax()
来恢复整数标签的向量:
BATCH_SIZE = 3
NUM_CLASSES = 4
one_hot_encoded = tf.constant([[0, 1, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 1]])
# Compute the argmax across the columns.
decoded = tf.argmax(one_hot_encoded, axis=1)
# ...
print sess.run(decoded) # ==> array([1, 0, 3])
data = np.array([1, 5, 3, 8])
print(data)
def encode(data):
print('Shape of data (BEFORE encode): %s' % str(data.shape))
encoded = to_categorical(data)
print('Shape of data (AFTER encode): %s\n' % str(encoded.shape))
return encoded
encoded_data = encode(data)
print(encoded_data)
def decode(datum):
return np.argmax(datum)
decoded_Y = []
print("****************************************")
for i in range(encoded_data.shape[0]):
datum = encoded_data[i]
print('index: %d' % i)
print('encoded datum: %s' % datum)
decoded_datum = decode(encoded_data[i])
print('decoded datum: %s' % decoded_datum)
decoded_Y.append(decoded_datum)
print("****************************************")
print(decoded_Y)
tf.argmax
已折旧(因此,此页面上答案中的所有链接都是 404),现在tf.math.argmax
应该使用 .
用法:
import tensorflow as tf
a = [1, 10, 26.9, 2.8, 166.32, 62.3]
b = tf.math.argmax(input = a)
c = tf.keras.backend.eval(b)
# c = 4
# here a[4] = 166.32 which is the largest element of a across axis 0
注意:您也可以使用numpy执行此操作。