AI测试 TensorFlow 学习记录 (四:文本与向量之间的转换)

膨化先生 · May 18, 2019 · 1675 hits

一、one-hot编码

One-Hot编码,又称为一位有效编码,主要是采用位状态寄存器来对个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。
以郑板桥的《咏雪》举例,前两句诗共14个字,去掉重复有11个字以及2个标点组成,所以初始化用13个0表示:0 0 0 0 0 0 0 0 0 0 0 0 0

文字+标点 one-hot编码
1 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1

可以看到,所有片字都为:0 1 0 0 0 0 0 0 0 0 0 0 0,而且与其他汉字标点没什么关系,为相互独立的。

二、代码表示

one-hot编码表示共4个字符

import numpy as np
MAX_CAPTCHA = 4 # 最长4字符
CHAR_SET = '1234567890' # 验证码包括字符
CHAR_SET_LEN = len(CHAR_SET) # 包含字符数


def name2vec(name):
"""
文本换变成向量
:param name: 待输入的文本
:return: vector 文本对应的向量形式
"""

char_to_int = dict((c, i) for i, c in enumerate(CHAR_SET))

vector = np.zeros(MAX_CAPTCHA * CHAR_SET_LEN) # 生成一个一维向量
for index, item in enumerate(name):
idx = index * CHAR_SET_LEN + char_to_int[item]
vector[idx] = 1
return vector
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
No Reply at the moment.
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up