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

Day 66-68 主动学习之ALEC

代码:

package dl;import java.io.FileReader;
import java.util.*;
import weka.core.Instances;/*** Active learning through density clustering.*/
public class Alec {/*** The whole dataset.*/Instances dataset;/*** The maximal number of queries that can be provided.*/int maxNumQuery;/*** The actual number of queries.*/int numQuery;/*** The radius, also dc in the paper. It is employed for density computation.*/double radius;/*** The densities of instances, also rho in the paper.*/double[] densities;/*** distanceToMaster*/double[] distanceToMaster;/*** Sorted indices, where the first element indicates the instance with the* biggest density.*/int[] descendantDensities;/*** Priority*/double[] priority;/*** The maximal distance between any pair of points.*/double maximalDistance;/*** Who is my master?*/int[] masters;/*** Predicted labels.*/int[] predictedLabels;/*** Instance status. 0 for unprocessed, 1 for queried, 2 for classified.*/int[] instanceStatusArray;/*** The descendant indices to show the representativeness of instances in a* descendant order.*/int[] descendantRepresentatives;/*** Indicate the cluster of each instance. It is only used in* clusterInTwo(int[]);*/int[] clusterIndices;/*** Blocks with size no more than this threshold should not be split further.*/int smallBlockThreshold = 3;/************************************* The constructor.** @param paraFilename*            The data filename.***********************************/public Alec(String paraFilename) {try {FileReader tempReader = new FileReader(paraFilename);dataset = new Instances(tempReader);dataset.setClassIndex(dataset.numAttributes() - 1);tempReader.close();} catch (Exception ee) {System.out.println(ee);System.exit(0);} // Of frycomputeMaximalDistance();clusterIndices = new int[dataset.numInstances()];}// Of the constructor/************************************* Merge sort in descendant order to obtain an index array. The original* array is unchanged. The method should be tested further. <br>* Examples: input [1.2, 2.3, 0.4, 0.5], output [1, 0, 3, 2]. <br>* input [3.1, 5.2, 6.3, 2.1, 4.4], output [2, 1, 4, 0, 3].** @param paraArray*            the original array* @return The sorted indices.***********************************/public static int[] mergeSortToIndices(double[] paraArray) {int tempLength = paraArray.length;int[][] resultMatrix = new int[2][tempLength];// For merge sort.// Initializeint tempIndex = 0;for (int i = 0; i < tempLength; i++) {resultMatrix[tempIndex][i] = i;} // Of for i// Mergeint tempCurrentLength = 1;// The indices for current merged groups.int tempFirstStart, tempSecondStart, tempSecondEnd;while (tempCurrentLength < tempLength) {// Divide into a number of groups.// Here the boundary is adaptive to array length not equal to 2^k.for (int i = 0; i < Math.ceil((tempLength + 0.0) / tempCurrentLength / 2); i++) {// Boundaries of the grouptempFirstStart = i * tempCurrentLength * 2;tempSecondStart = tempFirstStart + tempCurrentLength;tempSecondEnd = tempSecondStart + tempCurrentLength - 1;if (tempSecondEnd >= tempLength) {tempSecondEnd = tempLength - 1;} // Of if// Merge this groupint tempFirstIndex = tempFirstStart;int tempSecondIndex = tempSecondStart;int tempCurrentIndex = tempFirstStart;if (tempSecondStart >= tempLength) {for (int j = tempFirstIndex; j < tempLength; j++) {resultMatrix[(tempIndex + 1) % 2][tempCurrentIndex] = resultMatrix[tempIndex% 2][j];tempFirstIndex++;tempCurrentIndex++;} // Of for jbreak;} // Of ifwhile ((tempFirstIndex <= tempSecondStart - 1)&& (tempSecondIndex <= tempSecondEnd)) {if (paraArray[resultMatrix[tempIndex% 2][tempFirstIndex]] >= paraArray[resultMatrix[tempIndex% 2][tempSecondIndex]]) {resultMatrix[(tempIndex + 1) % 2][tempCurrentIndex] = resultMatrix[tempIndex% 2][tempFirstIndex];tempFirstIndex++;} else {resultMatrix[(tempIndex + 1) % 2][tempCurrentIndex] = resultMatrix[tempIndex% 2][tempSecondIndex];tempSecondIndex++;} // Of iftempCurrentIndex++;} // Of while// Remaining partfor (int j = tempFirstIndex; j < tempSecondStart; j++) {resultMatrix[(tempIndex + 1) % 2][tempCurrentIndex] = resultMatrix[tempIndex% 2][j];tempCurrentIndex++;} // Of for jfor (int j = tempSecondIndex; j <= tempSecondEnd; j++) {resultMatrix[(tempIndex + 1) % 2][tempCurrentIndex] = resultMatrix[tempIndex% 2][j];tempCurrentIndex++;} // Of for j} // Of for itempCurrentLength *= 2;tempIndex++;} // Of whilereturn resultMatrix[tempIndex % 2];}// Of mergeSortToIndices/************************ The Euclidean distance between two instances. Other distance measures* unsupported for simplicity.*** @param paraI*            The index of the first instance.* @param paraJ*            The index of the second instance.* @return The distance.**********************/public double distance(int paraI, int paraJ) {double resultDistance = 0;double tempDifference;for (int i = 0; i < dataset.numAttributes() - 1; i++) {tempDifference = dataset.instance(paraI).value(i) - dataset.instance(paraJ).value(i);resultDistance += tempDifference * tempDifference;} // Of for iresultDistance = Math.sqrt(resultDistance);return resultDistance;}// Of distance/************************************* Compute the maximal distance. The result is stored in a member variable.***********************************/public void computeMaximalDistance() {maximalDistance = 0;double tempDistance;for (int i = 0; i < dataset.numInstances(); i++) {for (int j = 0; j < dataset.numInstances(); j++) {tempDistance = distance(i, j);if (maximalDistance < tempDistance) {maximalDistance = tempDistance;} // Of if} // Of for j} // Of for iSystem.out.println("maximalDistance = " + maximalDistance);}// Of computeMaximalDistance/********************* Compute the densities using Gaussian kernel.*******************/public void computeDensitiesGaussian() {System.out.println("radius = " + radius);densities = new double[dataset.numInstances()];double tempDistance;for (int i = 0; i < dataset.numInstances(); i++) {for (int j = 0; j < dataset.numInstances(); j++) {tempDistance = distance(i, j);densities[i] += Math.exp(-tempDistance * tempDistance / radius / radius);} // Of for j} // Of for iSystem.out.println("The densities are " + Arrays.toString(densities) + "\r\n");}// Of computeDensitiesGaussian/************************************* Compute distanceToMaster, the distance to its master.***********************************/public void computeDistanceToMaster() {distanceToMaster = new double[dataset.numInstances()];masters = new int[dataset.numInstances()];descendantDensities = new int[dataset.numInstances()];instanceStatusArray = new int[dataset.numInstances()];descendantDensities = mergeSortToIndices(densities);distanceToMaster[descendantDensities[0]] = maximalDistance;double tempDistance;for (int i = 1; i < dataset.numInstances(); i++) {// Initialize.distanceToMaster[descendantDensities[i]] = maximalDistance;for (int j = 0; j <= i - 1; j++) {tempDistance = distance(descendantDensities[i], descendantDensities[j]);if (distanceToMaster[descendantDensities[i]] > tempDistance) {distanceToMaster[descendantDensities[i]] = tempDistance;masters[descendantDensities[i]] = descendantDensities[j];} // Of if} // Of for j} // Of for iSystem.out.println("First compute, masters = " + Arrays.toString(masters));System.out.println("descendantDensities = " + Arrays.toString(descendantDensities));}// Of computeDistanceToMaster/************************************* Compute priority. Element with higher priority is more likely to be* selected as a cluster center. Now it is rho * distanceToMaster. It can* also be rho^alpha * distanceToMaster.***********************************/public void computePriority() {priority = new double[dataset.numInstances()];for (int i = 0; i < dataset.numInstances(); i++) {priority[i] = densities[i] * distanceToMaster[i];} // Of for i}// Of computePriority/**************************** The block of a node should be same as its master. This recursive method* is efficient.** @param paraIndex*            The index of the given node.* @return The cluster index of the current node.**************************/public int coincideWithMaster(int paraIndex) {if (clusterIndices[paraIndex] == -1) {int tempMaster = masters[paraIndex];clusterIndices[paraIndex] = coincideWithMaster(tempMaster);} // Of ifreturn clusterIndices[paraIndex];}// Of coincideWithMaster/**************************** Cluster a block in two. According to the master tree.** @param paraBlock*            The given block.* @return The new blocks where the two most represent instances serve as*         the root.**************************/public int[][] clusterInTwo(int[] paraBlock) {// Reinitialize. In fact, only instances in the given block is// considered.Arrays.fill(clusterIndices, -1);// Initialize the cluster number of the two roots.for (int i = 0; i < 2; i++) {clusterIndices[paraBlock[i]] = i;} // Of for ifor (int i = 0; i < paraBlock.length; i++) {if (clusterIndices[paraBlock[i]] != -1) {// Already have a cluster number.continue;} // Of ifclusterIndices[paraBlock[i]] = coincideWithMaster(masters[paraBlock[i]]);} // Of for i// The sub blocks.int[][] resultBlocks = new int[2][];int tempFistBlockCount = 0;for (int i = 0; i < clusterIndices.length; i++) {if (clusterIndices[i] == 0) {tempFistBlockCount++;} // Of if} // Of for iresultBlocks[0] = new int[tempFistBlockCount];resultBlocks[1] = new int[paraBlock.length - tempFistBlockCount];// Copy. You can design shorter code when the number of clusters is// greater than 2.int tempFirstIndex = 0;int tempSecondIndex = 0;for (int i = 0; i < paraBlock.length; i++) {if (clusterIndices[paraBlock[i]] == 0) {resultBlocks[0][tempFirstIndex] = paraBlock[i];tempFirstIndex++;} else {resultBlocks[1][tempSecondIndex] = paraBlock[i];tempSecondIndex++;} // Of if} // Of for iSystem.out.println("Split (" + paraBlock.length + ") instances "+ Arrays.toString(paraBlock) + "\r\nto (" + resultBlocks[0].length + ") instances "+ Arrays.toString(resultBlocks[0]) + "\r\nand (" + resultBlocks[1].length+ ") instances " + Arrays.toString(resultBlocks[1]));return resultBlocks;}// Of clusterInTwo/************************************* Classify instances in the block by simple voting.** @param paraBlock*            The given block.***********************************/public void vote(int[] paraBlock) {int[] tempClassCounts = new int[dataset.numClasses()];for (int i = 0; i < paraBlock.length; i++) {if (instanceStatusArray[paraBlock[i]] == 1) {tempClassCounts[(int) dataset.instance(paraBlock[i]).classValue()]++;} // Of if} // Of for iint tempMaxClass = -1;int tempMaxCount = -1;for (int i = 0; i < tempClassCounts.length; i++) {if (tempMaxCount < tempClassCounts[i]) {tempMaxClass = i;tempMaxCount = tempClassCounts[i];} // Of if} // Of for i// Classify unprocessed instances.for (int i = 0; i < paraBlock.length; i++) {if (instanceStatusArray[paraBlock[i]] == 0) {predictedLabels[paraBlock[i]] = tempMaxClass;instanceStatusArray[paraBlock[i]] = 2;} // Of if} // Of for i}// Of vote/************************************* Cluster based active learning. Prepare for** @param paraRatio*            The ratio of the maximal distance as the dc.* @param paraMaxNumQuery*            The maximal number of queries for the whole dataset.* @parm paraSmallBlockThreshold The small block threshold.***********************************/public void clusterBasedActiveLearning(double paraRatio, int paraMaxNumQuery,int paraSmallBlockThreshold) {radius = maximalDistance * paraRatio;smallBlockThreshold = paraSmallBlockThreshold;maxNumQuery = paraMaxNumQuery;predictedLabels = new int[dataset.numInstances()];for (int i = 0; i < dataset.numInstances(); i++) {predictedLabels[i] = -1;} // Of for icomputeDensitiesGaussian();computeDistanceToMaster();computePriority();descendantRepresentatives = mergeSortToIndices(priority);System.out.println("descendantRepresentatives = " + Arrays.toString(descendantRepresentatives));numQuery = 0;clusterBasedActiveLearning(descendantRepresentatives);}// Of clusterBasedActiveLearning/************************************* Cluster based active learning.** @param paraBlock*            The given block. This block must be sorted according to the*            priority in descendant order.***********************************/public void clusterBasedActiveLearning(int[] paraBlock) {System.out.println("clusterBasedActiveLearning for block " + Arrays.toString(paraBlock));// Step 1. How many labels are queried for this block.int tempExpectedQueries = (int) Math.sqrt(paraBlock.length);int tempNumQuery = 0;for (int i = 0; i < paraBlock.length; i++) {if (instanceStatusArray[paraBlock[i]] == 1) {tempNumQuery++;} // Of if} // Of for i// Step 2. Vote for small blocks.if ((tempNumQuery >= tempExpectedQueries) && (paraBlock.length <= smallBlockThreshold)) {System.out.println("" + tempNumQuery + " instances are queried, vote for block: \r\n"+ Arrays.toString(paraBlock));vote(paraBlock);return;} // Of if// Step 3. Query enough labels.for (int i = 0; i < tempExpectedQueries; i++) {if (numQuery >= maxNumQuery) {System.out.println("No more queries are provided, numQuery = " + numQuery + ".");vote(paraBlock);return;} // Of ifif (instanceStatusArray[paraBlock[i]] == 0) {instanceStatusArray[paraBlock[i]] = 1;predictedLabels[paraBlock[i]] = (int) dataset.instance(paraBlock[i]).classValue();// System.out.println("Query #" + paraBlock[i] + ", numQuery = "// + numQuery);numQuery++;} // Of if} // Of for i// Step 4. Pure?int tempFirstLabel = predictedLabels[paraBlock[0]];boolean tempPure = true;for (int i = 1; i < tempExpectedQueries; i++) {if (predictedLabels[paraBlock[i]] != tempFirstLabel) {tempPure = false;break;} // Of if} // Of for iif (tempPure) {System.out.println("Classify for pure block: " + Arrays.toString(paraBlock));for (int i = tempExpectedQueries; i < paraBlock.length; i++) {if (instanceStatusArray[paraBlock[i]] == 0) {predictedLabels[paraBlock[i]] = tempFirstLabel;instanceStatusArray[paraBlock[i]] = 2;} // Of if} // Of for ireturn;} // Of if// Step 5. Split in two and process them independently.int[][] tempBlocks = clusterInTwo(paraBlock);for (int i = 0; i < 2; i++) {// Attention: recursive invoking here.clusterBasedActiveLearning(tempBlocks[i]);} // Of for i}// Of clusterBasedActiveLearning/********************** Show the statistics information.********************/public String toString() {int[] tempStatusCounts = new int[3];double tempCorrect = 0;for (int i = 0; i < dataset.numInstances(); i++) {tempStatusCounts[instanceStatusArray[i]]++;if (predictedLabels[i] == (int) dataset.instance(i).classValue()) {tempCorrect++;} // Of if} // Of for iString resultString = "(unhandled, queried, classified) = "+ Arrays.toString(tempStatusCounts);resultString += "\r\nCorrect = " + tempCorrect + ", accuracy = "+ (tempCorrect / dataset.numInstances());return resultString;}// Of toString/************************************* The entrance of the program.** @param args:*            Not used now.***********************************/public static void main(String[] args) {long tempStart = System.currentTimeMillis();System.out.println("Starting ALEC.");String arffFilename = "C:\\Users\\86183\\IdeaProjects\\deepLearning\\src\\main\\java\\resources\\iris.arff";//String arffFilename = "C:\\Users\\86183\\IdeaProjects\\deepLearning\\src\\main\\java\\resources\\mushroom.arff";Alec tempAlec = new Alec(arffFilename);// The settings for iristempAlec.clusterBasedActiveLearning(0.15, 30, 3);// The settings for mushroom// tempAlec.clusterBasedActiveLearning(0.1, 800, 3);System.out.println(tempAlec);long tempEnd = System.currentTimeMillis();System.out.println("Runtime: " + (tempEnd - tempStart) + "ms.");}// Of main
}// Of class Alec

结果:

 

相关文章:

Day 66-68 主动学习之ALEC

代码&#xff1a; package dl;import java.io.FileReader; import java.util.*; import weka.core.Instances;/*** Active learning through density clustering.*/ public class Alec {/*** The whole dataset.*/Instances dataset;/*** The maximal number of queries that …...

local-path-provisioner与pvc本地磁盘挂载helm部署

1.helm拉取安装包 helm repo add containeroo https://charts.containeroo.ch helm pull containeroo/local-path-provisioner --version 0.0.19 tar -zxvf local-path-provisioner-0.0.19.tgz cd local-path-provisioner mv values.yaml values.yaml.back grep -v "#&qu…...

Visio/PPT/Matlab输出300dpi以上图片【满足标准投稿要求】

1. visio 遵照如下输出选项&#xff0c;另存为tif格式文件时&#xff0c;选择正确输出便是300dpi以上 2. matlab 文件选项选中导出设置&#xff0c;在渲染中选择dpi为600&#xff0c;导出图片即可&#xff0c;科研建议选择tif格式文件 3.ppt 打开注册表&#xff0c;winr键…...

科技UI图标的制作

科技UI图标的制作&#xff0c;效果图如下&#xff1a; 一、新建合成 1、新建合成&#xff0c;命名为合成1&#xff0c;参数设置如下&#xff1a; 2、新建纯色&#xff0c;命名为分形 二、添加分形杂色 1、添加分形杂色 为纯色层“分形”&#xff0c;添加分形杂色&#xff0c…...

微信小程序将接口返回的文件流预览导出Excel文件并转发

把接口url替换就可以用了 exportExcel () {wx.request({url: importMyApply, //这个地方是你获取二进制流的接口地址method: POST,responseType: "arraybuffer", //特别注意的是此处是请求文件流必须加上的属性&#xff0c;不然你导出到手机上的时候打不开&#xff…...

windows 安装 mongodb 数据库

软件下载 访问官方的下载地址&#xff1a; https://www.mongodb.com/try/download/community &#xff0c;然后选择对应的版本进行下载 下载好了之后双击进行安装 软件安装 1、点击 next 点击下一步 2、勾选接受协议&#xff0c;点击 next 3、第三页有两个选项&#x…...

业务不打烊:解决软件系统升级痛点的新方法

数字化时代&#xff0c;随着用户对产品性能和功能要求的不断提升&#xff0c;应用服务升级成了企业保持竞争力的关键之一。然而&#xff0c;传统的应用服务升级往往会给用户带来不必要的中断和不便&#xff0c;这种“伤筋动骨”的升级方式已经无法满足日益增长的用户需求&#…...

csdn新星计划vue3+ts+antd赛道——利用inscode搭建vue3(ts)+antd前端模板

文章目录 ⭐前言⭐利用inscode免费开放资源&#x1f496; 在inscode搭建vue3tsant项目&#x1f496; 调整配置&#x1f496; antd 国际化配置&#x1f496; 用户store&#x1f496; 路由权限&#x1f496; 预览 ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享…...

通过 CSS 的样式实现语音发送动效类似声音震动的效果

实现效果&#xff1a;一般用于发送语音的时候&#xff0c;出现动画效果 //模版部分 <view class"musical-scale"><view class"scale"><view class"em" v-for"(item,index) in 15" :key"index"></view…...

【C#】.Net Framework框架使用JWT

2023年&#xff0c;第31周&#xff0c;第2篇文章。给自己一个目标&#xff0c;然后坚持总会有收货&#xff0c;不信你试试&#xff01; 本篇文章主要简单讲讲&#xff0c;.Net Framework框架下使用JWT的代码例子&#xff0c;以及他们的基本概念。 2002年微软发布了.net framewo…...

SQL高级教程第三章

SQL CREATE DATABASE 语句 CREATE DATABASE 语句 CREATE DATABASE 用于创建数据库。 SQL CREATE DATABASE 语法 CREATE DATABASE database_name SQL CREATE DATABASE 实例 现在我们希望创建一个名为 "my_db" 的数据库。 我们使用下面的 CREATE DATABASE 语句&…...

vue 3.0 下载本地pdf文件

使用a标签,把pdf文件放到public文件夹下面 <el-form label-width"160px"> <el-form-item label"使用手册"> <div class"form-item-static"> <a href"/使用手册.pdf" target"_blank" class"link&q…...

平板用的触控笔什么牌子好?ipad第三方电容笔推荐

随着技术的发展&#xff0c;出现了各种各样的平板电容笔。一支好的电容笔&#xff0c;不但可以极大地提升我们的工作效率&#xff0c;还可以极大地提升我们的学习效果。平替的电容笔&#xff0c;无论是在技术方面&#xff0c;还是在质量方面&#xff0c;都还有很大的提升空间&a…...

【Unity2D】相机移动以及设置相机边界

添加相机 添加相机时&#xff0c;首先需要在unity中添加 Cinemachine 包 第一次使用这个包时&#xff0c;需要在Package Manager中搜索并安装 安装Camera Mechine包后&#xff0c;添加2D Camera 设置跟随对象为Ruby &#xff08;从Hierarchy中将Ruby拖动到Follow中&#xff0…...

和chatgpt学架构04-路由开发

目录 1 什么是路由2 如何设置路由2.1 安装依赖2.2 创建路由文件2.3 创建首页2.4 编写HomePage2.5 更新路由配置2.6 让路由生效 3 测试总结 要想使用vue实现页面的灵活跳转&#xff0c;其中路由配置是必不可少的&#xff0c;我们在做开发的时候&#xff0c;先需要了解知识点&…...

Spring MVC异常处理【单个控制异常处理器、全局异常处理器、自定义异常处理器】

目录 一、单个控制器异常处理 1.1 控制器方法 1.2 编写出错页面 1.3 测试结果 二、全局异常处理 2.1 一个有异常的控制器类 2.2 全局异常处理器类 2.3 测试结果 三、自定义异常处理器 3.1 自定义异常处理器 3.2 测试结果 往期专栏&文章相关导读 1. Maven系列…...

使用3ds Max粒子系统创建飞天箭雨特效场景

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 设置箭头 步骤 1 打开 3ds Max。 打开 3ds Max 步骤 2 我使用多边形建模技术制作了一个简单的箭头&#xff0c;我将 在教程中使用。.max您可以从 下载部分。 箭头.max 步骤 3 将此箭头重命名为静态…...

【朴素贝叶斯实例】

朴素贝叶斯对新闻进行分类 朴素贝叶斯算法是一种常用的文本分类方法&#xff0c;特别适用于自然语言处理任务&#xff0c;如新闻分类。在这篇博客中&#xff0c;我们将使用Python的scikit-learn库来实现朴素贝叶斯算法&#xff0c;并将其应用于新闻分类任务。 数据准备 首先…...

MPAS跨尺度、可变分辨率模式

跨尺度预测模式&#xff08;The Model for Prediction Across Scales - MPAS&#xff09;是由洛斯阿拉莫斯实验室和美国国家大气研究中心(NCAR)共同开发&#xff0c;其由3个部分组成&#xff0c;分别称为 MPAS-A&#xff08;大气模型&#xff09;、MPAS-O&#xff08;海洋模型&…...

微信小程序对接SSE接口记录

微信小程序对接SSE接口记录 需求&#xff1a;公司项目对接gpt&#xff0c;gpt产生的结果是分段返回&#xff0c;所以要求在产生结果时&#xff0c;有打字机的效果。原本是由定时器调用&#xff0c;后来优化改为服务端使用SSE接口。小程序使用起来比较方便&#xff0c;但是要求…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...