天天看點

vector 二維數組_onehot 編碼——字元與二維數組的轉換

之前寫過一篇one-hot編碼,其中代碼表示部分為字元與一維數組之間的轉換。最近由tensorflow1切換到了tensorflow2,重寫了一遍驗證碼訓練,于是有了這次的字元與二維數組的轉換。

一、字元串轉換為二維數組

  1. 包含字元數MAX_CAPTCHA不變仍為4,同樣字元取值範圍CHAR_SET仍為1234567890十個數字。
  2. 使用numpy.zeros給定初始形狀,會得到一個完全由0填充的二維數組
vector 二維數組_onehot 編碼——字元與二維數組的轉換
  1. 接下來與之前的一樣,使用enumerate周遊資料
  2. 擷取字元串的字元在取值範圍中的索引
  3. 生成數組

二、二維數組轉化為字元串

  1. 包含字元數MAX_CAPTCHA不變仍為4,同樣字元取值範圍CHAR_SET仍為1234567890十個數字。
  2. 首先設定一個初始值空字元串
  3. 使用enumerate周遊二維數組
  4. 由于one-hot編碼隻有1位有效其餘為0,使用np.argmax查找其中的最大值,設定為索引
  5. 通過在取值範圍中的索引擷取字元,并與初始值連接配接

三、完整編碼

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)
           

運作結果:

vector 二維數組_onehot 編碼——字元與二維數組的轉換