Happy Shrimp
http://blog.csdn.net/lights_joy/
Welcome reprint, but please keep the author information
in the OpenCV The neural network classifier is supported. This article attempts to invoke it in Python.
Same as the previous Bayesian classifier. Neural networks also follow the method of training and re-use, we directly in the Bayesian classifier test code to make simple changes, complete the classification of two types of data points.
The first is to create the data for the training first:
# training Points train_pts = 30# Create test data points, Class 2 # with (-1.5,-1.5) as Center Rand1 = np.ones ((train_pts,2)) * ( -2) + Np.random.rand (train_pts, 2) PR Int (' RAND1: ') print (RAND1) # with (1.5, 1.5) as Center Rand2 = np.ones ((train_pts,2)) + Np.random.rand (train_pts, 2) print (' Rand2: ') Print (rand2) # Merge random points, get training data Train_data = Np.vstack ((rand1, rand2)) Train_data = Np.array (train_data, dtype= ' float32 ') Train_label = Np.vstack ((Np.zeros ((train_pts,1), dtype= ' float32 '), Np.ones ((train_pts,1), dtype= ' float32 ')) # Show Training Data plt.figure (1) plt.plot (rand1[:,0], rand1[:,1], ' O ') plt.plot (rand2[:,0], rand2[:,1], ' O ')
Similar to this data:
After getting the training data, create a network and configure the training parameters:
# Create Network Ann = Cv2.ml.ANN_MLP_create () ann.setlayersizes (Np.array ([2, ten, 1]) # This line ann.setactivationfunction (Cv2.ml.ANN_MLP_SIGMOID_SYM) Ann.settrainmethod (Cv2.ml.ANN_MLP_BACKPROP) must be run first Ann.setbackpropweightscale (0.1) Ann.setbackpropmomentumscale (0.1)
because our input is the coordinate value of the data point, the output is the category to which this data point belongs. So the input layer of this network has 2 nodes, and the output has only one node. There are two hidden layers in the middle. Each has a total of ten nodes.
We then train on this network:
# TRAINING ret = Ann.train (Train_data, Cv2.ml.ROW_SAMPLE, Train_label)
After training, the test data can be used to predict:
# test data, 20 dots [ -2,2]pt = Np.array (Np.random.rand (20,2) * 4-2, dtype= ' float32 ') (ret, res) = Ann.predict (PT)
predict through Res return to get a 20x1 Array, one input point for each line. Because we chose sigmoid as the activation function. So the computed value is a floating-point number between [0,1] , and we take 0.5 as a threshold to classify and display the result:
# Categorized by label Plt.figure (2) res = Np.hstack (res, RES) # First Class Type_data = Pt[res < 0.5]type_data = Np.reshape (Type_data, ( Type_data.shape[0]/2, 2) Plt.plot (type_data[:,0], type_data[:,1], ' O ') # Second Class Type_data = pt[res >= 0.5]type_data = NP.R Eshape (Type_data, (Type_data.shape[0]/2, 2)) Plt.plot (type_data[:,0], type_data[:,1], ' O ')
Look at the final result:
??
Python image Processing (14): Neural network classifier