郝晓芳 冯俊青
【摘 要】现如今构建人工智能或机器学习系统比以往任何时候都更加容易。普遍存在的尖端开源工具如 TensorFlow、Torch 和 Spark,再加上 AWS 的大规模计算力、Google Cloud 或其他供应商的云计算,可以让我们在短时间内使用笔记本电脑建立起最前沿的机器学习模型。人工智能的核心要素其实是数据,许多单位、企业、公司也都认识到数据民主化是加快人工智能发展的必要步骤。事实上,我们很难用一篇文章来说明哪些开放数据集是有用的,因为证明数据集的有效性是需要大量实践操作的。所以,教师在中小学书法教育评价中自建书法数据集,是一项必要且有意义的工作。
【关键词】中小学书法评价;机器学习;书法数据集
【中图分类号】G420 【文献标志码】B 【文章编号】1005-6009(2021)30-0010-04
【作者简介】1.郝晓芳,江苏省盐城市日月路小学(江苏盐城,224005)副校长,高级教师,盐城市小学语文学科带头人,江苏省小学语文优质课评比特等奖获得者;2.冯俊青,盐城工学院(江苏盐城,224005)讲师,江苏省“六大人才高峰”高层次人才培养对象。
一、常见的书法开放数据集
目前,在网络上可以找到很多公开的手写汉字数据集,其中用得最多的是中国科学院自动化研究所搜集整理的CASIA-HWDB数据集。该数据集可以免费使用,其包含 1020个人书写的脱机手写中文单字样本和手写文本,数据集是用Anoto笔在点阵纸上书写后扫描、分割得到的。手写单字样本分为三个数据库:HWDB1.0、HWDB1.1、HWDB1.2,手写文本也分为三个数据库:HWDB2.0、HWDB2.1、HWDB2.2。HWDB1.0、HWDB1.1、HWDB1.2总共有3895135个手写单字样本,分属7356类(7185 个汉字和 171个英文字母、数字、符号)。HWDB2.0、HWDB2.1、HWDB2.2总共有5091页图像,分割为52230个文本行和 1349414个文字。所有文字和文本样本均存为灰度图像(背景已去除),按书写人的序号分别存储。
这个数据集作为练习和训练手写文字识别深度学习系统是没有问题的,但是用于对中小学书法作品进行评价就不够了。数据集的建立最好以中小学生书法作品为采集对象。从2019年开始,在我校教师的共同努力下,共采集了2万多幅小学生硬笔书法作品,以此来建立专用数据集,期望在书法的深度学习评价领域取得进展。
二、原始图片采集
在课题研究期间,我校教师共采集了2万张真实的小学生硬笔书法作品彩色图片,共6个类别,分别为小学六个年级的硬笔书法作品,如图1、2、3所示。
三、自建专用數据集
一般自建数据集,首先要对搜集的图片进行预处理,包括旋转、裁剪、缩放、转为张量、正则化等。图片预处理之后再采用以下几种方法生成数据集:
1.留出法。
教师可直接将数据集D划分为两个互斥的集合:训练集S和测试集T。用S训练模型,用T来评估其测试误差。需要注意的是,划分时尽可能保持数据分布的一致性,保持样本类别比例相似。可采用分层采样的方式。
在使用留出法时,一般要采用若干次随机划分、重复进行实验评估,取平均值作为留出法的评估结果。通常情况下,我们将2/3~4/5的大于一半数量的样本划分出来用于训练。
使用sklearn.model_selection中的train_test_
split( )来分割我们的数据集,其具体参数如下:
x、y代表待划分数据集所有样本特征集合(自变量)和标签集合(因变量)。
test_size用来测试数据集所占的比例,有以下几种输入类型:
a.float型,0.0~1.0之间,此时传入的参数即作为测试集的比例;
b.int型,此时传入的参数的绝对值即作为测试集样本的数量;
c.None,需要另一个参数train_size有输入才生效,此时测试集取为train_size指定的比例或数量的补集;
d.缺省时为0.25,但要注意只有在train_size和test_size都不输入值时缺省值才会生效。
train_size:基本同test_size,但缺省值为None。一般操作时test_size和train_size输入一个即可。
random_state:int型,控制随机数种子,默认为None;随机数种子其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。
随机数的产生取决于种子,随机数和种子之间的关系遵从两个规则:种子不同,产生不同的随机数;种子相同,即使实例不同也会产生相同的随机数。
stratify:控制分类问题中的分层抽样,为了保持split前类的分布,默认为None,即不进行分层抽样,当传入为数组时,则依据该数组进行分层抽样(一般传入因变量所在列,即y)。
shuffle:bool型,用来控制是否在分割数据前打乱原数据集的顺序,默认为True。
返回值:依次返回训练集自变量、测试集自变量、训练集因变量、测试集因变量,因此使用该函数赋值须在等号右边采取x_train,x_test,y_train,y_test的形式。
如下是随机抽样时的sklearn实现:
from sklearn.model_selection import train_
test_split
x_train,x_test,y_train,y_test = train_test_
split(x,y,test_size=0.3)
如下是分层抽样时的sklearn实现:
from sklearn.model_selection import train_
test_split
x_train,x_test,y_train,y_test = train_test_
split(x,y,test_size=0.3,stratify=y)
隨机划分法还有以下几种函数可以实现:ShuffleSplit,GroupShuffleSplit,StratifiedShuffle-
Split
2.交叉验证法。
交叉验证法(cross validation)是先将数据集D划分为k个大小相似的互斥子集,即D=D1∪D2∪...∪DK,Di∩Dj=Φ(i≠j),每个子集Di都尽可能保持数据分布的一致性,即从D中通过分层采样得到。然后每次用k-1个子集的并集作为训练集,剩下的那一个子集作为验证集,从而可以进行k次训练与测试,最终返回的是这k个测试结果的均值。显然,交叉验证法的稳定性和保真性在很大程度上取决于k的取值,因此交叉验证法又称作“k折交叉验证”(k-fold cross validation),k最常见的取值为10,即“10折交叉验证”。这个方法充分利用了所取样本,但计算比较烦琐,需要训练k次,测试k次。
交叉验证法的一个特例:留一法(Leave-one-out,即LOO),留一法不受随机样本划分方式的影响,因为m个样本只有唯一的方式划分m个子集(每个子集包含一个样本),其优缺点如下:
优点:留一法使用的训练集与初始数据集相比只少了一个样本,这就使得在绝大多数情况下,留一法中被实际评估的模型与期望评估的用D训练出的模型很相似,因此,留一法的评估结果往往被认为比较准确。
缺点:当数据集比较大时,训练m个模型的计算成本是难以想象的。
我们使用sklearn.model_selection里的函数进行交叉验证。K折交叉验证:K_Fold,GroupKFold,Stratified-KFold;
留一法:LeaveOneGroupOut,LeavePGroups-
Out,LeaveOneOut,LeavePOut
3.自助法。
自助法则是使用有放回采样的方式进行数据采样的,即我们每次从数据集D中取一个样本作为训练集中的元素,然后把该样本放回,重复该行为m次,这样我们就可以得到大小为m的训练集,在这里面有的样本重复出现,有的样本则没有出现过,我们把那些没有出现过的样本作为测试集。通过估计m次采样后每个样本大约有0.368的概率不被采样,因此我们可以认为在D中约有36.8%的数据没有在训练集中出现过。
优点:这种方法对于那些数据集小、难以有效划分训练/测试集时很有用。
缺点:该方法改变了数据的初始分布,可能会导致引入估计偏差。
将创建的数据集拆分为训练数据集(1.5万张图片)和预测数据集(0.5万张图片)。其中1.5万张图片的训练数据集又被拆分为5个data_batch,1万张图片的预测数据集组成test_batch,如图4所示。
若数据量充足,通常采用留出法或者k折交叉验证法来进行训练/测试集的划分;对于数据集小且难以有效划分训练/测试集时使用自助法;对于数据集小且可有效划分时最好使用留一法来进行划分,因为这种方法最为准确。在机器学习中还存在着一种叫作时间序列的数据类型,这种数据的特点是高度的自相关性,前后相邻时段的数据关联程度非常高。因此,在对这种数据分割时,不可以像其他机器学习任务那样进行简单随机抽样的方式采样,对时间序列数据的采样不能破坏其时段的连续型,在sklearn.model_selection中我们使用TimeSeriesSplit( )来分割时序数据,其主要参数如下:
n_splits:int型,控制产生(训练集+验证集)的数量;
max_train_size:控制最大的时序数据长度。
【参考文献】
[1]陈康. 超限学习机拓展研究及其脑电分类应用[D].杭州:杭州电子科技大学,2019.
[2]黄海. 基于MDD融合数据集的GPP估算比较研究[D].北京:中国地质大学,2019.
[3]李佳根. 基于深度迁移学习的赖氨酸乙酰化位点预测问题的研究[D].长春:东北师范大学,2019.
[4]周张萍. 面向课堂教学的字幕生成关键技术研究[D].厦门:厦门大学,2019.
[5]邓利平. 基于数据集相似性的分类算法自动选择研究[D].深圳:深圳大学,2019.
[6]陈磊阳. 基于改进VGGNet的不透水面信息提取应用研究[D].开封:河南大学,2019.
[7]陈远鹏. 基于长时间可穿戴社交数据集的语音分割方法的研究[D].成都:电子科技大学,2019.