java cnn图像识别_Java分布式神经网络库Deeplearning4j之上手实践手写数字图像识别与模型训练...
环境的搭建可以参考另一篇文章。
第一步运行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之上手实践手写数字图像识别与模型训练...相关推荐
- 【华为技术】【使用MoXing实现手写数字图像识别应用】【TensorFlow】
原贴文章:https://bbs.huaweicloud.com/forum/thread-8533-1-1.html 在测试中如果遇到什么问题,欢迎大家到原贴下提问回复. 本文介绍在华为云深度学习服 ...
- 基于K近邻法的手写数字图像识别
数字图像处理课程论文 题目:数字图像识别 摘要 模式识别(PatternRecognition)是一 ...
- 手写识别python_Python徒手实现识别手写数字—图像识别算法(K最近邻)
Python徒手实现识别手写数字-图像识别算法(K最近邻) 写在前面 这一段的内容可以说是最难的一部分之一了,因为是识别图像,所以涉及到的算法会相比之前的来说比较困难,所以我尽量会讲得清楚一点. 而且 ...
- DL之CNN:利用自定义DeepConvNet【7+1】算法对mnist数据集训练实现手写数字识别、模型评估(99.4%)
DL之CNN:利用自定义DeepConvNet[7+1]算法对mnist数据集训练实现手写数字识别.模型评估(99.4%) 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 netwo ...
- DL之CNN:自定义SimpleConvNet【3层,im2col优化】利用mnist数据集实现手写数字识别多分类训练来评估模型
DL之CNN:自定义SimpleConvNet[3层,im2col优化]利用mnist数据集实现手写数字识别多分类训练来评估模型 目录 输出结果 设计思路 核心代码 更多输出 输出结果 设计思路 核心 ...
- 【Tensorflow学习三】神经网络搭建八股“六步法”编写手写数字识别训练模型
神经网络搭建八股"六步法"编写手写数字识别训练模型 Sequential用法 model.compile(optimizer=优化器,loss=损失函数,metrics=[&quo ...
- Python徒手实现识别手写数字—图像识别算法(K最近邻)
Python徒手实现识别手写数字-图像识别算法(K最近邻) 写在前面 这一段的内容可以说是最难的一部分之一了,因为是识别图像,所以涉及到的算法会相比之前的来说比较困难,所以我尽量会讲得清楚一点. 而且 ...
- Java软件研发工程师转行之深度学习(Deep Learning)进阶:手写数字识别+人脸识别+图像中物体分类+视频分类+图像与文字特征+猫狗分类
本文适合于对机器学习和数据挖掘有所了解,想深入研究深度学习的读者 1.对概率基本概率有所了解 2.具有微积分和线性代数的基本知识 3.有一定的编程基础(Python) Java软件研发工程师转行之深度 ...
- matlab手写数字识别图片集下载,Matlab实现Mnist-image 手写数字图像识别
[实例简介] CNN--卷积神经网络类数字识别matlab实现代码,原因是现在而与Matlab c++ / CUDA库前端比一个Matlab库.这个项目提供了matlab类卷积神经网络的实现.勒存这网 ...
最新文章
- 规划文章的“显示效果”,还是太多犹豫。
- [转化率预估-1]引言
- CCpp.CallGraph
- Linux:运行级别,root密码重置,救援模式,安装图形化界面
- 【Linux】1_系统部署
- 设置计算机的出站和入站规则
- 多所高校通知:暂缓返校
- 为什么年轻一代 连操作系统的基本知识 都不懂?
- python 图像走势预测_在keras中对单一输入图像进行预测并返回预测结果操作
- Android上传图片的两种方式
- 数据库面试题之PL/SQL面试题
- [POJ1035]Spell checker
- 黑客编程入门 之 网络编程入门
- 【复杂网络】最清晰最准确理解什么是“结构洞(Structural Hole)”?
- task7b-TP53突变与否的TNBC病人基因表达相关性改变
- inflate()方法详解和源码分析
- 遇到黑客勒索病毒怎么办
- 一物一码(2): 一物一码之【红包那点事】
- 停课不停学,腾讯云助力在线教育!
- JAVA生成二维码链接(扫描二维码后进行指定链接跳转)--全网最详细