中文字体识别——隶属和行楷

news/2024/11/20 17:34:50/

导入所需要的包

(略)

解压加载进来的数据集

!unzip -qo data/data115112/ChineseStyle.zip -d data
label = paddle.to_tensor([1,0], dtype='int64')
one_hot_label =paddle.nn.functional.one_hot(label,num_classes=2)
print(one_hot_label )

 制作数据集

#定义ChineseStyleDataset数据集类
class ChineseStyleDataset(Dataset):#构造数据集和标签集def __init__(self,transforms=None,train="train"):super().__init__()self.transforms=transformsself.datas=list()  #创建data列表成员,存放图像数据self.labels=list()  #创建labels列表成员,存放标签数据#self.temps=list()font_style=[("lishu",0),("xingkai",1)]#遍历train文件夹下的xingkai图片for font_tuple in font_style:font_name=font_tuple[0]font_val=font_tuple[1]font_path="data/ChineseStyle/{}/{}".format(train,font_name)for filename in os.listdir(font_path):if ".ipynb_checkpoints" in filename:  #图片文件内会自动包含.ipynb_checkpoints文件,需要排除掉continueimg_path=os.path.join(font_path,filename)#读入图片photo=Image.open(img_path)im=np.array(photo).astype("float32")if im is not None:   #防止读到空图片,遇到非空图片才加入数据列表self.datas.append(im)#self.temps.append([img_path,font_val])self.labels.append(np.array(font_val,dtype="int64"))#print(self.temps)def __getitem__(self,index):data=self.datas[index]if self.transforms is not None:data=self.transforms(data)label=self.labels[index]return data,labeldef __len__(self):return len(self.labels) #预处理方案组合
transforms=T.Compose([T.Resize([227,227]),T.Normalize(mean=[0,0,0], std=[255,255,255], data_format='HWC'),T.ToTensor()])#创建数据集实例
#训练数据集
train_dataset=ChineseStyleDataset(transforms=transforms)
#测试数据集
test_dataset=ChineseStyleDataset(transforms=transforms,train="test")

 数据生成器

train_dataloader=DataLoader(dataset=train_dataset,shuffle=True,batch_size=200)
test_dataloader=DataLoader(dataset=test_dataset,shuffle=True)
# np.set_printoptions(threshold=np.inf)
# for id,data in enumerate(train_dataloader):
#     print(np.array(data[0][0]))
#     plt.imshow(np.array(data[0][0]))
#     break

 构建AlexNet网络

class AlexNet(paddle.nn.Layer):def __init__(self):super().__init__()self.conv_pool1=paddle.nn.Sequential(paddle.nn.Conv2D(in_channels=3,out_channels=96,kernel_size=[11,11],stride=4,padding="valid"),paddle.nn.ReLU(),paddle.nn.MaxPool2D(kernel_size=[3,3],stride=2))self.conv_pool2=paddle.nn.Sequential(paddle.nn.Conv2D(in_channels=96,out_channels=256,kernel_size=[5,5],stride=1,padding="same"),paddle.nn.ReLU(),paddle.nn.MaxPool2D(kernel_size=[3,3],stride=2))self.conv_pool3=paddle.nn.Sequential(paddle.nn.Conv2D(in_channels=256,out_channels=384,kernel_size=[3,3],stride=1,padding="SAME"),paddle.nn.ReLU())self.conv_pool4=paddle.nn.Sequential(paddle.nn.Conv2D(in_channels=384,out_channels=384,kernel_size=[3,3],stride=1,padding="SAME"),paddle.nn.ReLU())self.conv_pool5=paddle.nn.Sequential(paddle.nn.Conv2D(in_channels=384,out_channels=256,kernel_size=[3,3],stride=1,padding="SAME"),paddle.nn.ReLU(),paddle.nn.MaxPool2D(kernel_size=[3,3],stride=2))self.full_con=paddle.nn.Sequential(paddle.nn.Linear(in_features=256*6*6,out_features=4096),paddle.nn.ReLU(),paddle.nn.Dropout(0.5),paddle.nn.Linear(in_features=4096,out_features=4096),paddle.nn.ReLU(),paddle.nn.Dropout(0.5),paddle.nn.Linear(in_features=4096,out_features=2)#,#paddle.nn.Softmax())self.flatten=paddle.nn.Flatten()self.act=paddle.nn.Sigmoid()def forward(self,x):x=self.conv_pool1(x)x=self.conv_pool2(x)x=self.conv_pool3(x)x=self.conv_pool4(x)x=self.conv_pool5(x)x=self.flatten(x)x=self.full_con(x)x=self.act(x)return x
#实例化网络模型
alexNet=AlexNet()
paddle.summary(alexNet,(1,3,227,227))

运行结果:

 网络配置、训练、保存

#把模型实例封装高层API的Model对象
model=paddle.Model(alexNet)
#网络配置
model.prepare(optimizer=paddle.optimizer.Adam(parameters=model.parameters(),learning_rate=0.001),loss=paddle.nn.CrossEntropyLoss(),metrics=paddle.metric.Accuracy())
vsDL=paddle.callbacks.VisualDL("log_dir")
model.fit(train_data=train_dataloader,epochs=10,verbose=1,callbacks=vsDL)
model.evaluate(eval_data=test_dataloader,verbose=1)
model.save("mymodel/AlexNet")

运行结果: 

im=np.array(Image.open("data/ChineseStyle/train/xingkai/xingkai_1001.jpg")).astype("float32")
#im=paddle.to_tensor(im)
im=im.reshape([1,3,256,256])
alexNet=AlexNet()
model=paddle.Model(alexNet)
model.load("mymodel/AlexNet")
result=model.predict_batch(im)
print(result)

 运行结果:

 结果可视化


http://www.ppmy.cn/news/491228.html

相关文章

html5加css3知识笔记

1、基本格式 <html>//标签<head>//头<titile>网页设计与制作</titile>//网页标题</head><body>//身体内容体</body> </html>上&#xff1a;内部 下&#xff1a;内联 控制字体大小: 最大&#xff1a;<h1>内容</h1&g…

html中支持的常用中文字体

宋体 SimSun黑体SimHei微软雅黑Microsoft YaHei微软正黑体Microsoft JhengHei新宋体NSimSun新细明体PMingLiU细明体MingLiU标楷体DFKai-SB仿宋FangSong楷体KaiTi仿宋_GB2312FangSong_GB2312楷体_GB2312KaiTi_GB2312 宋体&#xff1a;SimSuncss中中文字体&#xff08;font-famil…

卷积神经网络案例:中文字体识别——隶书和行楷

一、AlexNet网络结构 1.1 AlexNet介绍&#xff1a; ImageNet竞赛冠军获得者Hinton和他的学生Krizhevsky Alex于2012年设计。 ImageNet竞赛中第一个使用卷积神经网络的参赛者。 1.2 AlexNet网络结构&#xff1a;8层 卷积层 池化层 卷积层 池化层 卷积层 卷积层 卷积层 池化层 输…

六、AlexNet实现中文字体识别——隶书和行楷

文章目录 前文中文字体识别——隶书和行楷数据生成器图像显示AlexNet模型构建AlexNet模型编译与拟合注意&#xff1a; GitHub下载地址&#xff1a; 前文 一、Windows系统下安装Tensorflow2.x&#xff08;2.6&#xff09;二、深度学习-读取数据三、Tensorflow图像处理预算四、线…

行楷基础-一篇文章带你练出完美行楷

按照类别及练习顺序排序&#xff0c;一篇文章带你进入硬笔行楷的世界&#xff0c;传统文化yyds 点 右点 左点 仰点 长点 上下点 相向点 相背点 两点水 横三点 三点水 聚四点 横 长横 短横 竖 悬针竖 垂露竖 短竖 撇 短撇 直撇 竖撇 横撇 捺 平捺 斜捺 折 横折 竖折 撇折 撇折点…

自由手写体字帖pdf_行楷钢笔字帖下载-行楷字帖电子版pdf版 - 极光下载站

行楷字帖pdf电子版中包含了最基础的3500个常用字,不管是学生时代还是工作以后,写字永远都是少不了的,正所谓字如其人,把字写好会让别人对你有一个更好的印象,小编在这里提供的字帖模板就可以帮助大家进行临摹,通过不断练习找到写字技巧。 行楷钢笔字帖说明: 本字帖可采用…

css3字体的使用

font-family语法格式 在CSS中&#xff0c;通过 font-family属性来指定文本所使用的字体系列。语法格式为&#xff1a; font-family: [<family-name> | <generic-family>] 字体系列 其中&#xff0c;family-name为字体系列的名称&#xff1b;generic-family为通用…

html5华文行楷字体代码,html5 支持的字体样式

宋体SimSun 黑体SimHei 微软雅黑Microsoft YaHei 微软正黑体Microsoft JhengHei 新宋体NSimSun 新细明体PMingLiU 细明体MingLiU 标楷体DFKai-SB 仿宋FangSong 楷体KaiTi 仿宋_GB2312FangSong_GB2312 楷体_GB2312KaiTi_GB2312 宋体&#xff1a;SimSuncss中中文字体(font-family…