专栏首页贾志刚-OpenCV学堂详解深度学习中的独热编码

详解深度学习中的独热编码

很多人开始接触深度学习,数据处理遇到第一个专业英文术语就是one-hot encode(独热编码),很多初学者就会迷茫,这个东西是什么意思,其实说的直白点所谓的独热编码最重要的就是把一组字符串或者数字转为一组向量而且这组向量中只能有一个向量值是1。可见独热编码还是很形象的说1这个单独大热门,做个形象的比喻,2018足球世界杯的冠军只能有一个,如果对32支球队做个独热编码则会得到32个向量,其中只能有一支球队对应的向量是1,表示这届的冠军就是它啦,其它都只能是零,得回家。对以往各届参赛球队做独热编码就可以得到每届结果,然后根据以往各支球队综合表现生成一系列的向量,就可以训练生成模型,根据本届各队综合表现参数,就可以预测本届冠军啦,这里独热编码生成的向量可以作为标签,这个也是独热编码最常用的方式与场景。在tensorflow的官方mnist数据集例子中也是采用独热编码来做标签数据,训练实现手写数字识别的。说了这么多独热编码的解释与概念,下面就来看看独热编码详细解释,只需四步,保证你理解独热编码,而且会做啦。

独热编码的定义

根据同一类别的数据生成一组二值向量, 类别数据中期待的对应二值向量为1,其余为零。

举例说明

假设我们要预测鸢尾花种类,已知有三种分别为山鸢尾、变色鸢尾、维吉尼亚鸢尾。根据给定的一组鸢尾花的数据,我们可以预测其种类是哪一种,对训练数据编码:

山鸢尾

变色鸢尾

维吉尼亚鸢尾

1

0

0

最终向量为1 0 0 表示种类是山鸢尾

山鸢尾

变色鸢尾

维吉尼亚鸢尾

0

1

0

最终向量为0 1 0 表示种类是变色鸢尾

山鸢尾

变色鸢尾

维吉尼亚鸢尾

0

0

1

最终向量为0 0 1 表示种类是维吉尼亚鸢尾

为什么要使用独热编码,原因如下

独热编码可以很好的表示分类数据的,而许多机器学习与深度学习的任务就是实现各种回归模型分类任务,而且独热编码非常容易实现,无需复杂计算,只有整数0、1的二进制表达容易被技术与工程人员理解与接受。

独热编码的代码演示

  • 手动版
from numpy import argmax
# define input string
data = 'hello world'
print(data)
# define universe of possible input values
alphabet = 'abcdefghijklmnopqrstuvwxyz '
# define a mapping of chars to integers
char_to_int = dict((c, i) for i, c in enumerate(alphabet))
int_to_char = dict((i, c) for i, c in enumerate(alphabet))
# integer encode input data
integer_encoded = [char_to_int[char] for char in data]
print(integer_encoded)
# one hot encode
onehot_encoded = list()
for value in integer_encoded:
    letter = [0 for _ in range(len(alphabet))]
    letter[value] = 1
    onehot_encoded.append(letter)
print(onehot_encoded)
# invert encoding
inverted = int_to_char[argmax(onehot_encoded[0])]
print(inverted)
  • keras版本
from numpy import array
from numpy import argmax
from keras.utils import to_categorical
# define example
data = [1, 3, 2, 0, 3, 2, 2, 1, 0, 1]
data = array(data)
print(data)
# one hot encode
encoded = to_categorical(data)
print(encoded)
# invert encoding
inverted = argmax(encoded[0])
print(inverted)

参考引用

https://machinelearningmastery.com/how-to-one-hot-encode-sequence-data-in-python/

本文分享自微信公众号 - OpenCV学堂(CVSCHOOL)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 编译OpenCV3.3源码生成Android SDK

    编译OpenCV3.3源码生成Android SDK 最近因为工作需要,需要在Android平台上编译OpenCV与其扩展模块生成Android SDK,之前因...

    OpenCV学堂
  • 性能达到SOTA的CSP对象检测网络

    早期传统的对象检测方法都是基于滑动窗口的特征分类,自从深度学习来了之后就产生很多基于深度神经网络效果特别好的对象检测网络模型,比如SSD、YOLO、Faster...

    OpenCV学堂
  • 图像处理开发者必读

    小编作为一个图像与计算机视觉的开发者,总结了一下作为图像处理开发工程师应该知道或者掌握的图像处理知识点。跟大家分享一下,以备大家学习方便。 图像像素操作 -...

    OpenCV学堂
  • 封装数组之动态数组实现

    前言:在此之前,我们封装的数组属于静态数组,也即数组空间固定长度,对于固定长度的数组当元素超过容量时会报数组空间不足。为了能更好的使用数组,我们来实现一个可以自...

    wfaceboss
  • HDUOJ---1195Open the Lock

    Open the Lock Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/3276...

    Gxjun
  • 深度解析ug1292(10)

    使用report_failpast之前,要先确保Design Utilities已经安装。安装方法是点击Tools->Xilinx Tcl Store,如下图所...

    Lauren的FPGA
  • 基于gensim的Doc2Vec简析,以及用python 实现简要代码

    Doc2Vec 原理: Doc2Vec 或者叫做 paragraph2vec, sentence embeddings,是一种非监督式算法,可以获得sent...

    学到老
  • Python3 爬虫实战 — 模拟登陆12306【点触验证码对抗】

    关于打码平台:在线打码平台全部都是人工在线识别,准确率非常高,原理就是先将验证码图片提交给平台,平台会返回识别结果在图片中的坐标位置,然后我们再解析坐标模拟点击...

    TRHX
  • 码农与程序员,就好比哈士奇与狼

    转自~野狗 狼是自然界中真正的掠食者,而哈士奇不过是人类的玩物。两者长得确实很像,就如同IT界的Programmer和Coder。如果用狼和哈士奇来隐喻这两种职...

    昱良
  • 黑客 | 白帽子

    五年了,所有故事的背后,有着一群最可爱的人。「黑客」是大众给他们贴的标签,「白帽子」是他们真正的名字。他们到底是怎样的一群人?

    HACK学习

扫码关注云+社区

领取腾讯云代金券