from keras.datasets import mnist
import numpy as np
from sklearn.preprocessing import OneHotEncoder
import cv2
from sklearn.metrics import accuracy_score
(X_train, y_train), (X_test, y_test) = mnist.load_data()
np.unique(y_train)
enc = OneHotEncoder(sparse=False, dtype=np.float32)
y_train_pre = enc.fit_transform(y_train.reshape(-1, 1))
y_test_pre = enc.fit_transform(y_test.reshape(-1, 1))
X_train_pre = X_train.astype(np.float32) / 255.0
X_train_pre = X_train_pre.reshape((X_train.shape[0], -1))
X_test_pre = X_test.astype(np.float32) / 255.0
X_test_pre = X_test_pre.reshape((X_test.shape[0], -1))
mlp = cv2.ml.ANN_MLP_create()
mlp.setLayerSizes(np.array([784, 512, 512, 10]))
mlp.setActivationFunction(cv2.ml.ANN_MLP_SIGMOID_SYM, 2.5, 1.0)
mlp.setTrainMethod(cv2.ml.ANN_MLP_BACKPROP)
mlp.setBackpropWeightScale(0.0001)
term_mode = cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS
term_max_iter = 10
term_eps = 0.01
mlp.setTermCriteria((term_mode, term_max_iter, term_eps))
mlp.train(X_train_pre, cv2.ml.ROW_SAMPLE, y_train_pre)
_, y_hat_train = mlp.predict(X_train_pre)
print(accuracy_score(y_hat_train.round(), y_train_pre))
_, y_hat_test = mlp.predict(X_test_pre)
print(accuracy_score(y_hat_test.round(), y_test_pre))
训练结果为:
0.92275
0.914