OnehotCode
One-hot Code for deep learnning 用于深度学习的独热码编码与解码
Install / Use
/learn @asyncins/OnehotCodeREADME
OnehotCode
One-hot Code for deep learnning 用于深度学习的独热码编码与解码
独热码在英文文献中称做 one-hot code, 直观来说就是有多少个状态就有多少比特,而且只有一个比特为 1,其他全为 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.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 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. 0. 0. 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. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 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. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 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. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 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. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0.]
其实就是将给定的字符串进行数字特征化,以便计算机进行处理,这里使用 Numpy 库将其转换为张量。使用 OnehotCode 前,需安装 Numpy 库,即:
pip install numpy
独热码的使用
这是集编码和解码于一体的独热码,编码方法为 one_hot_encode(),解码方法为 one_hot_decode()。
编码方法将会返回一个元组,元组元素分别是字符位置信息和对应的张量。例如将 0A2Jsa 进行编码:
code = '0A2Jsa'
vec, orders = one_hot_encode(code)
vec 就是对应的张量,orders 则是字符位置信息。
解码时只需要将 order 传入解码方法即可:
res = one_hot_decode(orders)
res 就是编码前的 code,即 0A2Jsa
为什么要用这个独热码
其他搬砖的朋友可能会问:好像 tensorflow 和 keras 都有独热码,你为什么要自己写一个?
我心里是这么想的,回答:
其实处于两个点考虑,第一是我喜欢造轮子,这样才能知道它到底是怎么回事,所以我写了这个 OnehotCode;
第二是我并不知道 tensorflow 和 keras 等框架的独热码是怎么写的,但我在做深度学习项目(卷积网络识别验证码)时,我需要一套独热码编码解码方法,所以我写了这个 OnehotCode
如何根据需求改动?
这里需要改动的只有两个地方:
第一,就是验证码组成字符。ohc.py 代码中设定的验证码组成为 0~9a~zA~Z,并没有中文或者其他文字。对应的代码如下:
# 数字与大/小写字母混合
NUMBER = [str(_) for _ in range(0, 10)] # 0~9
LETTER = [chr(_) for _ in range(97, 123)] # a~z
UPPER = [chr(_) for _ in range(65, 90)] # A~Z
CHARACTER = {v: k for k, v in enumerate(NUMBER + LETTER + UPPER)} # dict
如果需要改动这部分,就在 for 循环的 enumerate() 方法中新增一组元素或者删掉一组元素即可。
第二,就是验证码的字符数量,即 CAPTCHA_NUMBER = 6 ,目前设定的是 6。这个值与你的项目有关,请根据自己的项目进行调整。
Related Skills
node-connect
346.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
107.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
346.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
346.4kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
