一、独热码简介
独热码,即 one-hot code, 直观来说就是有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制。例如[0,1,0,0]就是一个只有当索引值为1时有效的独热码。
二、独热码在深度学习中的作用
在深度学习中,标签值往往是一个具体的数,但是神经网络的输出层的神经元个数一般是多个,且每个神经元都有一个输出值,为了能根据神经网络的输出预测值和数据的真实标签求出误差值,我们就需要将为具体数值的标签转换为独热码形式,例如将标签值y=3,转换为一个5分类的独热码y_trans=[0,0,0,1,0],假如此刻神经网络的输出为y_pred=[0.1,0.2,0.1,0.5,0.1],我们可以得出均方误差值E=(∑(y_pred[i]-y_trans[i])^2)/5。
三、不调用库函数,用Python原生代码来实现独热码
设列表list1=[[2],[1],[3]],要将其转换为分类数为class_num的独热码形式,代码以6分类为例。
list1=[[2],[1],[3]]
#将[[2],[1],[3]] 转为独热码格式 [[0,0,1...],[0,1,0...],[0,0,0,1...]]
def one_hot(list,class_num):
result=[]
for i in range(len(list)):
list2=[]
for j in range(class_num):
if j!=list[i][0]:
list2.append(0)
else :
list2.append(1)
result.append(list2)
return result
my_list=one_hot(list1,6)
print("原始列表:",list1)
print("独热码形式的列表:",my_list)
运行结果为:
原始列表: [[2], [1], [3]]
独热码形式的列表: [[0, 0, 1, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0]]