vector 二维数组_onehot 编码——字符与二维数组的转换

之前写过一篇one-hot编码,其中代码表示部分为字符与一维数组之间的转换。最近由tensorflow1切换到了tensorflow2,重写了一遍验证码训练,于是有了这次的字符与二维数组的转换。

一、字符串转换为二维数组

  1. 包含字符数MAX_CAPTCHA不变仍为4,同样字符取值范围CHAR_SET仍为1234567890十个数字。

  2. 使用numpy.zeros给定初始形状,会得到一个完全由0填充的二维数组

    np.zeros([MAX_CAPTCHA, len(CHAR_SET)])

56ff2ea3a78aaa7182262fed9671ffea.png

  1. 接下来与之前的一样,使用enumerate遍历数据

    for index, item in enumerate(name)
  2. 获取字符串的字符在取值范围中的索引

    idx = string_range.index(c)
  3. 生成数组

    vector[i][idx] = 1

二、二维数组转化为字符串

  1. 包含字符数MAX_CAPTCHA不变仍为4,同样字符取值范围CHAR_SET仍为1234567890十个数字。

  2. 首先设定一个初始值空字符串

    text = ''
  3. 使用enumerate遍历二维数组

    for index, item in enumerate(vector)
  4. 由于one-hot编码只有1位有效其余为0,使用np.argmax查找其中的最大值,设置为索引

    idx = np.argmax(item)
  5. 通过在取值范围中的索引获取字符,并与初始值连接

    text = text + string_range[idx]

三、完整编码

import numpy as np
MAX_CAPTCHA = 4 # 最长4字符
CHAR_SET = '1234567890' # 验证码包括字符

def name2vec(picture_title):
vector = np.zeros([MAX_CAPTCHA, len(CHAR_SET)])
for index, item in enumerate(picture_title):
idx = CHAR_SET.index(item)
vector[index][idx] = 1
return vector

def vec2name(vector):
text = ''
for index, item in enumerate(vector):
idx1 = np.argmax(item)
text = text + CHAR_SET[idx1]
return text

if __name__ == '__main__':
vec = name2vec("1234")
print(vec)
name = vec2name(vec)
print(name)

运行结果:

57190e0a0273fb8d1bcf58881f852331.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值