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

膨化先生 · 2019年05月18日 · 1043 次阅读

一、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
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暫無回覆。
需要 登录 後方可回應,如果你還沒有帳號按這裡 注册