19,468
社区成员
发帖
与我相关
我的任务
分享
import os
import struct
import numpy as np
import cv2
def load_mnist(path, kind='train'):
"""Load MNIST data from `path`"""
labels_path = os.path.join(path,
'%s-labels.idx1-ubyte'
% kind)
images_path = os.path.join(path,
'%s-images.idx3-ubyte'
% kind)
with open(labels_path, 'rb') as lbpath:
magic, n = struct.unpack('>II',
lbpath.read(8))
labels = np.fromfile(lbpath,
dtype=np.uint8)
with open(images_path, 'rb') as imgpath:
magic, num, rows, cols = struct.unpack('>IIII',
imgpath.read(16))
images = np.fromfile(imgpath,
dtype=np.uint8).reshape(len(labels), 784)
return images, labels
image, labels = load_mnist(r'C:\Users\Desktop\Python\Image_processing\data_number','train')
charNum = 10
'''将数据集的n维label 格式更新为 n X 10 '''
trainingLabel = []
for i in range(len(labels)):
labelArraytoAppend = []
for j in range(charNum):
if labels[i] == j:
labelArraytoAppend.append(1)
else:
labelArraytoAppend.append(0)
trainingLabel.append(labelArraytoAppend)
'''训练多层神经网络 MLP'''
ann = cv2.ml.ANN_MLP_create()
ann.setActivationFunction(cv2.ml.ANN_MLP_SIGMOID_SYM)
ann.setTrainMethod(cv2.ml.ANN_MLP_BACKPROP)
ann.setBackpropMomentumScale(0.1)
ann.setBackpropWeightScale(0.001)
ann.setTermCriteria((cv2.TERM_CRITERIA_COUNT | cv2.TERM_CRITERIA_EPS, 500, 0.05))
ann.setLayerSizes(np.array([np.array(image).shape[1], 128, charNum], dtype=np.uint16))
ann.train(np.array(image, dtype=np.float32), cv2.ml.ROW_SAMPLE, np.array(trainingLabel, dtype=np.float32))
ann.save(r'C:\Users\bj0lt5\Desktop\Python\Image_processing\data_number\characterRecognize.xml')
'''测试神经网络'''
testImage, testLabels = load_mnist(r'C:\Users\Desktop\Python\Image_processing\data_number', 't10k')
#result = np.zeros((testLabels.shape[0], charNum), dtype=np.float32)
retval, result = ann.predict(np.array(image, dtype=np.float32))
print(result[:2])