利用FATE联邦学习平台,实现基于卷积神经网络的手写字体Mnist识别

本文介绍了如何利用FATE V1.8 StandAlone环境,通过联邦学习实现Mnist手写字体的卷积神经网络识别。详细讲述了两种方案:一是使用csv数据进行训练,涉及数据下载、切分、上传和模型提交;二是直接使用图像数据集,包括数据下载、查看、本地文件路径绑定、模型配置和训练。
摘要由CSDN通过智能技术生成

一、项目简介

        FATE联邦学习实现基于卷积神经网络的手写字体Mnist识别算法。实验环境:FATE V1.8 StandAlone、CentOS 7、FinalShell。

        关于卷积神经网络的手写字体识别算法的基本原理,可参考李沐老师的《动手学深度学习》一书,本文注重利用FATE平台实现基于卷积神经网络的手写字体Mnist识别算法的实践,因此对于理论部分不做过多介绍。

二、方案一:使用csv数据进行手写字体识别训练

1.数据下载

mnist数据集的csv文件下载链接:MNIST in CSV (kaggle.com)

2.切分与上传数据

2.1 切分数据

2.1.1 切分训练数据

Mnist共计60000条数据,这里将其切分成两等份,host与guest各30000条。切分代码如下:

import pandas as pd

# 读取整个 CSV 训练文件
df = pd.read_csv('../mnist_train.csv')
# 切分训练数据集
host_train = df.iloc[:30000]
guest_train = df.iloc[30000:60000]
# 输出切分后的 CSV 训练文件
host_train.to_csv('host_train.csv', index=True, encoding='utf-8')
guest_train.to_csv('guest_train.csv', index=True, encoding='utf-8')
2.2.2切分测试数据

Mnist共计10000条数据,这里按照测试数据占训练数据10%的比例,取6000条作为测试数据。切分代码如下:

# 读取整个 CSV 测试文件
df_test = pd.read_csv('../mnist_test.csv')
# 切分测试数据集
host_test = df_test.iloc[:3000]
guest_train = df_test.iloc[3000:6000]
# 输出切分后的 CSV 测试文件
host_test.to_csv('host_test.csv', index=True, encoding='utf-8')
guest_train.to_csv('guest_test.csv', index=True, encoding='utf-8')

2.2 host方上传训练与测试数据配置文件——upload_data_host_train_conf.json、upload_data_host_test_conf.json

//训练数据
{
//路径位置
    "file": "",	
//是否包含表头
    "head": 1,	
// 分区数
    "partition": 8,	
// 工作模式  0——单机版   1——集群版
    "work_mode": 0,
// DTable_Name
    "table_name": "minist_host_train",
// DTable_NameSpace
    "namespace": "ex_minist_host_train"	// DTable格式的表名对应的命名空间
}

//训练数据
{    
    "file": "/root/MyData/TempData/host_train.csv",    			"table_name": "minist_host_train",
    "namespace": "ex_minist_host_train",
    "head": 1,
    "partition": 8
}
//测试数据
{    
	"file": "/root/MyData/TempData/host_test.csv",
	"table_name": "minist_host_test",
	"namespace": "ex_minist_host_test",
	"head": 1,
	"partition": 8
}

2.3 guest方上传数据配置文件——upload_data_guest_train_conf.json、upload_data_guest_test_conf.json

// 训练数据
{
    "file": "/root/MyData/TempData/guest_train.csv",
    "table_name": "minist_guest_train",
    "namespace": "ex_minist_guest_train",
    "head": 1,
    "partition": 8
}


//测试数据
{
    "file": "/root/MyData/TempData/guest_test.csv",
    "table_name": "minist_guest_test",
    "namespace": "ex_minist_guest_test",
    "head": 1,
    "partition": 8
}

2.4 上传数据shell脚本——通过fate_flow_client.py进行上传

# 上传host训练数据
python /root/standalone_fate_install_1.8.0/fateflow/python/fate_flow/fate_flow_client.py -f upload -c /root/MyCode/upload/upload_data_host_train_conf.json
# 上传host测试数据
python /root/standalone_fate_install_1.8.0/fateflow/python/fate_flow/fate_flow_client.py -f upload -c /root/MyCode/upload/upload_data_host_test_conf.json
# 上传guest训练数据
python /root/standalone_fate_install_1.8.0/fateflow/python/fate_flow/fate_flow_client.py -f upload -c /root/MyCode/upload/upload_data_guest_train_conf.json
# 上传guest测试数据
python /root/standalone_fate_install_1.8.0/fateflow/python/fate_flow/fate_flow_client.py -f upload -c /root/MyCode/upload/upload_data_guest_test_conf.json

3. 查看并修改fate自带的卷积神经网络

1.路径及文件名如下

2.仔细分析一下官方例程

{
  // 初始化dsl版本号
  "dsl_version": 2,
  "initiator": {
      "role": "guest",
      "party_id": 9999
  },
  // 参与方
  "role": {
      "arbiter": [
          10000
      ],
      "host": [
          10000,
          9999
      ],
      "guest": [
          9999
      ]
  },
  "component_parameters": {
    // common —— 共享参数,所有角色都适用
      "common": {
          "homo_nn_0": {
              "api_version": 2,
          
  • 25
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值