One-hot Encoder for Classification

    One-hot码指一定码长的二值码中,只有一位为1,其他全为0,比如00010000。这样,1所在的位数就可以作为有效的信息。One-hot码起源于数电中的状态机(State Machine),尤其是环形计数器,通过将信号1一直往下一位传递,表示不同的状态。与之相对的还有One-cold,只有一位为0,其他全为1。

    在利用卷积神经网络进行图像分类时,由于图像的类别,亦即标签,往往用的是string这种数据类型,不便于比对和作为特征。所以我们要对这些标签进行编码,表示成一个向量,这个向量要便于分类。而One-hot码就是其中一种简单有效的编码方式。下面给出一份代码实例:

def one_hot(label):
    """
    # 对标签label进行one-hot编码
    :param label: 数据类型为list,元素为string
    :return: onehot_label: 数据类型为list,元素为一维向量
    """
    onehot_label = []
    class_len = len(label)  #分类类别

    for i, c in enumerate(label):
        vet = np.zeros(class_len)
        vet[i] = 1
        onehot_label.append(vet)

    return onehot_label

label_ex = ['dog', 'cat', 'ox', 'fox', 'monkey', 'pig', 'elephant', 'sheep', 'lion', 'tiger']
label_de = one_hot(label_ex)
for c in label_de:
    print(c)
    而最后输出的结果为:
[ 1.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
[ 0.  1.  0.  0.  0.  0.  0.  0.  0.  0.]
[ 0.  0.  1.  0.  0.  0.  0.  0.  0.  0.]
[ 0.  0.  0.  1.  0.  0.  0.  0.  0.  0.]
[ 0.  0.  0.  0.  1.  0.  0.  0.  0.  0.]
[ 0.  0.  0.  0.  0.  1.  0.  0.  0.  0.]
[ 0.  0.  0.  0.  0.  0.  1.  0.  0.  0.]
[ 0.  0.  0.  0.  0.  0.  0.  1.  0.  0.]
[ 0.  0.  0.  0.  0.  0.  0.  0.  1.  0.]
[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  1.]
    现在,我们通过卷积神经网络获得了一个样本的输出特征,又该如何确定它属于哪一类呢?我们可以通过确定输出特征向量的最大值所在位置,来确定相应的one-hot标签,实现分类。

    


    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值