环境的搭建可以参考另一篇文章。

第一步运行MnistImagePipelineExampleSave代码下载数据集,并进行训练和保存

需要下载一个文件(windows默认保存在C:\Users\Administrator\AppData\Local\Temp\dl4j_Mnist)。文件存在git。如果网络不好。建议手动下载并解压。然后注释掉代码中的下载方法即可。如图所示:

训练需要一段时间等待即可。时间长短取决于自己电脑配置。

第二步运行MnistImagePipelineLoadChooser代码。并选中一个手写数字图像。进行识别测试

package org.deeplearning4j.examples.dataexamples;

import org.datavec.image.loader.NativeImageLoader;

import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;

import org.deeplearning4j.util.ModelSerializer;

import org.nd4j.linalg.api.ndarray.INDArray;

import org.nd4j.linalg.dataset.api.preprocessor.DataNormalization;

import org.nd4j.linalg.dataset.api.preprocessor.ImagePreProcessingScaler;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import javax.swing.*;

import java.io.File;

import java.util.Arrays;

import java.util.List;

/**

*

* 给定用户一个文件选择框来选中要测试的手写数字图像

* 0-9数字 白色或者黑色背景进行识别

*/

public class MnistImagePipelineLoadChooser {

private static Logger log = LoggerFactory.getLogger(MnistImagePipelineLoadChooser.class);

/*

Create a popup window to allow you to chose an image file to test against the

trained Neural Network

Chosen images will be automatically

scaled to 28*28 grayscale

*/

public static String fileChose(){

JFileChooser fc = new JFileChooser();

int ret = fc.showOpenDialog(null);

if (ret == JFileChooser.APPROVE_OPTION)

{

File file = fc.getSelectedFile();

String filename = file.getAbsolutePath();

return filename;

}

else {

return null;

}

}

public static void main(String[] args) throws Exception{

int height = 28;

int width = 28;

int channels = 1;

List labelList = Arrays.asList(0,1,2,3,4,5,6,7,8,9);

// pop up file chooser

String filechose = fileChose().toString();

//LOAD NEURAL NETWORK

// MnistImagePipelineExampleSave训练并保存模型

File locationToSave = new File("trained_mnist_model.zip");

// 检查保存的模型是否存在

if(locationToSave.exists()){

System.out.println("\n######存在保存的训练模型######\n");

}else{

System.out.println("\n\n#######File not found!#######");

System.out.println("This example depends on running ");

System.out.println("MnistImagePipelineExampleSave");

System.out.println("Run that Example First");

System.out.println("#############################\n\n");

System.exit(0);

}

MultiLayerNetwork model = ModelSerializer.restoreMultiLayerNetwork(locationToSave);

log.info("*********TEST YOUR IMAGE AGAINST SAVED NETWORK********");

// 选择一个文件

File file = new File(filechose);

// 使用NativeImageLoader转换为数值矩阵

NativeImageLoader loader = new NativeImageLoader(height, width, channels);

// 得到图像并赋值INDArray

INDArray image = loader.asMatrix(file);

// 0-255

// 0-1

DataNormalization scaler = new ImagePreProcessingScaler(0,1);

scaler.transform(image);

// 传递到神经网络 并得到概率值

INDArray output = model.output(image);

log.info("## The FILE CHOSEN WAS " + filechose);

log.info("## The Neural Nets Pediction ##");

log.info("## list of probabilities per label ##");

//log.info("## List of Labels in Order## ");

//有序状态

log.info(output.toString());

log.info(labelList.toString());

}

}

选择图片运行后的结果

######Saved Model Found######

o.n.l.f.Nd4jBackend - Loaded [CpuBackend] backend

o.n.n.NativeOpsHolder - Number of threads used for NativeOps: 2

o.n.n.Nd4jBlas - Number of threads used for BLAS: 2

o.n.l.a.o.e.DefaultOpExecutioner - Backend used: [CPU]; OS: [Windows 7]

o.n.l.a.o.e.DefaultOpExecutioner - Cores: [4]; Memory: [1.8GB];

o.n.l.a.o.e.DefaultOpExecutioner - Blas vendor: [OPENBLAS]

o.d.n.m.MultiLayerNetwork - Starting MultiLayerNetwork with WorkspaceModes set to [training: NONE; inference: SEPARATE]

o.d.e.d.MnistImagePipelineLoadChooser - *********TEST YOUR IMAGE AGAINST SAVED NETWORK********

o.d.e.d.MnistImagePipelineLoadChooser - ## The FILE CHOSEN WAS C:\Users\Administrator\Desktop\93.png

o.d.e.d.MnistImagePipelineLoadChooser - ## The Neural Nets Pediction ##

o.d.e.d.MnistImagePipelineLoadChooser - ## list of probabilities per label ##

o.d.e.d.MnistImagePipelineLoadChooser - [0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00]

o.d.e.d.MnistImagePipelineLoadChooser - [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

图中的数字为: 3

数字的置信度为:100.0%

Process finished with exit code 0

选择的图片为:

可见模型对黑白的手写数字识别度还算是可以的。

相关资料。建议还是去官网查阅。本博客只是进行上手实践

https://deeplearning4j.org/cn/

java cnn图像识别_Java分布式神经网络库Deeplearning4j之上手实践手写数字图像识别与模型训练...相关推荐

  1. 【华为技术】【使用MoXing实现手写数字图像识别应用】【TensorFlow】

    原贴文章:https://bbs.huaweicloud.com/forum/thread-8533-1-1.html 在测试中如果遇到什么问题,欢迎大家到原贴下提问回复. 本文介绍在华为云深度学习服 ...

  2. 基于K近邻法的手写数字图像识别

                           数字图像处理课程论文                          题目:数字图像识别   摘要 模式识别(PatternRecognition)是一 ...

  3. 手写识别python_Python徒手实现识别手写数字—图像识别算法(K最近邻)

    Python徒手实现识别手写数字-图像识别算法(K最近邻) 写在前面 这一段的内容可以说是最难的一部分之一了,因为是识别图像,所以涉及到的算法会相比之前的来说比较困难,所以我尽量会讲得清楚一点. 而且 ...

  4. DL之CNN:利用自定义DeepConvNet【7+1】算法对mnist数据集训练实现手写数字识别、模型评估(99.4%)

    DL之CNN:利用自定义DeepConvNet[7+1]算法对mnist数据集训练实现手写数字识别.模型评估(99.4%) 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 netwo ...

  5. DL之CNN:自定义SimpleConvNet【3层,im2col优化】利用mnist数据集实现手写数字识别多分类训练来评估模型

    DL之CNN:自定义SimpleConvNet[3层,im2col优化]利用mnist数据集实现手写数字识别多分类训练来评估模型 目录 输出结果 设计思路 核心代码 更多输出 输出结果 设计思路 核心 ...

  6. 【Tensorflow学习三】神经网络搭建八股“六步法”编写手写数字识别训练模型

    神经网络搭建八股"六步法"编写手写数字识别训练模型 Sequential用法 model.compile(optimizer=优化器,loss=损失函数,metrics=[&quo ...

  7. Python徒手实现识别手写数字—图像识别算法(K最近邻)

    Python徒手实现识别手写数字-图像识别算法(K最近邻) 写在前面 这一段的内容可以说是最难的一部分之一了,因为是识别图像,所以涉及到的算法会相比之前的来说比较困难,所以我尽量会讲得清楚一点. 而且 ...

  8. Java软件研发工程师转行之深度学习(Deep Learning)进阶:手写数字识别+人脸识别+图像中物体分类+视频分类+图像与文字特征+猫狗分类

    本文适合于对机器学习和数据挖掘有所了解,想深入研究深度学习的读者 1.对概率基本概率有所了解 2.具有微积分和线性代数的基本知识 3.有一定的编程基础(Python) Java软件研发工程师转行之深度 ...

  9. matlab手写数字识别图片集下载,Matlab实现Mnist-image 手写数字图像识别

    [实例简介] CNN--卷积神经网络类数字识别matlab实现代码,原因是现在而与Matlab c++ / CUDA库前端比一个Matlab库.这个项目提供了matlab类卷积神经网络的实现.勒存这网 ...

最新文章

  1. 规划文章的“显示效果”,还是太多犹豫。
  2. [转化率预估-1]引言
  3. CCpp.CallGraph
  4. Linux:运行级别,root密码重置,救援模式,安装图形化界面
  5. 【Linux】1_系统部署
  6. 设置计算机的出站和入站规则
  7. 多所高校通知:暂缓返校
  8. 为什么年轻一代 连操作系统的基本知识 都不懂?
  9. python 图像走势预测_在keras中对单一输入图像进行预测并返回预测结果操作
  10. Android上传图片的两种方式
  11. 数据库面试题之PL/SQL面试题
  12. [POJ1035]Spell checker
  13. 黑客编程入门 之 网络编程入门
  14. 【复杂网络】最清晰最准确理解什么是“结构洞(Structural Hole)”?
  15. task7b-TP53突变与否的TNBC病人基因表达相关性改变
  16. inflate()方法详解和源码分析
  17. 遇到黑客勒索病毒怎么办
  18. 一物一码(2): 一物一码之【红包那点事】
  19. 停课不停学,腾讯云助力在线教育!
  20. JAVA生成二维码链接(扫描二维码后进行指定链接跳转)--全网最详细

热门文章

  1. 树莓派2(Raspberry pi)取消 usb 存储设备的自动挂载
  2. SUMO学习入门(一)SUMO介绍
  3. QT signals and slots
  4. 关于Android应用本地拒绝服务漏洞和android:exported属性
  5. java jsch 返回值_java-springboot使用JSch远程
  6. postman任务栏图标不显示问题
  7. 【算法】微信随机红包方案--实现
  8. 小学三年级计算机基础知识教案,小学三年级上册信息技术教案
  9. 摩根大通提议与阿根廷签署美元-人民币货币互换协议
  10. Davinci使用教程(安装配置、绘图流程、权限设置)