python?label與one-hot之間的互相轉(zhuǎn)換方式
label與one-hot之間的互相轉(zhuǎn)換
有時候需要label,比如強化學(xué)習(xí)的離散動作空間,輸出動作索引;有時候需要one-hot,比如訓(xùn)練數(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é)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python 異步協(xié)程函數(shù)原理及實例詳解
這篇文章主要介紹了Python 異步協(xié)程函數(shù)原理及實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-11-11
python pycharm最新版本激活碼(永久有效)附python安裝教程
PyCharm是一個多功能的集成開發(fā)環(huán)境,只需要在pycharm中創(chuàng)建python file就運行python,并且pycharm內(nèi)置完備的功能,這篇文章給大家介紹python pycharm激活碼最新版,需要的朋友跟隨小編一起看看吧2020-01-01
python實現(xiàn)上傳樣本到virustotal并查詢掃描信息的方法
這篇文章主要介紹了python實現(xiàn)上傳樣本到virustotal并查詢掃描信息的方法,是比較實用的技巧,需要的朋友可以參考下2014-10-10
如何利用pandas工具輸出每行的索引值、及其對應(yīng)的行數(shù)據(jù)
這篇文章主要介紹了如何利用pandas工具輸出每行的索引值、及其對應(yīng)的行數(shù)據(jù),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
Python中列表(List) 的三種遍歷(序號和值)方法小結(jié)
這篇文章主要介紹了Python中列表(List) 的三種遍歷(序號和值)方法小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05
通過?for?循環(huán)比較?Python?與?Ruby?的編程區(qū)別
這篇文章主要介紹了通過?for?循環(huán)比較?Python?與?Ruby?的編程區(qū)別,Ruby?與?Python?之間的差異在很大程度上可通過for循環(huán)看出本質(zhì),下文詳細介紹需要的小伙伴可以參考一下2022-05-05

