如何在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中String与StringBuilder的性能差异

    从内存方面解释Java中String与StringBuilder的性能差异

    我们通常会发现使用StringBuffer或StringBuilder创建出来的字符串在拼接时回避String要来得快,尤其是StringBuilder,本文就从内存方面解释Java中String与StringBuilder的性能差异,需要的朋友可以参考下
    2016-05-05
  • mybatisplus逻辑删除基本实现和坑点解决

    mybatisplus逻辑删除基本实现和坑点解决

    这篇文章主要介绍了mybatisplus逻辑删除基本实现和坑点解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • SpringBoot中Json工具类的实现

    SpringBoot中Json工具类的实现

    本文介绍在Java项目中实现一个JSON工具类,支持对象与JSON字符串之间的转换,并提供依赖和代码示例便于直接应用,感兴趣的可以了解一下
    2024-10-10
  • 学习Java的Date、Calendar日期操作

    学习Java的Date、Calendar日期操作

    Java开发过程中避免不了日期相关操作,这篇文章总结了一些Date、Calendar的常用方法,需要的朋友可以参考下
    2015-07-07
  • 本地缓存在Java中的实现过程

    本地缓存在Java中的实现过程

    这篇文章主要介绍了本地缓存在Java中的实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • Spring中@ConfigurationProperties的用法解析

    Spring中@ConfigurationProperties的用法解析

    这篇文章主要介绍了Spring中@ConfigurationProperties的用法解析,传统的Spring一般都是基本xml配置的,后来spring3.0新增了许多java config的注解,特别是spring boot,基本都是清一色的java config,需要的朋友可以参考下
    2023-11-11
  • Java实现输出数字三角形实例代码

    Java实现输出数字三角形实例代码

    大家好,本篇文章主要讲的是Java实现输出三角形实例代码,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • Java中ThreadLocal变量存储类的原理,使用场景及内存泄漏问题

    Java中ThreadLocal变量存储类的原理,使用场景及内存泄漏问题

    ThreadLocal是Java中提供的一个线程本地变量存储类,它让每个线程都能拥有自己独立的变量副本,实现了线程间的数据隔离,本文讲述ThreadLocal 的原理,使用场景及内存泄漏问题,
    2026-01-01
  • 基于Java实现模板填充Word

    基于Java实现模板填充Word

    这篇文章主要为大家详细介绍了如何用 Java 实现按产品经理提供的 Word 模板填充数据,并以 word 或 pdf 形式导出,有需要的小伙伴可以参考一下
    2025-01-01
  • idea下的工具栏中services不见了,如何调用出来

    idea下的工具栏中services不见了,如何调用出来

    这篇文章主要介绍了idea下的工具栏中services不见了,如何调用出来的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05

最新评论