# Optimizing Federated Learning on Non-IID Data with Reinforcement Learning - 參數設定 & 實驗結果 (2023/04/29 更新)
###### tags: `Paper`
## 參數設定
- clients
- total : 總客戶數
- per_round : 每回合抓多少客戶參與訓練
- label_distribution : 資料分布狀態
- do_test : 是否做測試
- test_partition : 測試資料佔的比例
- data
- loading : 資料載入方式 (靜態 / 動態)
- partition : 資料大小
- IID : 是否為 IID
- bias : 偏移比例
- federated_learning
- rounds : FL 訓練次數
- target_accuracy : 目標準確度
- task : 目前執行工作 (train / test)
- epochs : 在客戶端上要訓練幾個回合
- batch_size : batch 大小
- model : 根據不同的資料集,分成了 3 種不同的模型架構
## 實驗結果
### 實驗環境
CPU : Intel® Core™ i7-9700 CPU @ 3.00GHz × 8
RAM : 16 GB
GPU :
```python
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.105.17 Driver Version: 525.105.17 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... Off | 00000000:01:00.0 On | N/A |
| 56% 72C P0 40W / 120W | 1136MiB / 6144MiB | 30% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 1639 G /usr/lib/xorg/Xorg 106MiB |
| 0 N/A N/A 1797 G /usr/bin/gnome-shell 32MiB |
| 0 N/A N/A 2860 G ...9/usr/lib/firefox/firefox 152MiB |
| 0 N/A N/A 46357 C python 840MiB |
+-----------------------------------------------------------------------------+
```
### Dataset : MNIST
#### EX 1-1 : FedAvg MNIST IID
##### 參數設定
```json
{
"clients": {
"total": 100,
"per_round": 10
},
"data": {
"loading": "static",
"partition": {
"size": 600
},
"IID": true
},
"federated_learning": {
"rounds": 10000,
"target_accuracy": 0.99,
"task": "train",
"epochs": 5,
"batch_size": 10
},
"model": "MNIST",
"paths": {
"data": "./data",
"model": "./models"
},
"server": "basic"
}
```
##### 實驗結果
communication round : 51
target accuracy : 99%
test accuracy : 99.00%
```python=
[INFO][06:15:52]: **** Round 51/10000 ****
[INFO][06:15:52]: Training on client #9
[INFO][06:15:52]: Training on client #47
[INFO][06:15:52]: Training on client #7
[INFO][06:15:52]: Training on client #23
[INFO][06:15:52]: Training on client #31
[INFO][06:15:52]: Training on client #37
[INFO][06:15:52]: Training on client #5
[INFO][06:15:52]: Training on client #46
[INFO][06:15:52]: Training on client #40
[INFO][06:15:52]: Training on client #56
[INFO][06:15:54]: Reports recieved: 10
[INFO][06:15:54]: Aggregating updates
[INFO][06:15:54]: Saved global model: ./models/MNIST/global
[INFO][06:15:55]: Average accuracy: 99.00%
[INFO][06:15:55]: Target accuracy reached.
```
#### EX 1-2 : FedAvg MNIST non-IID(80/20)
##### 參數設定
```json
{
"clients": {
"total": 100,
"per_round": 10
},
"data": {
"loading": "static",
"partition": {
"size": 600
},
"IID": false,
"bias": {
"primary": 0.8,
"secondary": false
}
},
"federated_learning": {
"rounds": 10000,
"target_accuracy": 0.99,
"task": "train",
"epochs": 5,
"batch_size": 10
},
"model": "MNIST",
"paths": {
"data": "./data",
"model": "./models"
},
"server": "basic"
}
```
##### 實驗結果
communication round : 175
target accuracy : 99%
test accuracy : 99.01%
```python=
[INFO][12:50:38]: **** Round 175/10000 ****
[INFO][12:50:38]: Training on client #9
[INFO][12:50:38]: Training on client #4
[INFO][12:50:38]: Training on client #65
[INFO][12:50:38]: Training on client #74
[INFO][12:50:38]: Training on client #70
[INFO][12:50:38]: Training on client #76
[INFO][12:50:38]: Training on client #73
[INFO][12:50:38]: Training on client #97
[INFO][12:50:38]: Training on client #95
[INFO][12:50:38]: Training on client #36
[INFO][12:50:40]: Reports recieved: 10
[INFO][12:50:40]: Aggregating updates
[INFO][12:50:40]: Saved global model: ./models/MNIST/global
[INFO][12:50:42]: Average accuracy: 99.01%
[INFO][12:50:42]: Target accuracy reached.
```
#### EX 1-3 : FedAvg MNIST non-IID(50/50)
##### 參數設定
```json
{
"clients": {
"total": 100,
"per_round": 10
},
"data": {
"loading": "static",
"partition": {
"size": 600
},
"IID": false,
"bias": {
"primary": 0.5,
"secondary": false
}
},
"federated_learning": {
"rounds": 10000,
"target_accuracy": 0.99,
"task": "train",
"epochs": 5,
"batch_size": 10
},
"model": "MNIST",
"paths": {
"data": "./data",
"model": "./models"
},
"server": "basic"
}
```
##### 實驗結果
communication round : 78
target accuracy : 99%
test accuracy : 99.04%
```python=
[INFO][02:07:47]: **** Round 78/10000 ****
[INFO][02:07:47]: Training on client #69
[INFO][02:07:47]: Training on client #68
[INFO][02:07:47]: Training on client #4
[INFO][02:07:47]: Training on client #75
[INFO][02:07:47]: Training on client #85
[INFO][02:07:47]: Training on client #71
[INFO][02:07:47]: Training on client #79
[INFO][02:07:47]: Training on client #23
[INFO][02:07:47]: Training on client #84
[INFO][02:07:47]: Training on client #12
[INFO][02:07:49]: Reports recieved: 10
[INFO][02:07:49]: Aggregating updates
[INFO][02:07:49]: Saved global model: ./models/MNIST/global
[INFO][02:07:50]: Average accuracy: 99.04%
[INFO][02:07:50]: Target accuracy reached.
```
#### EX 1-4 : FedAvg MNIST non-IID(20/80)
##### 參數設定
```json
{
"clients": {
"total": 100,
"per_round": 10
},
"data": {
"loading": "static",
"partition": {
"size": 600
},
"IID": false,
"bias": {
"primary": 0.2,
"secondary": false
}
},
"federated_learning": {
"rounds": 10000,
"target_accuracy": 0.99,
"task": "train",
"epochs": 5,
"batch_size": 10
},
"model": "MNIST",
"paths": {
"data": "./data",
"model": "./models"
},
"server": "basic"
}
```
##### 實驗結果
communication round : 49
target accuracy : 99%
test accuracy : 99.00%
```python=
[INFO][02:18:33]: **** Round 49/10000 ****
[INFO][02:18:33]: Training on client #17
[INFO][02:18:33]: Training on client #82
[INFO][02:18:33]: Training on client #30
[INFO][02:18:33]: Training on client #14
[INFO][02:18:33]: Training on client #63
[INFO][02:18:33]: Training on client #83
[INFO][02:18:33]: Training on client #72
[INFO][02:18:33]: Training on client #24
[INFO][02:18:33]: Training on client #93
[INFO][02:18:33]: Training on client #13
[INFO][02:18:35]: Reports recieved: 10
[INFO][02:18:35]: Aggregating updates
[INFO][02:18:35]: Saved global model: ./models/MNIST/global
[INFO][02:18:36]: Average accuracy: 99.00%
[INFO][02:18:36]: Target accuracy reached.
```
#### EX 1-5 : kcenter MNIST IID
##### 參數設定
```json
{
"clients": {
"total": 100,
"per_round": 10
},
"data": {
"loading": "static",
"partition": {
"size": 600
},
"IID": true
},
"federated_learning": {
"rounds": 10000,
"target_accuracy": 0.99,
"task": "train",
"epochs": 5,
"batch_size": 10
},
"model": "MNIST",
"paths": {
"data": "./data",
"model": "./models"
},
"server": "basic"
}
```
##### 實驗結果
communication round : 41
target accuracy : 99%
test accuracy : 99.03%
```python=
[INFO][03:06:30]: **** Round 41/10000 ****
[WARNING][03:06:30]: Not enough unused clients
[WARNING][03:06:30]: Dumping clients for reuse
[INFO][03:06:30]: KCenter: 100 clients, 10 centers
[INFO][03:06:31]: Training on client #67
[INFO][03:06:31]: Training on client #90
[INFO][03:06:31]: Training on client #70
[INFO][03:06:31]: Training on client #50
[INFO][03:06:31]: Training on client #69
[INFO][03:06:31]: Training on client #15
[INFO][03:06:31]: Training on client #96
[INFO][03:06:31]: Training on client #14
[INFO][03:06:31]: Training on client #43
[INFO][03:06:31]: Training on client #63
[INFO][03:06:32]: Reports recieved: 10
[INFO][03:06:32]: Aggregating updates
[INFO][03:06:32]: Saved global model: ./models/MNIST/global
[INFO][03:06:34]: Average accuracy: 99.03%
[INFO][03:06:34]: Target accuracy reached.
```
#### EX 1-6 : kcenter MNIST non-IID(80/20)
##### 參數設定
```json
{
"clients": {
"total": 100,
"per_round": 10
},
"data": {
"loading": "static",
"partition": {
"size": 600
},
"IID": false,
"bias": {
"primary": 0.8,
"secondary": false
}
},
"federated_learning": {
"rounds": 10000,
"target_accuracy": 0.99,
"task": "train",
"epochs": 5,
"batch_size": 10
},
"model": "MNIST",
"paths": {
"data": "./data",
"model": "./models"
},
"server": "basic"
}
```
##### 實驗結果
communication round : 172
target accuracy : 99%
test accuracy : 99.00%
```python=
[INFO][03:18:38]: **** Round 172/10000 ****
[INFO][03:18:38]: KCenter: 90 clients, 10 centers
[INFO][03:18:38]: Training on client #44
[INFO][03:18:38]: Training on client #85
[INFO][03:18:38]: Training on client #48
[INFO][03:18:38]: Training on client #33
[INFO][03:18:38]: Training on client #69
[INFO][03:18:38]: Training on client #43
[INFO][03:18:38]: Training on client #67
[INFO][03:18:38]: Training on client #23
[INFO][03:18:38]: Training on client #36
[INFO][03:18:38]: Training on client #81
[INFO][03:18:40]: Reports recieved: 10
[INFO][03:18:40]: Aggregating updates
[INFO][03:18:40]: Saved global model: ./models/MNIST/global
[INFO][03:18:41]: Average accuracy: 99.00%
[INFO][03:18:41]: Target accuracy reached.
```
#### EX 1-7 : kcenter MNIST non-IID(50/50)
##### 參數設定
```json
{
"clients": {
"total": 100,
"per_round": 10
},
"data": {
"loading": "static",
"partition": {
"size": 600
},
"IID": false,
"bias": {
"primary": 0.5,
"secondary": false
}
},
"federated_learning": {
"rounds": 10000,
"target_accuracy": 0.99,
"task": "train",
"epochs": 5,
"batch_size": 10
},
"model": "MNIST",
"paths": {
"data": "./data",
"model": "./models"
},
"server": "basic"
}
```
##### 實驗結果
communication round : 53
target accuracy : 99%
test accuracy : 99.04%
```python=
[INFO][03:37:05]: **** Round 53/10000 ****
[INFO][03:37:05]: KCenter: 80 clients, 10 centers
[INFO][03:37:05]: Training on client #11
[INFO][03:37:05]: Training on client #58
[INFO][03:37:05]: Training on client #32
[INFO][03:37:05]: Training on client #26
[INFO][03:37:05]: Training on client #16
[INFO][03:37:05]: Training on client #70
[INFO][03:37:05]: Training on client #53
[INFO][03:37:05]: Training on client #98
[INFO][03:37:05]: Training on client #62
[INFO][03:37:05]: Training on client #46
[INFO][03:37:07]: Reports recieved: 10
[INFO][03:37:07]: Aggregating updates
[INFO][03:37:07]: Saved global model: ./models/MNIST/global
[INFO][03:37:08]: Average accuracy: 99.04%
[INFO][03:37:08]: Target accuracy reached.
```
#### EX 1-8 : kcenter MNIST non-IID(20/80)
##### 參數設定
```json
{
"clients": {
"total": 100,
"per_round": 10
},
"data": {
"loading": "static",
"partition": {
"size": 600
},
"IID": false,
"bias": {
"primary": 0.2,
"secondary": false
}
},
"federated_learning": {
"rounds": 10000,
"target_accuracy": 0.99,
"task": "train",
"epochs": 5,
"batch_size": 10
},
"model": "MNIST",
"paths": {
"data": "./data",
"model": "./models"
},
"server": "kcenter"
}
```
##### 實驗結果
communication round : 44
target accuracy : 99%
test accuracy : 99.00%
```python=
[INFO][03:42:18]: **** Round 44/10000 ****
[INFO][03:42:18]: KCenter: 70 clients, 10 centers
[INFO][03:42:18]: Training on client #94
[INFO][03:42:18]: Training on client #79
[INFO][03:42:18]: Training on client #24
[INFO][03:42:18]: Training on client #62
[INFO][03:42:18]: Training on client #80
[INFO][03:42:18]: Training on client #26
[INFO][03:42:18]: Training on client #57
[INFO][03:42:18]: Training on client #74
[INFO][03:42:18]: Training on client #81
[INFO][03:42:18]: Training on client #1
[INFO][03:42:20]: Reports recieved: 10
[INFO][03:42:20]: Aggregating updates
[INFO][03:42:20]: Saved global model: ./models/MNIST/global
[INFO][03:42:21]: Average accuracy: 99.00%
[INFO][03:42:21]: Target accuracy reached.
```
### Dataset : FashionMNIST
#### EX 2-1 : FedAvg FashionMNIST IID
##### 參數設定
```json
{
"clients": {
"total": 100,
"per_round": 10
},
"data": {
"loading": "static",
"partition": {
"size": 600
},
"IID": true
},
"federated_learning": {
"rounds": 10000,
"target_accuracy": 0.85,
"task": "train",
"epochs": 5,
"batch_size": 10
},
"model": "FashionMNIST",
"paths": {
"data": "./data",
"model": "./models"
},
"server": "basic"
}
```
##### 實驗結果
communication round : 10000
target accuracy : 85%
test accuracy : 18.78%
```python=
[INFO][14:32:15]: **** Round 10000/10000 ****
[INFO][14:32:15]: Training on client #26
[INFO][14:32:15]: Training on client #79
[INFO][14:32:15]: Training on client #88
[INFO][14:32:15]: Training on client #34
[INFO][14:32:15]: Training on client #21
[INFO][14:32:15]: Training on client #64
[INFO][14:32:15]: Training on client #62
[INFO][14:32:15]: Training on client #92
[INFO][14:32:15]: Training on client #8
[INFO][14:32:15]: Training on client #61
[INFO][14:32:17]: Reports recieved: 10
[INFO][14:32:17]: Aggregating updates
[INFO][14:32:17]: Saved global model: ./models/FashionMNIST/global
[INFO][14:32:19]: Average accuracy: 18.78%
```
(2023/04/29 更新部分)
#### EX 2-2 : FedAvg FashionMNIST non-IID(80/20)
##### 參數設定
```json
{
"clients": {
"total": 100,
"per_round": 10
},
"data": {
"loading": "static",
"partition": {
"size": 600
},
"IID": false,
"bias": {
"primary": 0.8,
"secondary": false
}
},
"federated_learning": {
"rounds": 10000,
"target_accuracy": 0.85,
"task": "train",
"epochs": 5,
"batch_size": 10
},
"model": "FashionMNIST",
"paths": {
"data": "./data",
"model": "./models"
},
"server": "basic"
}
```
##### 實驗結果
communication round : 10000
target accuracy : 85%
test accuracy : 14.89%
```python=
[INFO][19:43:13]: **** Round 10000/10000 ****
[INFO][19:43:13]: Training on client #87
[INFO][19:43:13]: Training on client #28
[INFO][19:43:13]: Training on client #5
[INFO][19:43:13]: Training on client #62
[INFO][19:43:13]: Training on client #45
[INFO][19:43:13]: Training on client #98
[INFO][19:43:13]: Training on client #72
[INFO][19:43:13]: Training on client #37
[INFO][19:43:13]: Training on client #85
[INFO][19:43:13]: Training on client #32
[INFO][19:43:15]: Reports recieved: 10
[INFO][19:43:15]: Aggregating updates
[INFO][19:43:15]: Saved global model: ./models/FashionMNIST/global
[INFO][19:43:17]: Average accuracy: 14.89%
```
##### 調整 : 因為訓練時總是會和 target accuracy 相差 3%~5% ,所以這裡考慮先將 target accuracy 下調 5% ,看看這樣子是否就能達到 target accuracy
#### EX 2-3 : FedAvg FashionMNIST IID (target accuracy : 80%)
##### 參數設定
```json
{
"clients": {
"total": 100,
"per_round": 10
},
"data": {
"loading": "static",
"partition": {
"size": 600
},
"IID": true
},
"federated_learning": {
"rounds": 10000,
"target_accuracy": 0.80,
"task": "train",
"epochs": 5,
"batch_size": 10
},
"model": "FashionMNIST",
"paths": {
"data": "./data",
"model": "./models"
},
"server": "basic"
}
```
##### 實驗結果
communication round : 9
target accuracy : 80%
test accuracy : 80.04%
```python=
[INFO][01:40:21]: **** Round 9/10000 ****
[INFO][01:40:21]: Training on client #65
[INFO][01:40:21]: Training on client #12
[INFO][01:40:21]: Training on client #58
[INFO][01:40:21]: Training on client #73
[INFO][01:40:21]: Training on client #9
[INFO][01:40:21]: Training on client #75
[INFO][01:40:21]: Training on client #63
[INFO][01:40:21]: Training on client #97
[INFO][01:40:21]: Training on client #77
[INFO][01:40:21]: Training on client #23
[INFO][01:40:23]: Reports recieved: 10
[INFO][01:40:23]: Aggregating updates
[INFO][01:40:23]: Saved global model: ./models/FashionMNIST/global
[INFO][01:40:25]: Average accuracy: 80.04%
```
#### EX 2-4 : kcenter FashionMNIST IID (target accuracy : 80%)
##### 參數設定
```json
{
"clients": {
"total": 100,
"per_round": 10
},
"data": {
"loading": "static",
"partition": {
"size": 600
},
"IID": true
},
"federated_learning": {
"rounds": 10000,
"target_accuracy": 0.80,
"task": "train",
"epochs": 5,
"batch_size": 10
},
"model": "FashionMNIST",
"paths": {
"data": "./data",
"model": "./models"
},
"server": "kcenter"
}
```
##### 實驗結果
communication round : 4
target accuracy : 80%
test accuracy : 80.35%
```python=
[INFO][01:20:00]: **** Round 4/10000 ****
[INFO][01:20:00]: KCenter: 70 clients, 10 centers
[INFO][01:20:00]: Training on client #23
[INFO][01:20:00]: Training on client #79
[INFO][01:20:00]: Training on client #59
[INFO][01:20:00]: Training on client #71
[INFO][01:20:00]: Training on client #45
[INFO][01:20:00]: Training on client #3
[INFO][01:20:00]: Training on client #22
[INFO][01:20:00]: Training on client #14
[INFO][01:20:00]: Training on client #21
[INFO][01:20:00]: Training on client #84
[INFO][01:20:02]: Reports recieved: 10
[INFO][01:20:02]: Aggregating updates
[INFO][01:20:02]: Saved global model: ./models/FashionMNIST/global
[INFO][01:20:04]: Average accuracy: 80.35%
```
#### EX 2-5 : FedAvg FashionMNIST non-IID(80/20) (target accuracy : 80) (add FC)
##### 參數設定
```json
{
"clients": {
"total": 100,
"per_round": 10
},
"data": {
"loading": "static",
"partition": {
"size": 600
},
"IID": false,
"bias": {
"primary": 0.8,
"secondary": false
}
},
"federated_learning": {
"rounds": 10000,
"target_accuracy": 0.80,
"task": "train",
"epochs": 5,
"batch_size": 10
},
"model": "FashionMNIST",
"paths": {
"data": "./data",
"model": "./models"
},
"server": "basic"
}
```
##### 實驗結果
communication round : 63
target accuracy : 80%
test accuracy : 80.44%
```python=
[INFO][14:49:31]: **** Round 63/10000 ****
[INFO][14:49:31]: Training on client #28
[INFO][14:49:31]: Training on client #57
[INFO][14:49:31]: Training on client #75
[INFO][14:49:31]: Training on client #74
[INFO][14:49:31]: Training on client #30
[INFO][14:49:31]: Training on client #10
[INFO][14:49:31]: Training on client #70
[INFO][14:49:31]: Training on client #80
[INFO][14:49:31]: Training on client #38
[INFO][14:49:31]: Training on client #37
[INFO][14:49:34]: Reports recieved: 10
[INFO][14:49:34]: Aggregating updates
[INFO][14:49:34]: Saved global model: ./models/FashionMNIST/global
[INFO][14:49:35]: Average accuracy: 80.44%
```
### Dataset : CIFAR-10
#### EX 3-1 : CIFAR-10 IID
##### 參數設定
```json
{
"clients": {
"total": 100,
"per_round": 10
},
"data": {
"loading": "static",
"partition": {
"size": 600
},
"IID": true
},
"federated_learning": {
"rounds": 10000,
"target_accuracy": 0.55,
"task": "train",
"epochs": 5,
"batch_size": 10
},
"model": "CIFAR-10",
"paths": {
"data": "./data",
"model": "./models"
},
"server": "basic"
}
```
##### 實驗結果
communication round : 10000
target accuracy : 55%
test accuracy : 17.53%
```python=
[INFO][22:50:37]: **** Round 10000/10000 ****
[INFO][22:50:37]: Training on client #98
[INFO][22:50:37]: Training on client #27
[INFO][22:50:37]: Training on client #69
[INFO][22:50:37]: Training on client #84
[INFO][22:50:37]: Training on client #52
[INFO][22:50:37]: Training on client #82
[INFO][22:50:37]: Training on client #50
[INFO][22:50:37]: Training on client #90
[INFO][22:50:37]: Training on client #83
[INFO][22:50:37]: Training on client #61
[INFO][22:50:39]: Reports recieved: 10
[INFO][22:50:39]: Aggregating updates
[INFO][22:50:39]: Saved global model: ./models/CIFAR-10/global
[INFO][22:50:40]: Average accuracy: 17.53%
```
##### 調整 : 因為訓練時總是會和 target accuracy 相差 2%~3% ,所以這裡考慮先將 target accuracy 下調 3% ,看看這樣子是否就能達到 target accuracy
#### EX 3-2 : CIFAR-10 IID (target accuracy : 52%)
##### 參數設定
```json
{
"clients": {
"total": 100,
"per_round": 10
},
"data": {
"loading": "static",
"partition": {
"size": 600
},
"IID": true
},
"federated_learning": {
"rounds": 10000,
"target_accuracy": 0.52,
"task": "train",
"epochs": 5,
"batch_size": 10
},
"model": "CIFAR-10",
"paths": {
"data": "./data",
"model": "./models"
},
"server": "basic"
}
```
##### 實驗結果
communication round : 78
target accuracy : 52%
test accuracy : 52.16%
```python=
[INFO][00:28:46]: **** Round 78/10000 ****
[INFO][00:28:46]: Training on client #77
[INFO][00:28:46]: Training on client #99
[INFO][00:28:46]: Training on client #34
[INFO][00:28:46]: Training on client #43
[INFO][00:28:46]: Training on client #35
[INFO][00:28:46]: Training on client #91
[INFO][00:28:46]: Training on client #41
[INFO][00:28:46]: Training on client #4
[INFO][00:28:46]: Training on client #24
[INFO][00:28:46]: Training on client #39
[INFO][00:28:48]: Reports recieved: 10
[INFO][00:28:48]: Aggregating updates
[INFO][00:28:48]: Saved global model: ./models/CIFAR-10/global
[INFO][00:28:49]: Average accuracy: 52.16%
```
#### EX 3-3 : kcenter CIFAR-10 IID (target accuracy : 52%)
##### 參數設定
```json
{
"clients": {
"total": 100,
"per_round": 10
},
"data": {
"loading": "static",
"partition": {
"size": 600
},
"IID": true
},
"federated_learning": {
"rounds": 10000,
"target_accuracy": 0.52,
"task": "train",
"epochs": 5,
"batch_size": 10
},
"model": "CIFAR-10",
"paths": {
"data": "./data",
"model": "./models"
},
"server": "kcenter"
}
```
##### 實驗結果
communication round : 40
target accuracy : 52%
test accuracy : 52.00%
```python=
[INFO][01:10:45]: **** Round 40/10000 ****
[INFO][01:10:45]: KCenter: 10 clients, 10 centers
[INFO][01:10:45]: Training on client #63
[INFO][01:10:45]: Training on client #18
[INFO][01:10:45]: Training on client #81
[INFO][01:10:45]: Training on client #98
[INFO][01:10:45]: Training on client #93
[INFO][01:10:45]: Training on client #5
[INFO][01:10:45]: Training on client #68
[INFO][01:10:45]: Training on client #65
[INFO][01:10:45]: Training on client #23
[INFO][01:10:45]: Training on client #88
[INFO][01:10:46]: Reports recieved: 10
[INFO][01:10:46]: Aggregating updates
[INFO][01:10:46]: Saved global model: ./models/CIFAR-10/global
[INFO][01:10:48]: Average accuracy: 52.00%
```
#### EX 3-4 : kcenter CIFAR-10 non-IID(80/20) (target accuracy : 52%)
##### 參數設定
```json
{
"clients": {
"total": 100,
"per_round": 10
},
"data": {
"loading": "static",
"partition": {
"size": 600
},
"IID": false,
"bias": {
"primary": 0.8,
"secondary": false
}
},
"federated_learning": {
"rounds": 10000,
"target_accuracy": 0.52,
"task": "train",
"epochs": 5,
"batch_size": 10
},
"model": "CIFAR-10",
"paths": {
"data": "./data",
"model": "./models"
},
"server": "kcenter"
}
```
##### 實驗結果
communication round : 10000
target accuracy : 52%
test accuracy : 10.00%
```python=
[INFO][11:39:52]: **** Round 10000/10000 ****
[INFO][11:39:52]: KCenter: 10 clients, 10 centers
[INFO][11:39:52]: Training on client #38
[INFO][11:39:52]: Training on client #24
[INFO][11:39:52]: Training on client #80
[INFO][11:39:52]: Training on client #73
[INFO][11:39:52]: Training on client #10
[INFO][11:39:52]: Training on client #29
[INFO][11:39:52]: Training on client #64
[INFO][11:39:52]: Training on client #71
[INFO][11:39:52]: Training on client #11
[INFO][11:39:52]: Training on client #15
[INFO][11:39:53]: Reports recieved: 10
[INFO][11:39:53]: Aggregating updates
[INFO][11:39:53]: Saved global model: ./models/CIFAR-10/global
[INFO][11:39:55]: Average accuracy: 10.00%
```