干货 | 手把手教你用115行代码做个数独解析器!
model = Sequential() model.add(Conv2D(32, (5, 5), input_shape=(1, 28, 28), activation= relu )) model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Conv2D(16, (3, 3), activation= relu )) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.2)) model.add(Flatten()) model.add(Dense(128, activation= relu )) model.add(Dense(64, activation= relu )) model.add(Dense(num_classes, activation= softmax )) 模型总结 在创建模型之后,需要进行编译,使其适合数据集并对其进行评估。 model.compile(loss= categorical_crossentropy , optimizer= adam , metrics=[ accuracy ]) model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=10, batch_size=200) scores = model.evaluate(X_test, y_test, verbose=0) print("Large CNN Error: %.2f%%" % (100-scores[1]*100)) 现在,可以测试上面创建的模型了。 test_images = X_test[1:5] test_imagestest_images = test_images.reshape(test_images.shape[0], 28, 28) print ("Test images shape: {}".format(test_images.shape)) for i, test_image in enumerate(test_images, start=1): org_image = test_image test_imagetest_image = test_image.reshape(1,1,28,28) prediction = model.predict_classes(test_image, verbose=0) print ("Predicted digit: {}".format(prediction[0])) plt.subplot(220+i) plt.axis( off ) plt.title("Predicted digit: {}".format(prediction[0])) plt.imshow(org_image, cmap=plt.get_cmap( gray )) plt.show() 手写体数字分类模型的预测数字 神经网络的精度为98.314%!最后,保存序列模型,这样就不必在需要使用它的时候反复训练了。 # serialize model to JSON modelmodel_json = model.to_json() with open("model.json", "w") as json_file: json_file.write(model_json) # serialize weights to HDF5 model.save_weights("model.h5") print("Saved model to disk") 更多关于手写数字识别的信息: https://github.com/aakashjhawar/Handwritten-Digit-Recognition 下一步是加载预先训练好的模型。 json_file = open( model.json , r ) loaded_model_json = json_file.read() json_file.close() loaded_model = model_from_json(loaded_model_json) loaded_model.load_weights("model.h5") 调整图像大小,并将图像分割成9x9的小图像。每个小图像的数字都是从1-9。 sudoku = cv2.resize(sudoku, (450,450)) grid = np.zeros([9,9]) for i in range(9): for j in range(9): image = sudoku[i*50:(i+1)*50,j*50:(j+1)*50] if image.sum() > 25000: grid[i][j] = identify_number(image) else: grid[i][j] = 0 gridgrid = grid.astype(int) identify_number 函数拍摄数字图像并预测图像中的数字。 (编辑:应用网_阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |