手写数字识别(python实现)

张开发
2026/4/8 8:06:56 15 分钟阅读

分享文章

手写数字识别(python实现)
手写数字识别这里一共三个文件see_data.py用来查看数据myModel.py自己建立的模型Train_model_net.py训练模型这个是我们的全部文件上面的四个是我们的手写数字数据集自己从其他地方随便就能下载比如阿里云训练集有60000个数字测试集有10000个数字还有训练集和测试集的标签文件。这个是see_data.py用来查看数据和对数据进行处理。importwarningsfrommatplotlibimportMatplotlibDeprecationWarning warnings.filterwarnings(ignore,categoryMatplotlibDeprecationWarning)importnumpyasnpimportstructfromtensorflow.keras.utilsimportto_categoricaldefload_mnist_images(filename):withopen(filename,rb)asf:magic,num,rows,colsstruct.unpack(IIII,f.read(16))imagesnp.fromfile(f,dtypenp.uint8).reshape(num,rows,cols)returnimagesdefload_mnist_labels(filename):withopen(filename,rb)asf:magic,numstruct.unpack(II,f.read(8))labelsnp.fromfile(f,dtypenp.uint8)returnlabels# 加载训练图像train_imagesload_mnist_images(train-images-idx3-ubyte/train-images.idx3-ubyte)# 加载训练标签train_labelsload_mnist_labels(train-labels-idx1-ubyte/train-labels.idx1-ubyte)train_labels_npnp.array(train_labels)train_one_hot_labelsto_categorical(train_labels_np,num_classes10)# print(train_one_hot_labels[:10])# 加载测试图像test_imagesload_mnist_images(t10k-images-idx3-ubyte/t10k-images.idx3-ubyte)# 加载测试标签test_labelsload_mnist_labels(t10k-labels-idx1-ubyte/t10k-labels.idx1-ubyte)test_labels_npnp.array(test_labels)test_one_hot_labelsto_categorical(test_labels_np,num_classes10)# print(---------------)# print(test_one_hot_labels[:10])# # 打印一些信息# print(Number of images:, len(train_images))# print(Shape of each image:, train_images[0].shape)# # 打印一些信息# print(Number of labels:, len(train_labels))# print(First 10 labels:, train_labels[:10])# # 可以进一步处理标签例如统计每个类别的数量# label_counts np.bincount(train_labels)# print(Label counts:, label_counts)## # 显示第一个图像可选# import matplotlib.pyplot as plt# plt.imshow(train_images[0], cmapgray)# plt.show()这个是myModel.py是我们的模型。fromtensorflow.kerasimportlayers,modelsclassMyModel:def__init__(self):self.modelmodels.Sequential()self.model.add(layers.Dense(128,activationrelu,input_shape(784,)))self.model.add(layers.Dropout(0.2))self.model.add(layers.Dense(64,activationrelu))self.model.add(layers.Dropout(0.2))self.model.add(layers.Dense(10,activationsoftmax))deftrain(self,x_train,y_train,epochs10,batch_size32):self.model.compile(optimizeradam,losscategorical_crossentropy,metrics[accuracy])self.model.fit(x_train,y_train,epochsepochs,batch_sizebatch_size)defevaluate(self,test_images,test_labels):returnself.model.evaluate(test_images,test_labels)这是Train_model_net.py用来训练模型。fromnumber_identify.see_dataimporttrain_images,train_labels,test_images,test_labelsimporttensorflowastfimportnumpyasnpimporttimefromnumber_identify.myModelimportMyModeldefreshape_images(images):num_imagesimages.shape[0]returnnp.array([image.reshape(-1)forimageinimages])start_timetime.time()# 将图像数据进行归一化处理把像素值从0-255归一化到0-1范围有助于模型训练train_imagesreshape_images(train_images)test_imagesreshape_images(test_images)train_imagestrain_images/255.0test_imagestest_images/255.0train_labelstf.keras.utils.to_categorical(train_labels,num_classes10)test_labelstf.keras.utils.to_categorical(test_labels,num_classes10)# 假设x_train和y_train是已经准备好的训练数据my_modelMyModel()my_model.train(train_images,train_labels)# 在测试集上评估模型test_loss,test_accuracymy_model.evaluate(test_images,test_labels)print(f在测试集上的损失:{test_loss})print(f在测试集上的准确率:{test_accuracy})需要注意的是有时候我们这里会爆红但是可以运行这是因为我们下载的包的版本可能不同。

更多文章