数据加载及预处理
1、文本数据预处理
1.1、标签数据处理
可以将赛题抽象为一个定长字符识别问题,在赛题数据集中大部分图像中字符个数为2-4个,最多的字符个数为6个
大多数的数字序列都是2或3的序列,只有一个来自训练集的例子在序列中有6个数字。该网络的设计目标是识别最多5位数字。网络输出6个值,前5个对应序列中的每个数字(输出10表示为空数字),最后一个值是序列中除去填充值有多少个位数。
加载训练数据标签
import glob
metadata = json.load(open('./train.json'))
metadata = [metadata[x] for x in metadata]
print(len(metadata))
查看第一张图片的标签
metadata[0]
查看图片中>=5个数字的数据
for j, i in enumerate(range(30000)):
t = len(metadata[i]["label"])
if t >= 5:
print(j, t)
for i in range(10): # 训练数据集3000张照片
t = metadata[i]["label"]
temp_label = [int(x) for x in t]
print(temp_label)
print(len(temp_label))
字符定长处理
final_labels = []
for i in range(30000): # 训练数据集3000张照片
t = metadata[i]["label"]
temp_label = [int(x) for x in t]
dt = len(temp_label) - 5 #维度信息(有多少个数字)
if dt < 0:
for ii in range(abs(dt)):
temp_label.append(11)
if dt > 0:
del temp_label[-1] #删掉多于5的数字
tt = len(t) if len(t)<6 else 5 #标签数字个数控制在6个(0-5)
temp_label.append(tt)
final_labels.append(temp_label)
final_labels
import numpy as np
#将标签数据转换为numpy数组
y = np.array(final_labels)
y[y==10] = 0
y[y==11] = 10
y.shape
查看前30个数据
y[:30]
1.2、图片数据处理
下次写