日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

python?label與one-hot之間的互相轉(zhuǎn)換方式_python

作者:強殖裝甲凱普 ? 更新時間: 2023-03-28 編程語言

label與one-hot之間的互相轉(zhuǎn)換

有時候需要label,比如強化學習的離散動作空間,輸出動作索引;有時候需要one-hot,比如訓練數(shù)據(jù)或者輸入上一個狀態(tài)的動作,簡單的互相轉(zhuǎn)換還是重要的。

label 轉(zhuǎn) one-hot

通過 np.eye(action_dims)[actions] 快速生成:

>>> import numpy as np
>>> label = [1,2,2,3]
>>> np.eye(4)[label]
array([[0., 1., 0., 0.],
? ? ? ?[0., 0., 1., 0.],
? ? ? ?[0., 0., 1., 0.],
? ? ? ?[0., 0., 0., 1.]])

one-hot 轉(zhuǎn)label

numpy可以通過 np.argmax(onehot, 1) 實現(xiàn),pytorch 可以通過 torch.topk(one_hot, 1)[1].squeeze(1) 實現(xiàn):

>>> import torch
>>> onehot
array([[0., 1., 0., 0.],
? ? ? ?[0., 0., 1., 0.],
? ? ? ?[0., 0., 1., 0.],
? ? ? ?[0., 0., 0., 1.]])
>>> np.argmax(onehot,1)
array([1, 2, 2, 3], dtype=int64)
>>> torch.topk(torch.tensor(onehot), 1)[1].squeeze(1)
tensor([1, 2, 2, 3])

label:one-hot 與 標量轉(zhuǎn)化

標量 轉(zhuǎn)化為 one-hot 向量

from keras.utils import to_categorical

data = [1, 3, 2, 0, 3, 2, 2, 1, 0, 1]
encoded = to_categorical(data)
print("encoded:", encoded)

輸出:

encoded: [[0. 1. 0. 0.]
??? ??? ??? ?[0. 0. 0. 1.]
??? ??? ??? ?[0. 0. 1. 0.]
??? ??? ??? ?[1. 0. 0. 0.]
??? ??? ??? ?[0. 0. 0. 1.]
??? ??? ??? ?[0. 0. 1. 0.]
??? ??? ??? ?[0. 0. 1. 0.]
??? ??? ??? ?[0. 1. 0. 0.]
??? ??? ??? ?[1. 0. 0. 0.]
??? ??? ??? ?[0. 1. 0. 0.]]

one-hot向量 轉(zhuǎn)化為 標量

因為一個熱向量是一個包含0和1的向量,所以可以這樣做:

encoded = np.array([[0, 1, 0, 0],
? ? ? ? ? ? ? ? ? ? [0, 0, 0, 1],
? ? ? ? ? ? ? ? ? ? [0, 0, 1, 0],
? ? ? ? ? ? ? ? ? ? [1, 0, 0, 0],
? ? ? ? ? ? ? ? ? ? [0, 0, 0, 1],
? ? ? ? ? ? ? ? ? ? [0, 0, 1, 0],
? ? ? ? ? ? ? ? ? ? [0, 0, 1, 0],
? ? ? ? ? ? ? ? ? ? [0, 1, 0, 0],
? ? ? ? ? ? ? ? ? ? [1, 0, 0, 0],
? ? ? ? ? ? ? ? ? ? [0, 1, 0, 0]])

data = [np.where(r == 1)[0][0] for r in encoded]
print("data:", data)

輸出:

data: [1, 3, 2, 0, 3, 2, 2, 1, 0, 1]

總結(jié)

原文鏈接:https://blog.csdn.net/qq_38163755/article/details/125428293

欄目分類
最近更新