当前位置: 首页 > news >正文

使用Java调用TensorFlow与PyTorch模型:DJL框架的应用探索

在现代机器学习的应用场景中,Python早已成为广泛使用的语言,尤其是在深度学习框架TensorFlow和PyTorch的开发和应用中。尽管Java在许多企业级应用中占据一席之地,但因为缺乏直接使用深度学习框架的能力,往往使得Java开发者对机器学习的应用受到限制。幸运的是,Deep Java Library(DJL)为我们提供了一种解决方案,使得Java开发者能够方便地调用TensorFlow与PyTorch模型。本文将深入探讨如何使用DJL框架在Java中调用深度学习模型,帮助您更好地集成深度学习能力。

一. 什么是DJL框架?

Deep Java Library(DJL)是一个开源的深度学习库,旨在为Java开发者提供一个简单、直观的API,以便在Java应用中实现深度学习模型的使用。DJL由多个团队共同开发,支持多种主流深度学习引擎,如TensorFlow、PyTorch和MXNet,使得开发者能够在他们熟悉的Java环境中利用深度学习技术。

1.1 DJL的设计目标

DJL的设计目标包括但不限于以下几点:

  • 简化深度学习模型的调用过程:DJL力求消除Java开发者在调用深度学习模型时需要处理的复杂性,使模型的加载、推理、处理输入和输出都能够通过简单的API实现。

  • 兼容多种深度学习框架:DJL支持TensorFlow、PyTorch和MXNet等多个流行的深度学习框架。开发者可以在配置中自由切换框架,而无需重构底层代码逻辑,提升了代码的灵活性和可维护性。

  • 高性能:DJL在设计上注重性能,借助Java的高效率特性以及深度学习引擎本身的优化,确保了在推理时的执行速度,可以满足实际应用中的低延迟需求。

  • 可扩展性:DJL具备良好的扩展性,开发者可以自定义模型的转换逻辑、数据处理、后处理等功能,以适应特定的业务需求。

1.2 DJL的主要特性

DJL的主要特性包括:

  • 模型Zoo:DJL提供了一整套的模型库(Model Zoo),包括多个预训练模型和现成的解决方案,用户可以方便地下载和使用这些模型,而无需从头开始训练。

  • 跨平台支持:DJL设计之初考虑到Java的跨平台特性,使得在不同操作系统上的环境配置变得简单而高效。无论是在Windows、Linux还是macOS上,用户都可以平滑地构建和运行DJL应用。

  • Automatic Mixed Precision (AMP) :DJL支持自动混合精度训练,能够提高模型推理时的性能,减少内存占用,使得开发者可以在硬件资源有限的情况下,有效利用深度学习模型。

  • 大规模数据支持:通过与Apache Spark等分布式计算框架的集成,DJL能够处理大规模数据集,适合企业级应用中的大数据场景。

1.3 DJL的使用场景

DJL适用于多种行业和应用场景,常见的使用案例包括:

  • 图像处理:利用深度学习模型进行图像分类、目标检测、人脸识别等任务。

  • 自然语言处理:使用NLP模型进行文本分类、情感分析和机器翻译等。

  • 推荐系统:结合用户行为及数据,运用深度学习生成个性化推荐。

  • 金融分析:在金融领域,DJL可以被用来构建风险评估模型、信用评分模型等。

  • 智能制造:在工业自动化中,DJL可以应用于机器视觉、故障检测和预测维护等场景。

总的来说,DJL框架为Java开发者提供了一个便捷高效的工具,解决了深度学习模型在Java应用中难以使用的问题。通过DJL,Java开发者不仅能够利用现有的预训练模型,还能够在此基础上进行模型的定制和优化,推动业务的快速发展。随着越来越多的企业认识到人工智能的重要性,DJL将在深度学习的应用中发挥越来越重要的作用。

二. 安装DJL

要开始使用DJL(Deep Java Library),您需要在您的Java项目中设置相应的依赖。DJL支持多种构建工具,包括Maven、Gradle和SBT,下面将详细介绍在这几个构建工具中如何安装DJL。

2.1 使用Maven安装DJL

如果您的项目使用Maven作为构建工具,请在pom.xml文件中添加以下依赖。这些依赖包括DJL的核心库以及对TensorFlow和PyTorch的支持:

<dependencies><dependency><groupId>ai.djl.tensorflow</groupId><artifactId>tensorflow-engine</artifactId><version>0.15.0</version></dependency><dependency><groupId>ai.djl.pytorch</groupId><artifactId>pytorch-engine</artifactId><version>0.15.0</version></dependency><dependency><groupId>ai.djl.core</groupId><artifactId>djl-core</artifactId><version>0.15.0</version></dependency>
</dependencies>

请确保使用适合您项目的DJL版本,您可以在DJL的GitHub页面上获取最新版本的信息。

2.2 使用Gradle安装DJL

如果您使用Gradle作为构建工具,可以在build.gradle文件中添加以下依赖:

dependencies {implementation 'ai.djl.tensorflow:tensorflow-engine:0.15.0'implementation 'ai.djl.pytorch:pytorch-engine:0.15.0'implementation 'ai.djl.core:djl-core:0.15.0'
}

同样,确保根据需要检查和更新为最新的版本。

2.3 使用SBT安装DJL

对于使用SBT的项目,可以在build.sbt文件中添加以下依赖:

libraryDependencies ++= Seq("ai.djl.tensorflow" % "tensorflow-engine" % "0.15.0","ai.djl.pytorch" % "pytorch-engine" % "0.15.0","ai.djl.core" % "djl-core" % "0.15.0"
)

2.4 其他依赖

根据您使用的具体深度学习框架和模型,您可能还需要添加其他依赖。例如,如果您使用GPU加速,您可能需要添加对应的GPU支持依赖。DJL还提供了其他引擎的支持,如MXNet和ONNX,您可以根据实际需求添加相应的库。

2.5 验证安装

完成依赖的添加后,您可以通过构建项目来验证安装是否成功。在Maven中,您可以使用以下命令:

mvn clean install

在Gradle中,您可以使用:

./gradlew build

在SBT中,使用:

sbt compile

如果一切正常,您应该不会遇到任何依赖解析错误。

2.6 其他注意事项

  • Java版本:确保您的Java版本与DJL的要求相符。DJL通常支持Java 8及以上版本。
  • 深度学习框架:请确保您已安装TensorFlow或PyTorch的相关运行时环境(如GPU驱动、CUDA等)。

通过这些步骤,您就可以在Java项目中成功安装DJL,并为后续的深度学习模型加载与推理打下基础。接下来,您可以按照文档中的示例代码进行模型的加载与推理,轻松地将深度学习能力集成到您的Java应用中。

三. 加载与推理TensorFlow模型

在这一部分,我们将详细介绍如何使用DJL框架加载和推理TensorFlow模型。我们将从准备模型开始,然后详细说明如何在Java代码中实现加载和推理步骤。确保您已经安装了DJL,并且有一个已训练好的TensorFlow模型可供使用。

3.1 准备TensorFlow模型

在开始之前,请确保您有一个经过训练并保存的TensorFlow模型。通常,这个模型会以.pb(Protocol Buffers)格式保存。您可以使用TensorFlow的tf.saved_model.savetf.keras.models.save_model方法将模型保存为.pb格式。以下是一个基本的示例,展示如何保存一个简单的Keras模型:

import tensorflow as tf# 创建一个简单的Keras模型
model = tf.keras.Sequential([tf.keras.layers.Dense(10, activation='relu', input_shape=(None, 5)),tf.keras.layers.Dense(1)
])# 编译并训练模型
model.compile(optimizer='adam', loss='mse')
# 假设我们有某些训练数据
# model.fit(train_data, train_labels)# 保存模型
model.save('path/to/model')

请注意,保存模型时指定的路径应当是您在Java代码中使用的路径。

3.2 使用DJL加载模型

在DJL中加载TensorFlow模型相对简单。以下是如何加载并使用DJL进行模型推理的示例代码:

import ai.djl.Model;
import ai.djl.ndarray.NDArray;
import ai.djl.ndarray.NDManager;
import ai.djl.translate.TranslateException;
import ai.djl.tensorflow.engine.TfModel;
import ai.djl.tensorflow.zoo.TfModelZoo;public class TensorFlowExample {public static void main(String[] args) {// 创建NDManagerNDManager manager = NDManager.newBaseManager();// 加载TensorFlow模型Model model = null;try {model = TfModel.newInstance("path/to/model"); // 替换为您模型的路径// 准备输入数据float[][] inputData = {{1.0f, 2.0f, 3.0f, 4.0f, 5.0f}}; // 示例输入数据NDArray inputArray = manager.create(inputData); // 创建输入张量// 进行推理NDArray outputArray = model.predict(inputArray);// 输出结果System.out.println("Model output: " + outputArray);} catch (TranslateException e) {e.printStackTrace();} finally {if (model != null) {model.close(); // 关闭模型以释放资源}manager.close(); // 关闭NDManager以释放资源}}
}

3.3 处理模型输出

根据模型的结构,输出结果的形状和数据可能会有所不同。您可能需要根据模型的输出进行额外的处理。例如,如果您的模型最终层输出的是概率分布,您可能需要将其转换为类标签。以下是一个示例,展示如何从输出中提取预测值:

// 假设模型输出为一个一维张量
float[][] outputData = outputArray.toFloatArray(); // 将输出转换为二维数组// 处理输出,假设输出为单个数值
for (float value : outputData[0]) {System.out.println("Predicted value: " + value);
}// 如需将概率值转换为类标签(假设输出为概率分布)
int predictedClass = outputData[0][0] > 0.5 ? 1 : 0; // 简单的阈值判断
System.out.println("Predicted class: " + predictedClass);

3.4 示例总结

通过上述代码,您可以看到在Java中使用DJL框架加载和推理TensorFlow模型的过程是相对简单和直观的。您只需准备好模型,设置输入数据,然后调用模型进行推理,最后处理输出结果。DJL的设计初衷是让Java开发者能够轻松地利用深度学习技术,而无需深入复杂的实现细节。

3.5 进一步的优化

在实际生产环境中,您可能需要考虑以下优化措施:

  • 批量处理:对于大型数据集,考虑使用批量输入以提高推理速度。
  • 模型优化:利用TensorFlow的模型压缩和量化技术以提升模型推理性能。
  • 异步推理:在高并发场景下,考虑异步执行推理请求以提高响应性能。

通过这些方法,您可以将深度学习能力有效地集成到Java应用中,并为用户提供快速且准确的服务。

四. 加载与推理PyTorch模型

在这一部分中,我们将深入探讨如何使用DJL框架加载和推理PyTorch模型。与TensorFlow模型的处理类似,PyTorch模型的加载和推理也十分直观。我们将从准备PyTorch模型开始,然后详细说明如何在Java中实现加载和推理步骤。

4.1 准备PyTorch模型

在开始之前,请确保您有一个经过训练并导出的PyTorch模型。通常,PyTorch模型可以保存为.pth.pt格式。以下是一个简单的示例,展示如何训练和保存一个PyTorch模型:

import torch
import torch.nn as nn
import torch.optim as optim# 定义一个简单的模型
class SimpleModel(nn.Module):def __init__(self):super(SimpleModel, self).__init__()self.fc1 = nn.Linear(5, 10)self.fc2 = nn.Linear(10, 1)def forward(self, x):x = torch.relu(self.fc1(x))x = self.fc2(x)return x# 实例化模型
model = SimpleModel()# 假设某些训练数据
# optimizer = optim.Adam(model.parameters())
# criterion = nn.MSELoss()
# model.train()
# for data, target in train_loader:
#     optimizer.zero_grad()
#     output = model(data)
#     loss = criterion(output, target)
#     loss.backward()
#     optimizer.step()# 保存模型
torch.save(model.state_dict(), 'path/to/model.pth')

确保将模型的路径替换为您在Java代码中使用的路径。

4.2 使用DJL加载模型

在DJL中加载PyTorch模型的过程与TensorFlow类似。您可以使用以下代码加载和推理PyTorch模型:

import ai.djl.Model;
import ai.djl.ndarray.NDArray;
import ai.djl.ndarray.NDManager;
import ai.djl.translate.TranslateException;
import ai.djl.pytorch.engine.PtModel;
import ai.djl.pytorch.zoo.PtModelZoo;public class PyTorchExample {public static void main(String[] args) {// 创建NDManagerNDManager manager = NDManager.newBaseManager();// 加载PyTorch模型Model model = null;try {model = PtModel.newInstance("path/to/model.pth"); // 替换为您模型的路径// 准备输入数据float[][] inputData = {{1.0f, 2.0f, 3.0f, 4.0f, 5.0f}}; // 示例输入数据NDArray inputArray = manager.create(inputData); // 创建输入张量// 进行推理NDArray outputArray = model.predict(inputArray);// 输出结果System.out.println("Model output: " + outputArray);} catch (TranslateException e) {e.printStackTrace();} finally {if (model != null) {model.close(); // 关闭模型以释放资源}manager.close(); // 关闭NDManager以释放资源}}
}

4.3 处理模型输出

处理PyTorch模型的输出可以与处理TensorFlow模型的输出类似,具体取决于模型的设计和输出格式。例如,您可能需要将输出结果从张量转换为标量值或类标签。下面是一个示例,展示如何提取预测值并进行后处理:

// 假设模型输出为一个一维张量
float[][] outputData = outputArray.toFloatArray(); // 将输出转换为二维数组// 处理输出,假设输出为单个数值
for (float value : outputData[0]) {System.out.println("Predicted value: " + value);
}// 如果输出为概率分布,您可以将其转换为类标签
int predictedClass = outputData[0][0] > 0.5 ? 1 : 0; // 简单的阈值判断
System.out.println("Predicted class: " + predictedClass);

4.4 示例总结

通过上述代码,您可以看到在Java中使用DJL框架加载和推理PyTorch模型的过程是相对简单直观的。您只需准备好模型、设置输入数据,然后调用模型进行推理,最后处理输出结果。DJL的设计目标使得Java开发者能够轻松地利用深度学习技术,而无需深入复杂的实现细节。

4.5 进一步的优化

在实际应用中,您可能需要考虑以下优化措施:

  • 批量处理:对于大型数据集,使用批量输入可以显著提高推理效率。
  • 模型压缩与优化:通过对模型进行压缩和量化,可以提升推理速度和减少内存占用。
  • 异步推理:在高并发场景下,考虑使用异步推理来提高响应速度。

4.6 处理设备管理

如果您的PyTorch模型在训练时使用了GPU,可以考虑在DJL中指定使用GPU进行推理。DJL支持通过引擎选择设备,您可以在加载模型时指定设备类型,例如:

import ai.djl.Device;// 加载模型时指定设备
Model model = PtModel.newInstance("path/to/model.pth", Device.GPU);

这样可以确保推理过程充分利用GPU的计算能力,从而提升性能。

通过这部分内容,您可以掌握在Java中通过DJL加载和推理PyTorch模型的基础知识,并为将深度学习集成到Java应用奠定基础。随着对DJL框架的深入了解,您可以更灵活地使用深度学习技术,推动业务的快速发展。

五. 结论

使用DJL框架,Java开发者能够轻松地加载并推理TensorFlow与PyTorch模型,从而把深度学习的能力引入到传统的Java应用程序中。通过上述的示例代码,您可以看到调用深度学习模型的过程是相对简洁的。

相关文章:

使用Java调用TensorFlow与PyTorch模型:DJL框架的应用探索

在现代机器学习的应用场景中&#xff0c;Python早已成为广泛使用的语言&#xff0c;尤其是在深度学习框架TensorFlow和PyTorch的开发和应用中。尽管Java在许多企业级应用中占据一席之地&#xff0c;但因为缺乏直接使用深度学习框架的能力&#xff0c;往往使得Java开发者对机器学…...

nodejs的包管理工具介绍,npm的介绍和安装,npm的初始化包 ,搜索包,下载安装包

nodejs的包管理工具介绍&#xff0c;npm的介绍和安装&#xff0c;npm的初始化包 &#xff0c;搜索包&#xff0c;下载安装包 &#x1f9f0; 一、Node.js 的包管理工具有哪些&#xff1f; 工具简介是否默认特点npmNode.js 官方的包管理工具&#xff08;Node Package Manager&am…...

LeetCode 热题 100_分割等和子集(89_416_中等_C++)(动态规划)

LeetCode 热题 100_分割等和子集&#xff08;89_416&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;动态规划&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08;动态规划&#xff0…...

EasyCVR视频智能分析平台助力智慧园区:全场景视频监控摄像头融合解决方案

一、方案背景 在智慧园区建设的浪潮下&#xff0c;设备融合、数据整合与智能联动已成为核心诉求。视频监控作为智慧园区的“视觉中枢”&#xff0c;其高效整合直接影响园区的管理效能与安全水平。然而&#xff0c;园区内繁杂的视频监控设备生态——不同品牌、型号、制式的摄像…...

《剥开卷积神经网络CNN的 “千层酥”:从基础架构到核心算法》

文章目录 前言卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种专门用于处理网格结构数据&#xff08;如图像、视频、音频&#xff09;的深度学习模型。它在计算机视觉任务&#xff08;如图像分类、目标检测&#xff09;中表现尤为出色…...

win10中打开python的交互模式

不是输入python3&#xff0c;输入python&#xff0c;不知道和安装python版本有没有关系。做个简单记录&#xff0c;不想记笔记了...

技术与情感交织的一生 (七)

目录 出师 大三 MVP 首战 TYMIS はじめまして 辣子鸡丁 报价 日本人 致命失误 大佬 包围 品质保障 扩军 唯快不破 闪电战 毕业 总攻 Hold On 出师 大三 大三的学习生活&#xff0c;能认认真真的上一天课的时候很少&#xff0c;甚至经常因为客户的 “传呼”…...

ElasticSearch深入解析(一):Elastic Stack全景

一、Elastic Stack的发展 过去和现在&#xff1a; Elastic数据平台在搜索、地理位置、内部日志、数据指标、安全监控和APM应用性能管理等场景中的应用颇具亮点。 APM&#xff08;Application Performance Management&#xff0c;应用性能管理&#xff09;是一种用于监控和管理…...

CAD在线查看免费,可以支持DWG/GLB/GLTF/doc/wps/pdf/psd/eml/zip, rar/MP3/MP4/svg/OBJ/FBX格式

CAD在线查看免费&#xff0c;可以支持DWG/GLB/GLTF/doc/wps/pdf/psd/eml/zip, rar/MP3/MP4/svg/OBJ/FBX格式 m.gszh.xyz m.gszh.xyz 免费支持以下格式文件在线查看类型 支持 doc, docx, xls, xlsx, xlsm, ppt, pptx, csv, tsv, dotm, xlt, xltm, dot, dotx, xlam, xla, pages …...

【机器学习案列-21】基于 LightGBM 的智能手机用户行为分类

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

多路转接poll服务器

目录 函数原型 poll服务器 对比select的优点 关于select的详解&#xff0c;可查看多路转接select服务器-CSDN博客 函数原型 #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, int timeout); poll作为多路转接的实现方案&#xff0c;与select要解决的问…...

全本地化智能数字人

&#x1f31f;EdgePersona- 全本地化智能数字人 ​完全离线 | 隐私无忧 | 轻量高效 |笔记本友好 测试效果&#xff1a;【纯本地部署的电子魅魔&#xff01;笔记本也能离线&#xff0c;隐私性拉满】 https://www.bilibili.com/video/BV1jydeYTETD/?share_sourcecopy_web&v…...

第6次课 贪心算法 A

向日葵朝着太阳转动&#xff0c;时刻追求自身成长的最大可能。 贪心策略在一轮轮的简单选择中&#xff0c;逐步导向最佳答案。 课堂学习 引入 贪心算法&#xff08;英语&#xff1a;greedy algorithm&#xff09;&#xff0c;是用计算机来模拟一个「贪心」的人做出决策的过程…...

Docker 部署 PostgreSQL 数据库

Docker 部署 PostgreSQL 数据库 基于 Docker 部署 PostgreSQL 数据库一、拉取 PostgreSQL 镜像二、运行 PostgreSQL 容器三、运行命令参数详解四、查看容器运行状态 基于 Docker 部署 PostgreSQL 数据库 一、拉取 PostgreSQL 镜像 首先&#xff0c;确保你的 Docker 环境已正确…...

Android如何通过aspectj打造一个无侵入式动态权限申请框架

目录 一,背景 二,通过Aspectj管理所有的注解 三,配置注解 四,通过空白Activity完成真正的权限申请 五,引入依赖配置 一,背景 在Activity或者fragment中&#xff0c;写在几个方法写一些注释&#xff0c;用来表示权限申请成功&#xff0c;申请失败&#xff0c;多次拒绝。…...

Flink介绍——实时计算核心论文之Dataflow论文详解

引入 在过去的几篇文章里&#xff0c;我们看到了大数据的流式处理系统是如何一步一步进化的。从最早出现的S4&#xff0c;到能够做到“至少一次”处理的Storm&#xff0c;最后是能够做到“正好一次”数据处理的MillWheel。我们会发现&#xff0c;这些流式处理框架&#xff0c;…...

浅克隆(--depth 1)后如何获取完整的历史记录

如果远程remote为origin&#xff0c;则origin可以不写&#xff0c;如不是&#xff0c;则必须要写 获取全部分支 git fetch origin refs/heads/*:refs/remotes/origin/* 单独获取master分支 git fetch origin refs/heads/master:refs/remotes/origin/master 获取全部历史…...

安宝特案例 | 某知名日系汽车制造厂,借助AR实现智慧化转型

案例介绍 在全球制造业加速数字化的背景下&#xff0c;工厂的生产管理与设备维护效率愈发重要。 某知名日系汽车制造厂当前面临着设备的实时监控、故障维护&#xff0c;以及跨地域的管理协作等挑战&#xff0c;由于场地分散和突发状况的不可预知性&#xff0c;传统方式已无法…...

Feign 深度解析:Java 声明式 HTTP 客户端的终极指南

Feign 深度解析&#xff1a;Java 声明式 HTTP 客户端的终极指南 Feign 是由 Netflix 开源的 ​声明式 HTTP 客户端&#xff0c;后成为 Spring Cloud 生态的核心组件&#xff08;现由 OpenFeign 维护&#xff09;。它通过注解和接口定义简化了服务间 RESTful 通信&#xff0c;并…...

WPS Office安卓版云文档同步速度与PDF转换体验测评

WPS Office安卓版是很多人常用的移动办公软件。它支持在线编辑、文档同步、格式转换等功能&#xff0c;适合手机和平板用户随时处理文档。我们用它配合谷歌浏览器打开网页文档时&#xff0c;也可以将内容快速保存到云端或转换成PDF格式使用。 先说云文档同步。在打开WPS Office…...

ARM汇编的LDM和STM指令

批量加载/存储指令可以实现在一组寄存器和一块连续的内存单元之间传输数据.LDM 为加载多个寄存器&#xff0c;STM 为存储多个寄存器.允许一条指令传送 16 个寄存器的任何子集或所有寄存器.指令格式如下: LDM{cond}<模式> Rn{!},reglist{^} STM{cond}<模式> Rn{!}…...

Python-27:游戏英雄升级潜力评估

问题描述 小U在一款挂机游戏中拥有n个英雄。游戏中有一种历练升级机制&#xff0c;每天可以选择两个英雄进行历练&#xff0c;如果两位英雄的等级相同&#xff0c;则他们的等级都不会改变。如果英雄等级不同&#xff0c;那么等级较高的英雄会增加1级&#xff0c;而等级较低的英…...

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之显示勾选的购物车数据和创建订单

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【Spring篇】【计算机网络】【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f680;1.显示勾选的购物…...

AWS Lambda 架构深入探究

AWS Lambda 是现代云架构中最受欢迎的服务之一&#xff0c;因其能够在完全托管的无服务器环境中运行代码而广受认可。然而&#xff0c;尽管 Lambda 广受欢迎&#xff0c;许多开发者和架构师对它的底层运作机制却知之甚少&#xff0c;常常将其视为“编写能够在云端神奇运行的代码…...

信奥赛CSP-J复赛集训(DP专题)(19):P3399 丝绸之路

信奥赛CSP-J复赛集训&#xff08;DP专题&#xff09;&#xff08;19&#xff09;&#xff1a;P3399 丝绸之路 题目背景 张骞于公元前 138 年曾历尽艰险出使过西域。加强了汉朝与西域各国的友好往来。从那以后&#xff0c;一队队骆驼商队在这漫长的商贸大道上行进&#xff0c;他…...

网络NAT类型测试

免费收录PCDN、GPU算力网站_算力收录站需要专业的PCDN、GPU算力网站收录服务吗&#xff1f;算力收录站为您提供高效、可信赖的收录服务&#xff0c;提升您的网站能见度。https://www.cdngpu.com/ 什么是 NAT&#xff1a;NAT代表网络地址转换&#xff0c;允许多个内网设备共享一…...

Postman下载安装与使用汉化版教程

简介&#xff1a; Postman 是一款常用的 API 测试工具&#xff0c;可以方便地进行接口测试、调试和文档编写。本文将详细介绍如何下载安装 Postman 并汉化&#xff0c;包括每个步骤的详细说明。 Postman 是一款常用的 API 测试工具&#xff0c;可以方便地进行接口测试、调试和…...

使用Python+OpenCV对视频抽帧保存为JPG图像

使用PythonOpenCV对视频抽帧保存为JPG图像 import os import cv2 import time#视频文件夹路径&#xff0c;可修改 videoPath D:\\video\\ #保存的图片文件夹路径&#xff0c;可修改 savePath D:\\images\\ videolist os.listdir(videoPath) if not os.path.exists(savePath…...

Java的反射机制(曼波超易懂图文版)

(✪▽✪)曼波~~~~&#xff01;好的呀~让曼波用最可爱的姿势为你讲解Java反射机制吧&#xff01; &#x1f31f;反射机制核心概念 曼波觉得反射就像编程世界的"魔法镜"(◕ᴗ◕✿) 可以让我们在运行时动态获取类的信息并操作类对象&#xff01; // 举个栗子&#…...

【DeepSeek 学习推理】Llumnix: Dynamic Scheduling for Large Language Model Serving实验部分

6.1 实验设置 测试平台。我们使用阿里云上的16-GPU集群&#xff08;包含4个GPU虚拟机&#xff0c;类型为ecs.gn7i-c32g1.32xlarge&#xff09;。每台虚拟机配备4个NVIDIA A10&#xff08;24 GB&#xff09;GPU&#xff08;通过PCI-e 4.0连接&#xff09;、128个vCPU、752 GB内…...

运行neo4j.bat console 报错无法识别为脚本,PowerShell 教程:查看语言模式并通过注册表修改受限模式

无法将“D:\neo4j-community-4.4.38-windows\bin\Neo4j-Management\Get-Args.ps1”项识别为cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次。 前提配置好环境变量之后依然报上面的错…...

AI写代码之GO+Python写个爬虫系统

下面我们我们来利用AI&#xff0c;来用GOPython写个爬虫系统。 帮我写一个Python语言爬取数据写入Mysql的案例&#xff0c;信息如下&#xff1a; 1、Mysql数据库地址是&#xff1a;192.168.1.20 &#xff0c;mysql用户名是&#xff1a;root&#xff0c; Mysql密码是&#xff1…...

【FAQ】如何配置PCoIP零客户端AWI能访问

应用场景 在安全性要求较高的环境中&#xff0c;禁用 AWI 并使用 PCoIP 管理控制台配置端点&#xff0c;建议隐藏 OSD 以提高安全性。 通过OSD和AWI: 阻止 PCoIP 管理工具管理 PCoIP 零客户端。禁用对 Tera2 PCoIP Zero Client 的 AWI 的管理访问。下次访问 AWI 或 OSD 时强…...

RAGFlow:构建高效检索增强生成流程的技术解析

引言 在当今信息爆炸的时代&#xff0c;如何从海量数据中快速准确地获取所需信息并生成高质量内容已成为人工智能领域的重要挑战。检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;技术应运而生&#xff0c;它将信息检索与大型语言模型&#xff08;L…...

go语言中defer使用指南

目录 1.使用场景 2.执行顺序 3.for循环中的defer及defer中的闭包陷阱 4.defer与返回值的关系 5.总结 1.使用场景 在编程的时候&#xff0c;经常需要打开一些资源&#xff0c;比如数据库连接、文件、锁等&#xff0c;这些资源需要在用完之后释放掉&#xff0c;否则会造成内…...

成熟软件项目解决方案:360°全景影像显控软件系统

​若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/147425300 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、Open…...

域名解析体系中 IPv4/IPv6 地址切换的关键技术剖析

前言&#xff1a; 对接的一家学校业务&#xff0c;学校老师要求域名解析既能解析到ipv4地址又能解析到ipv6地址。听学校老师叙述&#xff08;还是会考察v6开通率的&#xff09;&#xff0c;所以通过这个方法来实现的&#xff0c;域名解析到ipv6和ipv4都可以。 准备一台机器 机…...

PHP 爬虫如何获取 1688 商品详情(代码示例)

在电商领域&#xff0c;获取 1688 商品的详细信息对于市场分析、选品上架、库存管理和价格策略制定等方面至关重要。1688 作为国内领先的 B2B 电商平台&#xff0c;提供了丰富的商品数据。通过 PHP 爬虫技术&#xff0c;我们可以高效地获取 1688 商品的详细信息&#xff0c;包括…...

Mysql的redolog

保证事务持久性&#xff0c;用于崩溃恢复&#xff0c;崩溃恢复时&#xff0c;把redo上记载的页读到内存&#xff0c;对其修改&#xff0c;变为脏页&#xff0c;刷盘运用于WAL技术&#xff0c;将随机写改为顺序写 redo log有三种状态&#xff1a; 存在 redo log buffer 中&…...

C++ 哈希表

1. 哈希表的概念 在vector、list的顺序结构中&#xff0c;查找效率为 O ( N ) O(N) O(N)&#xff0c;在set、map的树型结构中&#xff0c;查找效率为 O ( l o g 2 N ) O(log_2{N}) O(log2​N)&#xff0c;有没有更优的结构 —— 哈希表 如果让数据按照某种规则映射到某个值&a…...

【pytorch学习】土堆pytorch笔记1

学习参考 仓库 https://github.com/xiaotudui/pytorch-tutorialhttps://github.com/xiaotudui/pytorch-tutorial https://github.com/AccumulateMore/CV 参考博客 https://blog.csdn.net/weixin_44216612/article/details/124203730? https://www.morinha.cc/posts/cours…...

使用Python+OpenCV将多级嵌套文件夹下的视频文件抽帧

使用PythonOpenCV将多级嵌套文件夹下的视频文件抽帧 import os import cv2 import time# 存放视频文件的多层嵌套文件夹路径 videoPath D:\\videos\\ # 保存抽帧的图片的文件夹路径 savePath D:\\images\\if not os.path.exists(savePath):os.mkdir(savePath) video_num 0f…...

ASP.Net Web Api如何更改URL

1.找到appsettings.json 修改如下&#xff1a; 主要为urls的修改填本机私有地址即可 {"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHosts": &q…...

毕业论文设计基本内容和要求:

毕业设计基本内容和要求&#xff1a; 研究内容 调查了解LAMP架构和PHP开发&#xff1b; 学习百度旅游调用的其他产品线服务并熟悉请求接口&#xff1b; 学习社区业务层规范&#xff1b; 设计并实现旅游主要模块&#xff1b; 技术指标 熟悉企业中流程运转的方式&#xff0c;…...

XML内容解析成实体类

XML解析成实体类 解析方法实体类测试 说明&#xff1a;直接上干货&#xff0c;不废话 解析方法 public static List<PlatJuMinBaoXian> parse(String xmlString) {List<PlatJuMinBaoXian> result new ArrayList<>();try {// 创建 DocumentBuilderDocumentB…...

推公式——耍杂技的牛

由图可知&#xff0c;只要存在一个逆序&#xff0c;把他们交换一下&#xff0c;最大风险值就会降低&#xff0c;答案更优&#xff0c;因此最优解是按照wisi从小到大升序排列&#xff0c;顺次计算每头牛的危险系数&#xff0c;最大值即是答案。 #include <iostream> #inc…...

Vue指令详解:从入门到精通

前言 Vue.js作为当下最流行的前端框架之一&#xff0c;其指令系统是Vue最核心的特性之一。指令是Vue模板中带有v-前缀的特殊属性&#xff0c;它们为HTML元素添加了特殊的响应式行为。本文将全面介绍Vue的各种指令及其用法。 一、Vue指令概述 Vue指令是带有v-前缀的特殊属性&…...

准确--CentOS 7 配置 Chrony 同步阿里云 NTP 时间服务器及手动同步指南

本文档介绍如何在 CentOS 7 系统上配置 chrony 服务&#xff0c;使其与阿里云 NTP 时间服务器保持时间同步&#xff0c;并说明如何在需要时手动触发一次立即同步。 前提条件: 拥有一台 CentOS 7 服务器。拥有 root 权限或可以使用 sudo 命令。服务器可以访问互联网 (使用公共…...

CLIP | 训练过程中图像特征和文本特征的在嵌入空间中的对齐(两个投影矩阵的学习)

在多模态学习&#xff08;Multimodal Learning&#xff09;中&#xff0c;投影矩阵 W i W_i Wi​ 和 W t W_t Wt​ 是通过训练过程学习得到的。它们的作用是将图像特征 I f I_f If​ 和文本特征 T f T_f Tf​ 映射到一个共享的嵌入空间&#xff08;embedding space&#xf…...

Spring中配置 Bean 的两种方式:XML 配置 和 Java 配置类

在 Spring 框架中,配置 Bean 的方式主要有两种:XML 配置 和 Java 配置类。这两种方式都可以实现将对象注册到 Spring 容器中,并通过依赖注入进行管理。本文将详细介绍这两种配置方式的步骤,并提供相应的代码示例。 1. 使用 XML 配置的方式 步骤 创建 Spring 配置文件 创建…...