Arabic Handwritten Characters Dataset

Dataset available at https://www.kaggle.com/datasets/mloey1/ahcd1

In[]:=
NotebookDirectory[]​​SetDirectory[NotebookDirectory[]]
Out[]=
/home/mk/Desktop/Arabic-Handwritten-Characters-Dataset/
Out[]=
/home/mk/Desktop/Arabic-Handwritten-Characters-Dataset
In[]:=
rawTrainLabels = Import["csvTrainLabel 13440x1.csv"];​​rawTestLabels = Import["csvTestLabel 3360x1.csv"];​​rawTrainImages = Import["csvTrainImages 13440x1024.csv"];​​rawTestImages = Import["csvTestImages 3360x1024.csv"];
In[]:=
toImage[vec_]:= Image[Transpose@ArrayReshape[vec, {Sqrt[Length@vec],Sqrt[Length@vec]}]]
In[]:=
trainImages = Map[toImage,rawTrainImages];​​testImages = Map[toImage,rawTestImages];​​trainLabels = Flatten@rawTrainLabels;​​testLabels = Flatten@rawTestLabels;
In[]:=
RandomSample[trainImages,70]
Out[]=

,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,

In[]:=
myLeNet = NetInitialize@NetChain[​​{​​ConvolutionLayer[20,5],Ramp,PoolingLayer[2,2],​​ConvolutionLayer[50,5],Ramp,PoolingLayer[2,2],​​FlattenLayer[],​​LinearLayer[500],Ramp,LinearLayer[28],SoftmaxLayer[]​​},​​"Input"-> NetEncoder[{"Image",{32,32},ColorSpace->"Grayscale"}],​​"Output"-> NetDecoder[{"Class",Alphabet["Arabic"] }]​​]
Out[]=
NetChain
Inputport:
image
Outputport:
class

In[]:=
trainedNet = NetTrain[myLeNet,trainImages->trainLabels,​​MaxTrainingRounds10,​​BatchSize64]
Out[]=
NetChain
Inputport:
image
Outputport:
class

In[]:=
trainedNet
,
,
,
,
,
,
,
,
,

Out[]=
ت,ح,د,ج,و,ت,ض,خ,ر,ق
In[]:=
NetMeasurements[trainedNet,testImages->testLabels,"ConfusionMatrixPlot"]
Out[]=
actual class
​
predicted class
In[]:=
NetMeasurements[trainedNet,testImages->testLabels,"Accuracy"]
Out[]=
0.742262