Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java分布式神经网络库Deeplearning4j之上手实践手写数字图像识别与模型训练

Java分布式神经网络库Deeplearning4j之上手实践手写数字图像识别与模型训练

作者头像
小帅丶
发布于 2018-02-08 03:08:26
发布于 2018-02-08 03:08:26
3.3K00
代码可运行
举报
文章被收录于专栏:XAIXAI
运行总次数:0
代码可运行
环境的搭建可以参考另一篇文章。
  • 第一步运行MnistImagePipelineExampleSave代码下载数据集,并进行训练和保存

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

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

  • 第二步运行MnistImagePipelineLoadChooser代码。并选中一个手写数字图像。进行识别测试
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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<Integer> 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());

    }



}
  • 选择图片运行后的结果
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
######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/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深度学习 · 手撕 DeepLearning4J ,用Java实现手写数字识别 (附UI效果展示)
随着人工智能技术的不断发展,手写数字识别已经成为深度学习领域的一个经典案例。不管是老牌的机器学习模型还是现代的神经网络架构,手写数字识别总是大家学习和实战的起点之一。而对于我们日常使用的Java开发者来说,借助DeepLearning4J这个强大的Java深度学习框架,可以很方便地在Java项目中实现手写数字识别的功能。
不惑
2025/01/23
1.1K4
深度学习 · 手撕 DeepLearning4J ,用Java实现手写数字识别 (附UI效果展示)
【专知-Java Deeplearning4j深度学习教程06】用卷积神经网络CNN进行图像分类
【导读】主题链路知识是我们专知的核心功能之一,为用户提供AI领域系统性的知识学习服务,一站式学习人工智能的知识,包含人工智能( 机器学习、自然语言处理、计算机视觉等)、大数据、编程语言、系统架构。使用请访问专知 进行主题搜索查看 - 桌面电脑访问www.zhuanzhi.ai, 手机端访问www.zhuanzhi.ai 或关注微信公众号后台回复" 专知"进入专知,搜索主题查看。继Pytorch教程后,我们推出面向Java程序员的深度学习教程DeepLearning4J。Deeplearning4j的案例和
WZEARW
2018/04/10
3.7K0
【专知-Java Deeplearning4j深度学习教程06】用卷积神经网络CNN进行图像分类
【专知-Deeplearning4j深度学习教程03】使用多层神经网络分类MNIST数据集:图文+代码
【导读】主题链路知识是我们专知的核心功能之一,为用户提供AI领域系统性的知识学习服务,一站式学习人工智能的知识,包含人工智能( 机器学习、自然语言处理、计算机视觉等)、大数据、编程语言、系统架构。使用请访问专知 进行主题搜索查看 - 桌面电脑访问www.zhuanzhi.ai, 手机端访问www.zhuanzhi.ai 或关注微信公众号后台回复" 专知"进入专知,搜索主题查看。继Pytorch教程后,我们推出面向Java程序员的深度学习教程DeepLearning4J。Deeplearning4j的案例和
WZEARW
2018/04/09
2K0
【专知-Deeplearning4j深度学习教程03】使用多层神经网络分类MNIST数据集:图文+代码
【专知-Java Deeplearning4j深度学习教程05】无监督特征提取神器—AutoEncoder:图文+代码
【导读】主题链路知识是我们专知的核心功能之一,为用户提供AI领域系统性的知识学习服务,一站式学习人工智能的知识,包含人工智能( 机器学习、自然语言处理、计算机视觉等)、大数据、编程语言、系统架构。使用请访问专知 进行主题搜索查看 - 桌面电脑访问www.zhuanzhi.ai, 手机端访问www.zhuanzhi.ai 或关注微信公众号后台回复" 专知"进入专知,搜索主题查看。继Pytorch教程后,我们推出面向Java程序员的深度学习教程DeepLearning4J。Deeplearning4j的案例和
WZEARW
2018/04/09
1.9K0
【专知-Java Deeplearning4j深度学习教程05】无监督特征提取神器—AutoEncoder:图文+代码
DL4J实战之三:经典卷积实例(LeNet-5)
本篇概览 作为《DL4J》实战的第三篇,目标是在DL4J框架下创建经典的LeNet-5卷积神经网络模型,对MNIST数据集进行训练和测试,本篇由以下内容构成: LeNet-5简介 MNIST简介 数据集简介 关于版本和环境 编码 验证 LeNet-5简介 是Yann LeCun于1998年设计的卷积神经网络,用于手写数字识别,例如当年美国很多银行用其识别支票上的手写数字,LeNet-5是早期卷积神经网络最有代表性的实验系统之一 LeNet-5网络结构如下图所示,一共七层:C1 -> S2 -> C3 ->
程序员欣宸
2021/12/07
6530
DL4J实战之三:经典卷积实例(LeNet-5)
DL4J实战之二:鸢尾花分类
本篇概览 本文是《DL4J》实战的第二篇,前面做好了准备工作,接下来进入正式实战,本篇内容是经典的入门例子:鸢尾花分类 下图是一朵鸢尾花,我们可以测量到它的四个特征:花瓣(petal)的宽和高,花萼(sepal)的 宽和高: 鸢尾花有三种:Setosa、Versicolor、Virginica 今天的实战是用前馈神经网络Feed-Forward Neural Network (FFNN)就行鸢尾花分类的模型训练和评估,在拿到150条鸢尾花的特征和分类结果后,我们先训练出模型,再评估模型的效果: 源码
程序员欣宸
2021/12/07
5100
DL4J实战之二:鸢尾花分类
你听说过 DeepLearning4J吗 · 属于我们Java Coder深度学习框架
DeepLearning4J(DL4J)是一个开源的深度学习库,专为Java和Scala语言设计,提供了强大的功能来构建、训练和部署深度神经网络。它支持多种机器学习算法,并能够与大数据框架(如Hadoop和Spark)进行集成,适用于图像识别、时间序列分析、自然语言处理等任务。
不惑
2025/01/16
2K0
你听说过 DeepLearning4J吗 · 属于我们Java Coder深度学习框架
Spring AI中的卷积神经网络(CNN):深度解析与Java实现
文章地址:https://cloud.tencent.com/developer/article/2474500
小马哥学JAVA
2024/12/07
4370
【DL4J速成】Deeplearning4j图像分类从模型自定义到测试
今天说Deeplearning4j(DL4J),本文所用到的数据,代码请参考我们官方git
用户1508658
2019/07/26
1.8K0
【DL4J速成】Deeplearning4j图像分类从模型自定义到测试
手写体数字识别该如何选择GPU并实现?DeepLearning4j 实战
在之前的博客中已经用单机、Spark分布式两种训练的方式对深度神经网络进行训练,但其实DeepLearning4j也是支持多GPU训练的。 这篇文章我就总结下用GPU来对DNN/CNN进行训练和评估过程。并且我会给出CPU、GPU和多卡GPU之前的性能比较图表。不过,由于重点在于说明Mnist数据集在GPU上训练的过程,所以对于一些环境的部署,比如Java环境和CUDA的安装就不再详细说明了。 软件环境的部署主要在于两个方面,一个是JDK的安装,另外一个是CUDA。目前最新版本的DeepLearning4j
AI研习社
2018/03/28
1K0
手写体数字识别该如何选择GPU并实现?DeepLearning4j 实战
让DeepLearning4j阅读小说并给出关联度最高的词
DeepLearning4j是一个java的神经网络框架,便于java程序员使用神经网络来完成一些机器学习工程。
天涯泪小武
2019/01/17
9850
SpringBoot用深度学习模型识别数字:开发详解
本篇概览 前文《三分钟体验:SpringBoot用深度学习模型识别数字》中,咱们轻点鼠标体验了一个Java应用,该应用集成了深度学习模型,能识别出图像中的手写数字,那篇文章以体验和操作为主,并没有谈到背后的实现 此刻的您,如果之前对深度学习了解不多,只随着《三分钟体验:SpringBoot用深度学习模型识别数字》做过简单体验,现在应该一头雾水,心中可能有以下疑问: 前文提到的模型文件minist-model.zip是什么?怎么来的? SpringBoot拿到模型文件后,怎么用的?和识别功能有什么关系? 今天
程序员欣宸
2021/12/07
1.2K0
SpringBoot用深度学习模型识别数字:开发详解
如何用Deeplearning4j实现GAN
  1、求解一个Discriminator,可以最大尺度的丈量Generator 产生的数据和真实数据之间的分布距离
不会飞的小鸟
2019/08/16
4780
【专知-Deeplearning4j深度学习教程02】用ND4J自己动手实现RBM: 图文+代码
【导读】主题链路知识是我们专知的核心功能之一,为用户提供AI领域系统性的知识学习服务,一站式学习人工智能的知识,包含人工智能( 机器学习、自然语言处理、计算机视觉等)、大数据、编程语言、系统架构。使用请访问专知 进行主题搜索查看 - 桌面电脑访问www.zhuanzhi.ai, 手机端访问www.zhuanzhi.ai 或关注微信公众号后台回复" 专知"进入专知,搜索主题查看。继Pytorch教程后,我们推出面向Java程序员的深度学习教程DeepLearning4J。Deeplearning4j的案例和
WZEARW
2018/04/09
2.4K0
【专知-Deeplearning4j深度学习教程02】用ND4J自己动手实现RBM: 图文+代码
【专知-Java Deeplearning4j深度学习教程04】使用CNN进行文本分类:图文+代码
【导读】主题链路知识是我们专知的核心功能之一,为用户提供AI领域系统性的知识学习服务,一站式学习人工智能的知识,包含人工智能( 机器学习、自然语言处理、计算机视觉等)、大数据、编程语言、系统架构。使用请访问专知 进行主题搜索查看 - 桌面电脑访问www.zhuanzhi.ai, 手机端访问www.zhuanzhi.ai 或关注微信公众号后台回复" 专知"进入专知,搜索主题查看。继Pytorch教程后,我们推出面向Java程序员的深度学习教程DeepLearning4J。Deeplearning4j的案例和
WZEARW
2018/04/09
5.3K0
【专知-Java Deeplearning4j深度学习教程04】使用CNN进行文本分类:图文+代码
Deeplearning4j使用指南-Java快速进阶教程
在本文中,我们将使用deeplearning4j(dl4j) 库创建一个简单的神经网络,这是一个现代而强大的机器学习工具。
jack.yang
2025/04/05
6300
Deeplearning4j使用指南-Java快速进阶教程
使用Java部署训练好的Keras深度学习模型
Keras库为深度学习提供了一个相对简单的接口,使神经网络可以被大众使用。然而,我们面临的挑战之一是将Keras的探索模型转化为产品模型。Keras是用Python编写的,直到最近,这个语言之外的支持还很有限。虽然Flask,PySpark和Cloud ML等工具可以直接在Python中产品化模型,但我通常更喜欢使用Java来部署模型。
AiTechYun
2018/09/26
5.7K0
使用Java部署训练好的Keras深度学习模型
有趣的卷积神经网络
最近一直在研究深度学习,联想起之前所学,感叹数学是一门朴素而神奇的科学。F=G*m1*m2/r²万有引力描述了宇宙星河运转的规律,E=mc²描述了恒星发光的奥秘,V=H*d哈勃定律描述了宇宙膨胀的奥秘,自然界的大部分现象和规律都可以用数学函数来描述,也就是可以求得一个函数。
天涯泪小武
2019/05/26
4270
三分钟体验:SpringBoot用深度学习模型识别数字
本篇概览 使用Deeplearning4j训练出来的模型,可以在java应用中使用吗? 当然能,今天咱们花三分钟来体验集成了AI能力的SpringBoot应用 该应用的功能是识别黑白图片中的手写数字(每张图片内只有一个数字),如下图,通过http接口将此图片提交,让SpringBoot应用去识别: 下图是postman操作界面的截图,红框中的数字就是SpringBoot应用的识别结果,数字8,与图片一致: SpringBoot应用用到的AI模型是LeNet-5,这是个经典的识别模型,常用在
程序员欣宸
2021/12/07
5360
三分钟体验:SpringBoot用深度学习模型识别数字
Deeplearning4j库学习
本文介绍了DeepLearning4J和Deeplearning4j的代码示例,以及使用Maven构建和运行DeepLearning4J和Deeplearning4j代码的步骤。实验包括一个简单的多层感知器(MLP)神经网络,用于解决手写数字问题,以及一个基于文本的Word2Vec模型,用于将单词映射到向量空间。这些示例展示了如何使用DeepLearning4J和Deeplearning4j库在Java中进行深度学习,并展示了如何使用Maven构建和运行这些代码。
sparkexpert
2018/01/09
2K0
Deeplearning4j库学习
推荐阅读
相关推荐
深度学习 · 手撕 DeepLearning4J ,用Java实现手写数字识别 (附UI效果展示)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验