如何在Java Deeplearning4j中进行数据加载与预处理

 更新时间:2025年09月05日 11:57:07   作者:一只蜗牛儿  
本文介绍了如何在 Deeplearning4j 中加载和预处理数据,包括图像和 CSV 数据的加载,以及基本的数据标准化和分割操作,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

在深度学习中,数据加载和预处理是至关重要的一步,它直接影响模型的性能与训练效率。Deeplearning4j 是一个强大的 Java 深度学习框架,本文将介绍如何在 Deeplearning4j 中进行数据加载与预处理。

一、环境配置

在开始之前,请确保您已经设置好 Java 开发环境,并在项目中添加了 Deeplearning4j 和相关依赖。

Maven 依赖

在您的 pom.xml 中添加以下依赖:

<dependency>
    <groupId>org.deeplearning4j</groupId>
    <artifactId>deeplearning4j-core</artifactId>
    <version>1.0.0-M1.1</version> <!-- 请使用最新版本 -->
</dependency>
<dependency>
    <groupId>org.nd4j</groupId>
    <artifactId>nd4j-native-platform</artifactId>
    <version>1.0.0-M1.1</version>
</dependency>
<dependency>
    <groupId>org.datavec</groupId>
    <artifactId>datavec-api</artifactId>
    <version>1.0.0-M1.1</version>
</dependency>

二、数据加载

1. 加载图像数据

以下是一个示例,展示如何加载图像数据并将其转换为 INDArray,这是 Deeplearning4j 中处理多维数组的主要数据结构。

import org.datavec.api.split.FileSplit;
import org.datavec.api.records.RecordReader;
import org.datavec.api.records.reader.impl.image.ImageRecordReader;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.factory.Nd4j;
import java.io.File;
import java.util.List;
public class ImageLoader {
    public static void main(String[] args) throws Exception {
        // 设置图像文件夹路径
        String imagePath = "path/to/image/folder";
        File file = new File(imagePath);
        // 创建 FileSplit
        FileSplit fileSplit = new FileSplit(file);
        // 创建 ImageRecordReader
        RecordReader recordReader = new ImageRecordReader(28, 28, 1); // 假设图像大小为28x28,单通道
        // 初始化读取器
        recordReader.initialize(fileSplit);
        // 读取图像
        INDArray image;
        while (recordReader.hasNext()) {
            image = recordReader.next();
            System.out.println(image.shapeInfoToString());
        }
    }
}

2. 加载 CSV 数据

使用 Deeplearning4j 加载 CSV 数据非常简单。以下是一个示例,展示如何加载并处理 CSV 数据。

import org.datavec.api.split.FileSplit;
import org.datavec.api.records.reader.RecordReader;
import org.datavec.api.records.reader.impl.csv.CSVRecordReader;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.factory.Nd4j;
import java.io.File;
public class CSVLoader {
    public static void main(String[] args) throws Exception {
        // 设置 CSV 文件路径
        String csvFilePath = "path/to/data.csv";
        File file = new File(csvFilePath);
        // 创建 FileSplit
        FileSplit fileSplit = new FileSplit(file);
        // 创建 CSVRecordReader
        RecordReader recordReader = new CSVRecordReader();
        recordReader.initialize(fileSplit);
        // 读取数据
        INDArray data;
        while (recordReader.hasNext()) {
            List<String> record = recordReader.next();
            // 将数据转换为 INDArray
            double[] values = record.stream().mapToDouble(Double::parseDouble).toArray();
            data = Nd4j.create(values);
            System.out.println(data);
        }
    }
}

三、数据预处理

在加载数据之后,通常需要对数据进行预处理,包括标准化、归一化等操作。

1. 数据标准化

以下是对数据进行标准化的示例代码:

public static INDArray normalize(INDArray data) {
    double mean = data.meanNumber().doubleValue();
    double std = data.stdNumber().doubleValue();
    return data.sub(mean).div(std);
}

2. 数据分割

在训练模型之前,通常需要将数据分割为训练集和测试集。以下是一个示例:

import org.nd4j.linalg.dataset.api.iterator.DataSetIterator;
import org.nd4j.linalg.dataset.api.MultiDataSet;
public class DataSplitter {
    public static void splitData(MultiDataSet dataSet) {
        // 假设数据集已加载为 MultiDataSet
        int trainSize = (int) (0.8 * dataSet.getFeatures(0).size(0)); // 80% 作为训练集
        INDArray trainData = dataSet.getFeatures(0).get(NDArrayIndex.interval(0, trainSize), NDArrayIndex.all());
        INDArray testData = dataSet.getFeatures(0).get(NDArrayIndex.interval(trainSize, dataSet.getFeatures(0).size(0)), NDArrayIndex.all());
        System.out.println("Training data shape: " + trainData.shapeInfoToString());
        System.out.println("Testing data shape: " + testData.shapeInfoToString());
    }
}

四、总结

本文介绍了如何在 Deeplearning4j 中加载和预处理数据,包括图像和 CSV 数据的加载,以及基本的数据标准化和分割操作。这些步骤是构建深度学习模型的基础,后续我们将深入探讨如何使用这些数据进行模型训练和评估。希望这篇文章能帮助你顺利启动你的深度学习项目!

到此这篇关于如何在Java Deeplearning4j中进行数据加载与预处理的文章就介绍到这了,更多相关Java Deeplearning4j数据加载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java中long和Long有什么区别详解

    java中long和Long有什么区别详解

    这篇文章主要介绍了Java中long和Long是基本数据类型和包装数据类型的区别,包括默认值、内存占用、使用场景、方法支持以及装箱和拆箱,包装数据类型如Integer提供了许多有用的方法,需要的朋友可以参考下
    2025-02-02
  • SpringBoot引入Thymeleaf的实现方法

    SpringBoot引入Thymeleaf的实现方法

    这篇文章主要介绍了SpringBoot引入Thymeleaf的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Java编程中的条件判断之if语句的用法详解

    Java编程中的条件判断之if语句的用法详解

    这篇文章主要介绍了Java编程中的条件判断之if语句的用法详解,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-11-11
  • 浅谈Java响应式系统

    浅谈Java响应式系统

    第一次听到reactive这个词还是在几年前,偶然了解到了Rxjava这个项目,仿佛为我打开了一扇新的大门,Rxjava是ReactiveX的java实现,ReactiveX家族除了Rxjava还有RxJS, Rx.NET,RxScala等等。
    2021-06-06
  • Java中操作超大数的方法

    Java中操作超大数的方法

    本篇文章是小编在网上整理的关于java操作超大数的方法以及解决思路,有兴趣的朋友参考学习下。
    2018-06-06
  • SpringAOP事务配置语法及实现过程详解

    SpringAOP事务配置语法及实现过程详解

    这篇文章主要介绍了SpringAOP事务配置语法及实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Mybatis参数处理的几种方法小结

    Mybatis参数处理的几种方法小结

    在Mybatis中如何处理参数是一个非常重要的环节,本文将详细介绍 Mybatis 的参数处理机制,包括传入参数和返回参数的处理方式,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • spring cloud整合ribbon问题及解决方案

    spring cloud整合ribbon问题及解决方案

    很多小伙伴在整合ribbon都出了相同的问题,今天特地为大家整理了该问题的解决方案,文中有非常详细的图文解说,对出现同样问题的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • SpringBoot中多个PostConstruct注解执行顺序控制

    SpringBoot中多个PostConstruct注解执行顺序控制

    本文介绍了SpringBoot中使用多个@PostConstruct注解的方法执行顺序,以解决ClassA依赖ClassB初始化结果的问题,具有一定的参考价值,感兴趣的可以了解一下
    2025-08-08
  • 解决springboot+thymeleaf视图映射报错There was an unexpected error (type=Not Found, status=404)

    解决springboot+thymeleaf视图映射报错There was an unexpected erro

    这篇文章主要介绍了解决springboot+thymeleaf视图映射报错There was an unexpected error (type=Not Found, status=404)问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12

最新评论