Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PySyft工人过度装配_Python_Machine Learning_Pytorch_Federated Learning_Pysyft - Fatal编程技术网

Python PySyft工人过度装配

Python PySyft工人过度装配,python,machine-learning,pytorch,federated-learning,pysyft,Python,Machine Learning,Pytorch,Federated Learning,Pysyft,我尝试用pysyft训练图像分类(cifar10)。我的trainsetup有10个工作人员,每个工作人员都可以获得800到1200张数据集的图像 我的问题是,在大约250-300个历次之后,列车损失约为0.005,模型停止改进,尽管测试精度仅为45%,损失增加1.5->8.5。 我在500张图片上对100名工人进行了同样的测试,结果以32%停止。 此外,实现是模型和FL框架之间比较的一部分,因此模型不能更改,数据将在本地加载并转换为数据加载器。 因此,我对Pytork和PySyft非常缺乏经验

我尝试用pysyft训练图像分类(cifar10)。我的trainsetup有10个工作人员,每个工作人员都可以获得800到1200张数据集的图像

我的问题是,在大约250-300个历次之后,列车损失约为0.005,模型停止改进,尽管测试精度仅为45%,损失增加1.5->8.5。 我在500张图片上对100名工人进行了同样的测试,结果以32%停止。 此外,实现是模型和FL框架之间比较的一部分,因此模型不能更改,数据将在本地加载并转换为数据加载器。 因此,我对Pytork和PySyft非常缺乏经验,这可能是因为我在训练模型时犯了一些错误,尽管我试图尽可能接近示例

我在没有PySyft的情况下训练了这个模型,它达到了85%左右,所以我认为我的数据加载器和模型应该不是问题所在。对我来说,在培训期间,工人们似乎过度依赖自己的数据

有没有一种方法可以防止工人过度适应,或者用全局模型而不是工人来计算损失

培训师:


def fl_列(参数、型号、设备、联邦_列加载器、优化器、历元、日志):
模型列车()
结果=[]
指标=[]
t1=时间。时间()
cel=nn.CrossEntropyLoss()
对于枚举(联邦列车加载器)中的批处理idx(数据,目标):#
class CNN(nn.Module):

    def __init__(self):
        super(CNN, self).__init__()

        self.conv_layer = nn.Sequential(

            # Conv Layer block 1
            nn.Conv2d(in_channels=3, out_channels=32, kernel_size=3),
            nn.ReLU(inplace=True),
            nn.MaxPool2d((2,2)),

            # Conv Layer block 2
            nn.Conv2d(in_channels=32, out_channels=64, kernel_size=3),
            nn.ReLU(inplace=True),
            nn.MaxPool2d((2,2)),

            # Conv Layer block 3
            nn.Conv2d(in_channels=64, out_channels=64, kernel_size=3),
            nn.ReLU(inplace=True),
        )

        self.fc_layer = nn.Sequential(
            nn.Linear(1024, 64),
            nn.ReLU(inplace=True),
            nn.Linear(64, 10)
        )


    def forward(self, x):
        # CNN layers
        x = self.conv_layer(x)

        # flatten
        x = x.view(-1, 1024)

        # NN layer
        x = self.fc_layer(x)
        return F.log_softmax(x, dim=1)
model = CNN().to(device)
optimizer = optim.SGD(model.parameters(), lr=0.02) # TODO momentum is not supported at the moment
log = {}
for epoch in range(1, args.epochs + 1):
    log = fl_train(args, model, device, f_dataloader, optimizer, epoch, log)
    if epoch % 20 == 0:
      log = test(args, model, device, test_loader, epoch, log)
    if epoch % 100 == 0:
      store_results(log, model)
....
Train Epoch: 317 [0/10400 (0%)] Loss: 0.005194
Train Epoch: 317 [3000/10400 (29%)] Loss: 0.003882
Train Epoch: 317 [6000/10400 (58%)] Loss: 0.003100
Train Epoch: 317 [9000/10400 (87%)] Loss: 0.004298
Train Epoch: 318 [0/10400 (0%)] Loss: 0.007426
Train Epoch: 318 [3000/10400 (29%)] Loss: 0.002255
Train Epoch: 318 [6000/10400 (58%)] Loss: 0.003835
Train Epoch: 318 [9000/10400 (87%)] Loss: 0.005277
Train Epoch: 319 [0/10400 (0%)] Loss: 0.006207
Train Epoch: 319 [3000/10400 (29%)] Loss: 0.003562
Train Epoch: 319 [6000/10400 (58%)] Loss: 0.001904
Train Epoch: 319 [9000/10400 (87%)] Loss: 0.002644
Train Epoch: 320 [0/10400 (0%)] Loss: 0.007491
Train Epoch: 320 [3000/10400 (29%)] Loss: 0.003794
Train Epoch: 320 [6000/10400 (58%)] Loss: 0.002643
Train Epoch: 320 [9000/10400 (87%)] Loss: 0.002981
Test set: Average loss: 9.1279, Accuracy: 458/1000 (46%)

Train Epoch: 321 [0/10400 (0%)] Loss: 0.007153
Train Epoch: 321 [3000/10400 (29%)] Loss: 0.004265
Train Epoch: 321 [6000/10400 (58%)] Loss: 0.002708
Train Epoch: 321 [9000/10400 (87%)] Loss: 0.002518
Train Epoch: 322 [0/10400 (0%)] Loss: 0.006285
Train Epoch: 322 [3000/10400 (29%)] Loss: 0.002357
Train Epoch: 322 [6000/10400 (58%)] Loss: 0.002465
Train Epoch: 322 [9000/10400 (87%)] Loss: 0.002406
Train Epoch: 323 [0/10400 (0%)] Loss: 0.005361
Train Epoch: 323 [3000/10400 (29%)] Loss: 0.004807
Train Epoch: 323 [6000/10400 (58%)] Loss: 0.001903
Train Epoch: 323 [9000/10400 (87%)] Loss: 0.003711
Train Epoch: 324 [0/10400 (0%)] Loss: 0.006609
....