OpenCV 多层感知器训练代码示例

代码参考:https://github.com/mbeyeler/opencv-machine-learning/blob/master/notebooks/09.04-Training-an-MLP-in-OpenCV-to-Classify-Handwritten-Digits.ipynb

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值