有時候需要label,比如強化學習的離散動作空間,輸出動作索引;有時候需要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.]])
numpy可以通過 np.argmax(onehot, 1)
實現,pytorch 可以通過 torch.topk(one_hot, 1)[1].squeeze(1)
實現:
>>> 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])
If you will Python Code is aut
Iterators and generators Iter