DiNN学习笔记2-代码部分

it2026-09-27  14

DiNN学习笔记2-代码部分

整体流程1.设置函数 our_default_gate_bootstrapping_parameters()函数 new_random_gate_bootstrapping_secret_keyset() 2.读入数据3.初始化变量4.进行同态预测隐藏层的计算输出层的计算 5.测试结果统计6.释放空间参考资料

整体流程

函数整体流程图如下:

1.设置

设置步骤整体流程如下:

参数准备和初始化步骤中初始化了如下参数:

函数 our_default_gate_bootstrapping_parameters()

函数位置:cpp/nn.cpp输入参数:int minimum_lambda //安全系数 λ返回值:TFheGateBootstrappingParameterSet //自举密钥参数的结构体 const int32_t ks_tconst int32_t ks_basebitconst LweParams *const in_out_params //LWE 参数const TGswParams *const tgsw_params //TGSW 参数 函数功能:自举密钥参数集设置函数步骤: 安全参数超过128报错:仅支持128比特的安全性进行基本参数初始化 n-LWE的维度:static const int n = SEC_PARAMS_n //600N-LWE的维度:static const int N = SEC_PARAMS_N //1024多项式次数k:static const int k = SEC_PARAMS_k //1安全参数的标准差:static const double max_stdev = SEC_PARAMS_STDDEV //pow(2., -20) 进行自举所需参数初始化 自举密钥的基:static const int bk_Bgbit = SEC_PARAMS_BK_BASEBITS //10自举密钥的长度:static const int bk_l = SEC_PARAMS_BK_LENGTH //3自举密钥的标准差:static const double bk_stdev = SEC_PARAMS_BK_STDDEV //pow(2., -36) 进行密钥转换所需参数初始化 密钥转换密钥的基:static const int ks_basebit = SEC_PARAMS_KS_BASEBITS //1密钥转换密钥的长度:static const int ks_length = SEC_PARAMS_KS_LENGTH //18密钥转换密钥的标准差:static const double ks_stdev = SEC_PARAMS_KS_STDDEV //pow(2., -25) 使用之前初始化的参数形成 LWE, TLWE, TGSW 的参数集 LweParams *params_in = new_LweParams(n, ks_stdev, max_stdev)TLweParams *params_accum = new_TLweParams(N, k, bk_stdev, max_stdev)TGswParams *params_bk = new_TGswParams(bk_l, bk_Bgbit, params_accum) 形成垃圾回收站GC TfheGarbageCollector::register_param(params_in)TfheGarbageCollector::register_param(params_accum)TfheGarbageCollector::register_param(params_bk) 形成并返回结构体 return new TFheGateBootstrappingParameterSet(ks_length, ks_basebit, params_in, params_bk)

函数 new_random_gate_bootstrapping_secret_keyset()

函数位置:*cpp/tfhe/tfhe_gate_bootstrapping.cpp输入参数:const TFheGateBootstrappingParameterSet *params //自举密钥参数返回值:TFheGateBootstrappingSecretKeySet //自举密钥的结构体 const TFheGateBootstrappingParameterSet* const params //参数集合const LweBootstrappingKey* const bk //自举密钥const LweBootstrappingKeyFFT* const bkFFT //自举密钥 FFT 形式const LweKey* lwe_key //LWE 密钥const TGswKey* tgsw_key //TGSW 密钥 函数功能:生成一个随机的自举密钥函数步骤: 生成 LWE 密钥 调用 new_LweKey():使用参数 in_out_params调用 lweKeyGen() 生成 TGSW 密钥 调用 new_TGswKey():使用参数 tgsw_params调用 tGswKeyGen() 生成自举密钥 调用 new_LweBootstrappingKey():使用参数 ks_t, ks_basebit, in_out_params, tgsw_params调用 tfhe_createLweBootstrappingKey() 生成自举密钥的 FFT 形式:LweBootstrappingKeyFFT *bkFFT = new_LweBootstrappingKeyFFT(bk)

2.读入数据

读入数据步骤整体流程如下:

用于神经网络的图像数据、神经元中的权重与偏置、正确的标签,均由对应文件读入

3.初始化变量

进行一些相关变量的初始化

4.进行同态预测

进行同态预测步骤整体流程如下:

该方案中神经网络的拓扑结构:

该方案的整体流程:

隐藏层的计算

输出层的计算

5.测试结果统计

测试结果统计步骤整体流程如下:

该步骤进行结果的统计和输出

6.释放空间

释放空间步骤整体流程如下:

参考资料

代码:https://github.com/mminelli/dinn

本文仅供个人学习使用

1024凑个热闹

最新回复(0)