java版Spring Cloud+Spring Boot+Mybatis之隐私计算 FATE - 多分类神经网络算法测试

一、说明

本文分享基于 Fate 使用 横向联邦 神经网络算法 对 多分类 的数据进行 模型训练,并使用该模型对数据进行 多分类预测

  • 二分类算法:是指待预测的 label 标签的取值只有两种;直白来讲就是每个实例的可能类别只有两种 (0 或者 1),例如性别只有  或者 ;此时的分类算法其实是在构建一个分类线将数据划分为两个类别。
  • 多分类算法:是指待预测的 label 标签的取值可能有多种情况,例如个人爱好可能有 篮球足球电影 等等多种类型。常见算法:Softmax、SVM、KNN、决策树。

关于 Fate 的核心概念、单机部署、训练以及预测请参考以下相关文章:

  • 《隐私计算 FATE - 关键概念与单机部署指南》
  • 《隐私计算 FATE - 模型训练》
  • 《隐私计算 FATE - 离线预测》

二、准备训练数据

上传到 Fate 里的数据有两个字段名必需是规定的,分别是主键为 id 字段和分类字段为 y 字段,y 字段就是所谓的待预测的 label 标签;其他的特征字段 (属性) 可任意填写,例如下面例子中的 x0 - x9

例如有一条用户数据为: 收入 : 10000,负债 : 5000,是否有还款能力 : 1 ;数据中的 收入 和 负债 就是特征字段,而 是否有还款能力 就是分类字段。

本文只描述关键部分,关于详细的模型训练步骤,请查看文章《隐私计算 FATE - 模型训练》

2.1. guest 端

10 条数据,包含 1 个分类字段 y 和 10 个标签字段 x0 - x9

y 值有 0、1、2、3 四个分类

上传到 Fate 中,表名为 muti_breast_homo_guest 命名空间为 experiment

2.2. host 端

10 条数据,字段与 guest 端一样,但是内容不一样

上传到 Fate 中,表名为 muti_breast_homo_host 命名空间为 experiment

三、执行训练任务

3.1. 准备 dsl 文件

创建文件 homo_nn_dsl.json 内容如下 :

{
    "components": {
        "reader_0": {
            "module": "Reader",
            "output": {
                "data": [
                    "data"
                ]
            }
        },
        "data_transform_0": {
            "module": "DataTransform",
            "input": {
                "data": {
                    "data": [
                        "reader_0.data"
                    ]
                }
            },
            "output": {
                "data": [
                    "data"
                ],
                "model": [
                    "model"
                ]
            }
        },
        "homo_nn_0": {
            "module": "HomoNN",
            "input": {
                "data": {
                    "train_data": [
                        "data_transform_0.data"
                    ]
                }
            },
            "output": {
                "data": [
                    "data"
                ],
                "model": [
                    "model"
                ]
            }
        }
    }
}

3.2. 准备 conf 文件

创建文件 homo_nn_multi_label_conf.json 内容如下 :

{
    "dsl_version": 2,
    "initiator": {
        "role": "guest",
        "party_id": 9999
    },
    "role": {
        "arbiter": [
            10000
        ],
        "host": [
            10000
        ],
        "guest": [
            9999
        ]
    },
    "component_parameters": {
        "common": {
            "data_transform_0": {
                "with_label": true
            },
            "homo_nn_0": {
                "encode_label": true,
                "max_iter": 15,
                "batch_size": -1,
                "early_stop": {
                    "early_stop": "diff",
                    "eps": 0.0001
                },
                "optimizer": {
                    "learning_rate": 0.05,
                    "decay": 0.0,
                    "beta_1": 0.9,
                    "beta_2": 0.999,
                    "epsilon": 1e-07,
                    "amsgrad": false,
                    "optimizer": "Adam"
                },
                "loss": "categorical_crossentropy",
                "metrics": [
                    "accuracy"
                ],
                "nn_define": {
                    "class_name": "Sequential",
                    "config": {
                        "name": "sequential",
                        "layers": [
                            {
                                "class_name": "Dense",
                                "config": {
                                    "name": "dense",
                                    "trainable": true,
                                    "batch_input_shape": [
                                        null,
                                        18
                                    ],
                                    "dtype": "float32",
                                    "units": 5,
                                    "activation": "relu",
                                    "use_bias": true,
                                    "kernel_initializer": {
                                        "class_name": "GlorotUniform",
                                        "config": {
                                            "seed": null,
                                            "dtype": "float32"
                                        }
                                    },
                                    "bias_initializer": {
                                        "class_name": "Zeros",
                                        "config": {
                                            "dtype": "float32"
                                        }
                                    },
                                    "kernel_regularizer": null,
                                    "bias_regularizer": null,
                                    "activity_regularizer": null,
                                    "kernel_constraint": null,
                                    "bias_constraint": null
                                }
                            },
                            {
                                "class_name": "Dense",
                                "config": {
                                    "name": "dense_1",
                                    "trainable": true,
                                    "dtype": "float32",
                                    "units": 4,
                                    "activation": "sigmoid",
                                    "use_bias": true,
                                    "kernel_initializer": {
                                        "class_name": "GlorotUniform",
                                        "config": {
                                            "seed": null,
                                            "dtype": "float32"
                                        }
                                    },
                                    "bias_initializer": {
                                        "class_name": "Zeros",
                                        "config": {
                                            "dtype": "float32"
                                        }
                                    },
                                    "kernel_regularizer": null,
                                    "bias_regularizer": null,
                                    "activity_regularizer": null,
                                    "kernel_constraint": null,
                                    "bias_constraint": null
                                }
                            }
                        ]
                    },
                    "keras_version": "2.2.4-tf",
                    "backend": "tensorflow"
                },
                "config_type": "keras"
            }
        },
        "role": {
            "host": {
                "0": {
                    "reader_0": {
                        "table": {
                            "name": "muti_breast_homo_host",
                            "namespace": "experiment"
                        }
                    }
                }
            },
            "guest": {
                "0": {
                    "reader_0": {
                        "table": {
                            "name": "muti_breast_homo_guest",
                            "namespace": "experiment"
                        }
                    }
                }
            }
        }
    }
}

注意 reader_0 组件的表名和命名空间需与上传数据时配置的一致。

3.3. 提交任务

执行以下命令:

flow job submit -d homo_nn_dsl.json -c homo_nn_multi_label_conf.json

执行成功后,查看 dashboard 显示:

四、准备预测数据

与前面训练的数据字段一样,但是内容不一样,y 值全为 0

4.1. guest 端

上传到 Fate 中,表名为 predict_muti_breast_homo_guest 命名空间为 experiment

4.2. host 端

上传到 Fate 中,表名为 predict_muti_breast_homo_host 命名空间为 experiment

五、准备预测配置

本文只描述关键部分,关于详细的预测步骤,请查看文章《隐私计算 FATE - 离线预测》

创建文件 homo_nn_multi_label_predict.json 内容如下 :

{
    "dsl_version": 2,
    "initiator": {
        "role": "guest",
        "party_id": 9999
    },
    "role": {
        "arbiter": [
            10000
        ],
        "host": [
            10000
        ],
        "guest": [
            9999
        ]
    },
    "job_parameters": {
        "common": {
            "model_id": "arbiter-10000#guest-9999#host-10000#model",
            "model_version": "202207061504081543620",
            "job_type": "predict"
        }
    },
    "component_parameters": {
        "role": {
            "guest": {
                "0": {
                    "reader_0": {
                        "table": {
                            "name": "predict_muti_breast_homo_guest",
                            "namespace": "experiment"
                        }
                    }
                }
            },
            "host": {
                "0": {
                    "reader_0": {
                        "table": {
                            "name": "predict_muti_breast_homo_host",
                            "namespace": "experiment"
                        }
                    }
                }
            }
        }
    }
}

注意以下两点:

  1. model_id 和 model_version 需修改为模型部署后的版本号。

  2. reader_0 组件的表名和命名空间需与上传数据时配置的一致。

六、执行预测任务

执行以下命令:

flow job submit -c homo_nn_multi_label_predict.json

执行成功后,查看 homo_nn_0 组件的数据输出:

可以看到算法输出的预测结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/239877.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【运维】Kafka高可用: KRaft(不依赖zookeeper)集群搭建

文章目录 一. kafka kraft 集群介绍1. KRaft架构2. Controller 服务器3. Process Roles4. Quorum Voters 二. 集群安装1. 安装1.1. 配置1.2. 格式化 2. 启动测试2.1. 启功节点服务2.2. 测试 本文主要介绍了 kafka raft集群架构: 与旧架构的不同点,有哪些…

ISP去噪(2)_np 噪声模型

#灵感# ISP 中的去噪,都需要依赖一个噪声模型。很多平台上使用采集的raw进行calibration,可以输出这个模型,通常称为 noise profile。 名词解释: Noise profile 似乎可以翻译成“噪声档案”,其含义是某个噪声源&…

昇腾910安装驱动出错,降低Centos7.6的内核版本

零、问题描述: 在安装Atlas800-9000服务器的驱动的时候,可能会出现错误:Dkms install failed, details in : /var/log/ascend_seclog/ascend_install.log 如下所示: [rootlocalhost ~]# ./Ascend-hdk-910-npu-driver_23.0.rc3_l…

数字孪生项目的开发框架

数字孪生的开发框架提供了一套工具和API,使开发者能够创建和管理数字孪生模型。这些框架通常包括虚拟建模、仿真、数据集成和分析等功能。以下是一些常见的数字孪生开发框架,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发…

python matplotlib set_aspect

说明: # 设置轴比例相等,以获得圆柱体视角 ax.set_aspect(equal) 代码案例: import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np# 创建数据 theta np.linspace(0, 2*np.pi, 100) z np.linspace(0, 1, 100) r z**2 …

k8s集群部署及可视化kuboard 部署

目录 一.准备环境 1.准备三台服务器 2.做域名解析[集群] 3.时间同步[集群] 4.关闭防火墙与selinux[集群] 5.配置静态ip[集群] 6.关闭swap分区[集群] 7.注意: 二.docker部署[集群] 2.安装最新版 3.查看Docker版本: 4.启动Docker服务&#xff1…

maui sqlite开发一个商城加购物车的演示(3)

购物车界面及代码 <?xml version"1.0" encoding"utf-8" ?> <ContentPage xmlns"http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x"http://schemas.microsoft.com/winfx/2009/xaml"xmlns:syncfusion"clr-namesp…

基于51单片机的语音识别控制系统

0-演示视频 1-功能说明 &#xff08;1&#xff09;使用DHT11检测温湿度&#xff0c;然后用LCD12864显示&#xff0c;语音播放&#xff0c;使用STC11l08xe控制LD3320做语音识别&#xff0c; &#xff08;2&#xff09;上电时语音提示&#xff1a;欢迎使用声音识别系统&#xf…

微信小程序改变checkbox大小

.weui-cell__hd {transform: scale(0.6,0.6);} <checkbox color"#447189" />

Qt12.12

头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTime> #include <QTimer> #include <QTimerEvent> #include <QTextToSpeech> //文本转语言类QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_…

Dockerfile创建镜像--LNMP+wordpress

实验准备&#xff1a; nginx&#xff1a;172.111.0.10 docker-nginx mysql&#xff1a;172.111.0.20 docker-mysql php&#xff1a;172.111.0.30 docker-php 自定义网段&#xff1a;172.111.0.0/16mkdir nginx mysql php mv nginx-1.22.0.tar.gz wordpress-6.4.2-zh_CN.ta…

Java实现选择排序及其动图演示

选择排序是一种简单直观的排序算法。它的基本思想是每次从未排序的元素中选出最小&#xff08;或最大&#xff09;的元素&#xff0c;然后将其放到已排序的序列的末尾。具体步骤如下&#xff1a; 首先&#xff0c;找到未排序序列中的最小&#xff08;或最大&#xff09;元素&a…

Linux实用操作(超级实用)

Linux实用操作篇-上篇&#xff1a;Linux实用操作-上篇-CSDN博客 Linux实用操作篇-下篇&#xff1a;Linux实用操作篇-下篇-CSDN博客 一、各类小技巧&#xff08;快捷键&#xff09; 1.1 ctrl c 强制停止 Linux某些程序的运行&#xff0c;如果想要强制停止它&#xff0c;可以…

BigDecimald简单使用

为什么要用BigDecimal运算 在计算浮点型数据时,往往会存在数据计算失真问题 例1 2.0 - 1.9 应该等于0.1,用float类型赋值运算得出的结果为0.100000024,有问题 例2 1.8 - 1.9 应该等于 -0.1,用double类型赋值得出的结果为-0.09999999999999987,明显有问题 BigDecimal使用 BigDec…

1.6 实战:Postman请求Get接口-获取用于登录的图形验证码

上一小节我们学习了Postman的布局,对Postman有了一个整体的认知,本小节我们就来实操一下Get接口。 我们打开Postman,点击我们之前创建的请求”获取登录页验证码“。我们在地址栏里填入获取登录页验证码的接口地址。怎么查看这个接口地址呢?我们打开校园二手交易系统,打开…

scala数据类型

scala安装使用教程_一篇搞定&#xff01;-CSDN博客 1.7 Scala数据类型 # Any是所有类型的父类它定义了一些通用的方法如equals、hashCode和toString。Any有两个直接子类&#xff1a;AnyVal和AnyRef。 # AnyVal是所有值类型的父类有9个预定义的非空的值类型分别是&#xff1a;D…

leetcode-24-两两交换链表中的节点(C语言实现)

题目&#xff1a; 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&…

jsp 动物疾病诊断管理系Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 动物疾病诊断管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysq…

【Python】手把手教你用tkinter设计图书管理登录UI界面(四)

上一篇&#xff1a;【Python】手把手教你用tkinter设计图书管理登录UI界面&#xff08;三&#xff09;-CSDN博客 下一篇&#xff1a; 本文主要阐述完成“用户密码找回”&#xff0c;诸位且看我如何实现吧&#xff01; 为了方便使用“已注册用户数据库.txt”的数据&#xff0…

input、el-input输入框输入规则

一、input 只能输入框只能输入正整数&#xff0c;输入同时禁止了以0开始的数字输入&#xff0c;防止被转化为其他进制的数值。 <!-- 不能输入零时--> <input typetext οninput"valuevalue.replace(/^(0)|[^\d]/g,)"><!-- 能输入零时--> <inp…