第一周学习--联邦学习

OUC读研--第一周

目录

1、课程学习

2、fedavg的算法实现

关于代码详解

1、client

__init__ 方法

local_train 方法

2、server

3、get_dataset

函数定义

数据集加载

MNIST 数据集

CIFAR-10 数据集

返回值

使用示例

4、 main

代码解释

可能的改进点

5、models

3、搭建federal learning 的框架(已完成)

4、学习pytorch(学习ing)

5、阅读文献

1、课程学习

  • 1.王树森从技术的角度讲解Introduction to Federated Learning 

https://www.youtube.com/watch?v=STxtRucv_zo

  • 2.李沐 

00 预告【动手学深度学习v2】_哔哩哔哩_bilibili

2、fedavg的算法实现

关于代码详解

1、client

当然,以下是一篇关于上述代码的汇报,主要介绍了代码的功能、结构以及关键部分的解释。


代码汇报:Client类解析

一、引言

本报告旨在详细解析Client类,该类是联邦学习或分布式学习框架中的一个重要组件。它负责处理单个客户端的本地模型训练、数据划分及配置管理。代码通过Python实现,并依赖于PyTorch框架进行模型操作。

二、代码结构概述

Client类通过定义一个初始化方法__init__和潜在的其他方法(未在提供的代码段中显示)来实现其功能。__init__方法接收多个参数,包括配置(conf)、模型(model)、训练数据集(train_dataset)以及客户端ID(id,默认为-1)。

三、关键部分解析

  1. 初始化方法 __init__

    • 参数接收:接收四个参数,分别是配置信息(conf)、模型(model)、训练数据集(train_dataset)和客户端ID(id)。
    • 模型初始化:通过调用models.get_model(self.conf["model_name"])获取指定名称的模型实例,并将其赋值给self.local_model。这表明models模块需要包含一个能够根据名称获取对应模型的函数。
    • 客户端ID设置:将传入的客户端ID赋值给self.client_id
    • 训练数据集划分:根据配置中指定的模型数量(no_models),将训练数据集均匀划分为多个部分,每个客户端负责一部分数据的训练。划分逻辑是通过计算每个客户端应拥有的数据索引范围来实现的。
    • 训练数据加载器:基于划分的索引范围,构建了一个训练数据加载器(self.train_loader)。虽然代码段未直接展示如何创建加载器,但可以推测它使用了PyTorch的DataLoader类,并可能结合了自定义的Dataset类。
  2. 数据划分逻辑

    • 使用all_range = list(range(len(self.train_dataset)))获取一个包含所有训练数据索引的列表。
    • 根据客户端ID和每个客户端应处理的数据量(data_len),计算出当前客户端应处理的数据索引范围train_indices

四、潜在改进与建议

  • 异常处理:在代码中没有看到异常处理机制,例如当conf中缺少model_nameno_models等关键配置项时,应添加相应的异常处理逻辑,以提高代码的健壮性。
  • 数据加载器实现:虽然代码片段未展示train_loader的具体实现,但建议在使用DataLoader时考虑批处理大小、打乱数据等参数,以优化训练效果。
  • 模型参数共享:在联邦学习场景中,Client类可能还需要实现与服务器进行模型参数同步的逻辑。这通常涉及到模型参数的序列化、发送和接收等操作。

五、结论

Client类是分布式学习或联邦学习框架中的关键组件,负责在单个客户端上执行模型的本地训练。通过初始化模型、划分训练数据集和构建训练数据加载器,Client类为模型的分布式训练提供了基础。未来可以进一步优化数据划分逻辑、加强异常处理,并实现模型参数的同步机制。


请注意,由于提供的代码片段是Client类的一部分,且没有展示类的完整实现(如训练方法、模型参数同步等),因此上述报告主要基于__init__方法及其相关逻辑进行解析和建议。

这段代码定义了一个名为Client的类,该类模拟了联邦学习中的一个客户端。在联邦学习中,多个客户端(通常是不同的设备或数据源)在本地训练模型,然后将模型更新(而非原始数据)发送到服务器进行聚合,以保护数据的隐私。下面是对每段代码的具体解释:

__init__ 方法

  • __init__(self, conf, model, train_dataset, id = -1): 这是Client类的构造函数,用于初始化客户端实例。
    • conf: 一个配置字典,包含了模型名称、学习率、动量、本地训练轮次、批次大小、模型总数等配置信息。
    • model: 这里传入的是全局模型的引用,但在这个构造函数中实际上并未直接使用它,因为每个客户端都会基于配置中的模型名称创建一个新的本地模型。
    • train_dataset: 训练数据集,客户端将从中划分出属于自己的部分数据进行训练。
    • id: 客户端的ID,用于划分数据集。如果未指定,默认为-1(但在实际使用中,应该为每个客户端分配一个唯一的ID)。
  • 在构造函数内部,首先根据配置中的模型名称创建了一个本地模型self.local_model
  • 然后,根据客户端ID和总模型数self.conf['no_models'],从整个训练数据集中划分出属于当前客户端的数据子集,并使用这些数据子集创建一个数据加载器self.train_loader

local_train 方法

  • local_train(self, model): 这个方法用于在客户端上执行本地训练。注意,虽然方法名中有model参数,但这个方法实际上并不直接使用传入的model参数来训练,而是使用self.local_model进行训练。model参数用于在训练结束后计算本地模型与全局模型之间的差异。

  • 首先,将全局模型的参数复制到本地模型中,以便在本地数据集上进行训练。

  • 创建一个优化器optimizer,用于优化本地模型的参数。

  • 接着,将本地模型设置为训练模式,并执行配置的本地训练轮次self.conf["local_epochs"]。在每一轮中,遍历数据加载器提供的批次数据,执行前向传播、计算损失、反向传播和参数更新。

  • 如果系统支持CUDA,则将数据和目标张量移动到GPU上。

  • 在所有本地训练轮次完成后,计算本地模型与全局模型之间的差异(即每个参数的差值),并将这些差异存储在字典diff中返回。这些差异将被发送到服务器,用于更新全局模型。

总之,Client类模拟了联邦学习中的一个客户端,负责在本地数据集上训练模型,并计算本地模型与全局模型之间的差异,以便在服务器上进行聚合。

2、server

这段代码定义了一个名为 get_model 的函数,它根据传入的模型名称(name)和是否使用预训练模型(pretrained)来加载并返回相应的PyTorch模型。这个函数支持多种常见的预训练模型,包括ResNet、DenseNet、AlexNet、VGG、Inception_v3 和 GoogLeNet。如果系统支持CUDA(即NVIDIA GPU),则模型会被转移到GPU上,否则模型将保留在CPU上。

这里是函数的详细解释:

  • 参数
    • name(字符串,默认为"vgg16"):指定要加载的模型名称。
    • pretrained(布尔值,默认为True):指定是否加载预训练的权重。如果为True,则加载预训练的模型;如果为False,则加载未训练的模型。
  • 功能
    • 根据name参数的值,使用torchvision.models模块中的相应函数加载模型。
    • 如果pretrained为True,则加载包含预训练权重的模型;如果为False,则加载不包含预训练权重的模型。
    • 检查系统是否支持CUDA(即是否有可用的NVIDIA GPU)。如果支持,则将模型转移到GPU上;如果不支持,则模型将保留在CPU上。
  • 返回值
    • 返回加载并可能已转移到GPU上的模型。

这个函数的设计非常灵活,允许用户根据需要加载不同的预训练模型,并自动处理模型在CPU和GPU之间的转移。这对于在PyTorch中进行深度学习实验和项目开发非常有用。

注意:在使用inception_v3模型时,通常还需要对输入图像进行特定的预处理(如调整大小、裁剪和归一化),因为inception_v3模型对输入图像的大小和格式有特定的要求。这通常是在数据加载和预处理阶段完成的,而不是在模型加载时。

3、get_dataset

您提供的代码段定义了一个名为 get_dataset 的函数,该函数根据传入的目录 dir 和数据集名称 name 来加载和预处理 MNIST 或 CIFAR-10 数据集。这个函数对于在机器学习和深度学习项目中动态加载不同数据集非常有用。下面是对这段代码的详细解释:

函数定义

python复制代码

def get_dataset(dir, name):
  • dir: 数据集将被下载并存储在此目录。
  • name: 指定要加载的数据集名称,可以是 'mnist' 或 'cifar'

数据集加载

函数内部首先检查 name 参数的值,并根据该值选择加载 MNIST 还是 CIFAR-10 数据集。

MNIST 数据集

如果 name 为 'mnist',则:

  • 使用 datasets.MNIST 从指定的 dir 加载训练集和测试集。
  • 训练集 (train_dataset) 被设置为 train=True 并允许自动下载(如果数据集尚未下载)。
  • 测试集 (eval_dataset) 被设置为 train=False,不用于训练。
  • 对两个数据集都应用了 transforms.ToTensor() 转换,将 PIL 图像或 NumPy ndarray 转换为 FloatTensor,并归一化到 [0.0, 1.0]。
CIFAR-10 数据集

如果 name 为 'cifar',则:

  • 为训练集定义了一个更复杂的转换 transform_train,包括随机裁剪、随机水平翻转、转换为张量以及归一化。这些转换有助于模型在训练过程中学习到更鲁棒的特征。
  • 测试集 (eval_dataset) 使用了一个简单的转换 transform_test,仅包括转换为张量和归一化,以确保评估时数据预处理的一致性。
  • 使用 datasets.CIFAR10 从指定的 dir 加载训练集和测试集,同样允许自动下载(如果数据集尚未下载)。

返回值

函数返回训练数据集 (train_dataset) 和评估数据集 (eval_dataset)。

使用示例

假设您想要将数据集加载到名为 data_dir 的目录中,并加载 CIFAR-10 数据集,您可以这样调用 get_dataset 函数:

python复制代码

train_dataset, eval_dataset = get_dataset('data_dir', 'cifar')

这将返回 CIFAR-10 的训练集和测试集,分别用于训练和评估模型。

这段代码定义了一个名为 get_dataset 的函数,它接收两个参数:dir 和 name。这个函数的目的是根据 name 参数的值('mnist' 或 'cifar'),从指定的 dir 目录中加载相应的训练集和评估集(或测试集),并对数据进行预处理。下面是对每段代码的具体解释:

  1. 导入必要的库

    python复制代码

    import torch
    from torchvision import datasets, transforms

    这里导入了 PyTorch 库(torch)以及 PyTorch Vision 库中的 datasets 和 transforms 模块。PyTorch Vision 是 PyTorch 的一个子库,提供了许多用于图像和视频数据集的加载、转换和模型架构的工具。

  2. 定义 get_dataset 函数

    python复制代码

    def get_dataset(dir, name):

    这个函数接收一个目录路径 dir 和一个数据集名称 name 作为输入,根据 name 的值加载不同的数据集。

  3. 处理 MNIST 数据集

    python复制代码

    if name=='mnist':
    train_dataset = datasets.MNIST(dir, train=True, download=True, transform=transforms.ToTensor())
    eval_dataset = datasets.MNIST(dir, train=False, transform=transforms.ToTensor())

    如果 name 参数为 'mnist',则加载 MNIST 数据集。datasets.MNIST 是 PyTorch Vision 提供的一个类,用于加载 MNIST 数据集。这里分别为训练集和评估集指定了 train=True 和 train=False,以及 download=True(如果数据集未下载,则自动下载)。同时,使用 transforms.ToTensor() 将图像数据转换为 PyTorch 张量,并进行归一化处理(自动将像素值从 [0, 255] 缩放到 [0.0, 1.0])。

  4. 处理 CIFAR 数据集

    python复制代码

    elif name=='cifar':
    # 定义训练和测试数据转换
    transform_train = transforms.Compose([...])
    transform_test = transforms.Compose([...])
    # 加载 CIFAR10 数据集
    train_dataset = datasets.CIFAR10(dir, train=True, download=True, transform=transform_train)
    eval_dataset = datasets.CIFAR10(dir, train=False, transform=transform_test)

    如果 name 参数为 'cifar',则加载 CIFAR10 数据集。对于 CIFAR 数据集,通常需要进行更复杂的数据预处理,如随机裁剪、随机水平翻转和归一化。这里使用了 transforms.Compose 来组合多个转换操作。训练集(train_dataset)和评估集(eval_dataset)分别使用了不同的转换配置,其中训练集使用了随机裁剪和随机水平翻转来增强数据,而评估集则只进行了归一化处理。

  5. 返回数据集

    python复制代码

    return train_dataset, eval_dataset

    最后,函数返回加载好的训练集和评估集。

总之,这段代码通过定义一个 get_dataset 函数,提供了一种灵活的方式来加载 MNIST 或 CIFAR10 数据集,并根据数据集的不同进行了适当的数据预处理。

4、 main

这段代码是一个简化的联邦学习(Federated Learning)框架的示例,它使用了JSON配置文件来设置实验参数,并通过模拟的服务器和客户端来执行训练过程。下面是对代码主要部分的解释和可能的改进点:

代码解释

  1. 配置文件加载:代码首先加载了一个JSON配置文件(conf_file_path),该文件包含了实验所需的各种配置,如数据集类型、模型数量、全局迭代次数等。

  2. 数据集加载:根据配置文件中的type字段,从datasets模块中加载训练集和评估集。

  3. 服务器和客户端初始化

    • 初始化一个Server对象,传入配置信息和评估数据集。
    • 根据配置中的模型数量(no_models),初始化多个Client对象,每个客户端都持有一个全局模型的副本和训练数据集的一部分。
  4. 训练过程

    • 在每个全局迭代(global_epochs)中,随机选择k个客户端进行本地训练。
    • 每个被选中的客户端执行本地训练,并返回模型更新的差异(diff)。
    • 服务器收集这些差异,并聚合它们以更新全局模型。
    • 使用评估数据集评估全局模型的性能,并打印出准确率和损失。

可能的改进点

  1. 错误处理和日志记录
    • 在加载配置文件、数据集或初始化服务器/客户端时,添加错误处理逻辑,以便在出现问题时能够优雅地处理。
    • 使用logging模块记录关键步骤和任何可能的错误,以便于调试和监控。
  2. 参数验证
    • 在使用配置文件中的参数之前,验证这些参数是否有效和合理(例如,no_modelsk应为正整数,global_epochs应大于0等)。
  3. 模型保存和加载
    • 在训练过程中定期保存全局模型的权重,以便在训练中断后能够恢复训练。
    • 允许从特定检查点加载模型,以便进行进一步的训练或评估。
  4. 客户端选择策略
    • 目前是随机选择客户端进行训练。可以考虑实现更复杂的客户端选择策略,如基于客户端性能或数据量的选择。
  5. 通信优化
    • 在实际部署中,客户端和服务器之间的通信可能成为瓶颈。可以考虑实现压缩算法来减少传输的数据量,或使用更高效的通信协议。
  6. 安全性
    • 在联邦学习中,保护客户端数据的隐私至关重要。可以考虑实现加密技术来保护传输过程中的模型更新。
  7. 代码结构和模块化
    • 将代码拆分成更小的模块和函数,以提高可读性和可维护性。
    • 使用类来封装服务器和客户端的逻辑,使代码更加面向对象。
  8. 扩展性
    • 设计系统时考虑未来的扩展性,例如支持不同类型的模型、数据集和联邦学习算法。
  9. 性能监控
    • 在训练过程中监控资源使用情况(如CPU、内存和磁盘I/O),以确保系统稳定运行。
  10. 文档和注释
    • 为代码添加详细的文档和注释,以便其他开发人员能够更容易地理解和维护代码。

5、models

这段代码定义了一个名为 get_model 的函数,它根据传入的模型名称(name)和是否使用预训练模型(pretrained)来加载并返回相应的PyTorch模型。这个函数支持多种常见的预训练模型,包括ResNet、DenseNet、AlexNet、VGG、Inception_v3 和 GoogLeNet。如果系统支持CUDA(即NVIDIA GPU),则模型会被转移到GPU上,否则模型将保留在CPU上。

这里是函数的详细解释:

  • 参数
    • name(字符串,默认为"vgg16"):指定要加载的模型名称。
    • pretrained(布尔值,默认为True):指定是否加载预训练的权重。如果为True,则加载预训练的模型;如果为False,则加载未训练的模型。
  • 功能
    • 根据name参数的值,使用torchvision.models模块中的相应函数加载模型。
    • 如果pretrained为True,则加载包含预训练权重的模型;如果为False,则加载不包含预训练权重的模型。
    • 检查系统是否支持CUDA(即是否有可用的NVIDIA GPU)。如果支持,则将模型转移到GPU上;如果不支持,则模型将保留在CPU上。
  • 返回值
    • 返回加载并可能已转移到GPU上的模型。

这个函数的设计非常灵活,允许用户根据需要加载不同的预训练模型,并自动处理模型在CPU和GPU之间的转移。这对于在PyTorch中进行深度学习实验和项目开发非常有用。

注意:在使用inception_v3模型时,通常还需要对输入图像进行特定的预处理(如调整大小、裁剪和归一化),因为inception_v3模型对输入图像的大小和格式有特定的要求。这通常是在数据加载和预处理阶段完成的,而不是在模型加载时。

3、搭建federal learning 的框架(已完成)

4、学习pytorch(学习ing)

5、阅读文献

这篇文献《Communication-Efficient Learning of Deep Networks from Decentralized Data》的核心要点可以总结如下:

联邦学习概述:

联邦学习:一种分布式学习范式,允许在移动设备上进行数据训练,而不必将数据传输到数据中心,从而保护用户隐私。
数据隐私保护:移动设备上的数据通常是敏感的,且量大,不适合上传到数据中心训练,联邦学习通过仅传输模型更新来解决这一问题。


联邦学习的优势:

隐私和安全:由于数据保留在本地,攻击面仅限于设备本身,减少了数据中心泄露的风险。
通信效率:通过迭代模型平均,减少了所需的通信轮次,相比同步随机梯度下降方法,通信成本降低了10到100倍。


联邦优化特性:

非独立同分布(Non-IID)数据:客户端的数据基于用户行为,不具有代表性。
数据不平衡:不同用户的使用习惯不同,导致数据量差异大。
分布式规模:参与优化的客户端数量远大于每个客户端的平均数据量。
通信限制:移动设备经常离线或网络条件差,对通信成本有严格要求。


FederatedAveraging 算法:

算法基础:基于本地随机梯度下降(SGD)与服务器模型平均相结合。
参数优化:通过增加每轮通信中的客户端数量(C)、每个客户端的本地训练周期数(E)和本地小批量大小(B)来优化模型训练。
实验结果:FedAvg 算法在 MNIST、CIFAR-10 和莎士比亚数据集上展示了显著的通信效率提升和模型质量优化。


实验设计与结果:

模型架构:涵盖了多层感知机(MLP)、卷积神经网络(CNN)、字符级和单词级长短期记忆网络(LSTM)。
数据集:使用 MNIST、CIFAR-10、莎士比亚作品数据集以及大规模社交媒体文本数据集进行训练和测试。
通信效率:FedAvg 相比 FedSGD 在达到相同测试准确率时,显著减少了通信轮次,如 CIFAR-10 数据集上达到 85% 准确率时,FedAvg 仅需 2000 轮通信,而 FedSGD 需要 3750 轮。


联邦学习的挑战与未来方向:

挑战:包括客户端数据集的动态变化、客户端可用性的复杂性、客户端无响应或发送错误更新等问题。
未来方向:结合差分隐私、安全多方计算等技术进一步增强隐私保护;探索更高效的通信压缩算法;应对更多实际部署中的挑战。


实际应用潜力:

移动应用增强:联邦学习可以显著提升移动设备上语言模型和图像模型的性能,从而改善用户体验。
实时数据利用:利用移动设备上实时生成的大量数据,通过联邦学习不断优化模型,为用户提供更个性化的服务。

总结:这篇文献提出了联邦学习框架,通过保留数据在本地并仅传输模型更新,实现了高效且隐私保护的深度学习。FederatedAveraging 算法通过优化本地计算和通信策略,显著提高了模型训练的效率和质量,展示了联邦学习在实际应用中的巨大潜力。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【项目实用】SpringBoot整合日志功能插件

​分享不易,耗时耗力,麻烦给个不要钱的关注和赞吧 承接毕设指导,技术答疑,学习路上缺少导师的同学可以私信我 更多学习资料,公众号:墨轩学习网,B站:墨轩大楼 一、日志概述 日志记录…

安装WMware和Ubuntu并使用xShell连接

0、我的电脑配置 设备名称 hello 处理器 Intel(R) Core(TM) i7-10700K CPU 3.80GHz 3.79 GHz 机带 RAM 16.0 GB (15.9 GB 可用) 设备 ID 541EC230-9910-418C-9043-5FBBF8ED320C 产品 ID 00330-80000-00000-AA846 系统类型 64 位操作系统, 基于 x64 的处理器 笔和触控 没有可…

网络服务器及IO模型

网络服务器 单循环服务器:服务器在同一时刻只能响应一个客户端的请求 并发服务器模型:服务器在同一时刻可以响应多个客户端的请求 实现TCP并发服务器 1.多进程 2.多线程 3.IO多路复用: 为了解决进程或线程阻塞到某个 I/O 系统调用而出现的…

计算机视觉编程 3(图片处理)

目录 图像差分 高斯差分 形态学-物体计数 ​编辑 图片降噪 图像差分 # -*- coding: utf-8 -*- from PIL import Image from pylab import * from scipy.ndimage import filters import numpy# 添加中文字体支持 from matplotlib.font_manager import FontProperties font…

算法学习:一维数组的排序算法

【排序算法】八种排序算法可视化过程_哔哩哔哩_bilibili 1,冒泡排序: 冒泡排序(Bubble Sort): 冒泡排序是一种简单的排序算法,它通过重复地交换相邻的元素,直到整个序列有序。算法思路是:从第一个元素开始,依次比较相邻的两个元素,如果前者大于后者,就交…

51单片机最快能生成多高频率的方波?

前言 在嵌入式系统开发中,51 单片机作为一种非常非常非常经典,贯穿上下几十年的微控制器,被广泛应用于各种电子项目中。其中,生成特定频率的方波信号是一项常见的需求。 那么,51 单片机究竟能以多快的速度生成方波呢&…

c++类的继承

1.直接继承父类的方法 #include <iostream> #include <string>using namespace std; class Person{ public:void eat(){cout<<"在吃饭"<<endl;} }; class Student : public Person{ private:int age; public:string name;Student() {cout &…

Spring security 密码加密使用

一、密码加密 2011年12月21日&#xff0c;有人在网络上公开了一个包含600万个CSDN 用户资料的数据库&#xff0c;数据全部为明文储存&#xff0c;包含用户名、密码以及注册邮箱。事件发生后CSDN 在微博、官方网站等渠道发出了声明、解释说此数据库系2009 年备份所用&#xff0c…

外包干了2年,女朋友跑了...

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 简单的说下&#xff0c;我大学的一个同学&#xff0c;毕业后我自己去了自研的公司&#xff0c;他去了外包&#xff0c;快两年了我薪资、技术各个方面都有了很大的…

Salesforce篇——如何在lightning页面添加ListviewButton使用lwc组件

1.创建lwc组件&#xff0c;用于展示listview已选数据&#xff1a; html&#xff1a; <template><lightning-card title"Selected Records"><p>Selected Record IDs: {selectedIds}</p><lightning-button label"返回" onclick…

Spring中Bean的生命周期管理

Spring框架中的Bean生命周期是指从创建到销毁的整个过程。在这个过程中&#xff0c;Spring容器会负责管理Bean的状态和行为。以下是Spring中Bean生命周期的详细解释&#xff1a; 实例化&#xff1a;Spring容器根据Bean的定义信息&#xff0c;通过反射机制创建Bean对象。 设置属…

“阉割版”ADS还能遥遥领先吗?

文/王俣祺 导语&#xff1a;随着特斯拉FSD一次又一次的“入华无门”&#xff0c; 让国内车企智能驾驶的“内卷”之争迎来了喘息的余地&#xff0c;而“端到端”也成为现如今市场上的首要研发目标。早在今年4月份&#xff0c;华为就宣布其研发的HUAWEI ADS 3.0已经采用了最新的端…

Java-数据结构-包装类和认识泛型 !!!∑(゚Д゚ノ)ノ

目录&#xff1a; 一、包装类&#xff1a; 1、基本数据类型所对应的包装类&#xff1a; 2、装箱和拆箱&#xff1a; 二、 泛型&#xff1a; 1、什么是泛型&#xff1a; 2、语法&#xff1a; 三、泛型类的使用&#xff1a; 四、裸类型&#xff1a; 五、泛型的擦除机制&…

[oeasy]python031_[趣味拓展]unix起源_Ken_Tompson_Ritchie_multics

[趣味拓展]unix起源_Ken_Tompson_Ritchie_multics &#x1f94b; 回忆上次内容 上次 动态设置了 断点 断点 可以把代码 切成一段一段的可以 更快地调试 调试的目的 是 去除 bug 别害怕 bug 一步步 总能找到 bug这 就是 程序员基本功 调试 debug 在bug出现的时候 甚至…

Python 变量类型

Python 变量类型 变量赋值 多个变量赋值 标准数据类型 Python 数字 Python字符串 Python列表 Python 元组 Python 字典 Python数据类型转换 Python 变量类型 变量是存储在内存中的值&#xff0c;这就意味着在创建变量时会在内存中开辟一个空间。 基于变量的数据类型…

【视频讲解】主成分分析原理与水果成熟数据实例:Python中PCA-LDA 与卷积神经网络CNN...

全文链接&#xff1a;https://tecdat.cn/?p37450 分析师&#xff1a;Shixian Ding 主成分分析&#xff08;PCA&#xff09;作为数据科学中用于可视化和降维的重要工具&#xff0c;在处理具有大量特征的数据集时非常有用。就像我们难以找到时间阅读一本 1000 页的书&#xff0…

实现流程化办公,可专注于开源可视化报表设计器!

近日&#xff0c;有很多粉丝和朋友们会问我们关于低代码技术平台、开源可视化报表设计器的相关内容和问题。其实&#xff0c;在流程化办公新时代&#xff0c;愿意启用新软件平台的客户朋友会收获市场红利&#xff0c;也会站在前沿之地上斩获更多市场份额。今天我们就一起来了解…

随机森林与线性回归

集成学习方法之随机森林 集成学习&#xff08;Ensemble Learning&#xff09;是一种通过组合多个分类器来提高预测性能的方法。主要分为三种类型:Bagging、Boosting和Stacking。以下是集成学习的基本步骤和概念&#xff1a; 1数据采样&#xff1a;从训练集中有放回地随机抽取…

【渗透测试】ATTCK靶场一,phpmyadmin,域渗透,内网横向移动攻略

前言 博客主页&#xff1a;h0ack1r丶羽~ 从0到1~ VulnStack&#xff0c;作为红日安全团队匠心打造的知识平台&#xff0c;其独特优势在于全面模拟了国内企业的实际业务场景&#xff0c;涵盖了CMS、漏洞管理及域管理等核心要素。这一设计理念源于红日安全团队对ATT&CK红队评…

斯坦福大学cs231n (图像分类)

1.介绍 当作图像分类时&#xff0c;分类系统接收一些分类图像&#xff0c;比如猫咪。并且系统清楚了一些已经确定了分类或者标签的集合。那么&#xff0c;计算机的工作就是根据图片&#xff0c;给他分配一些固定的分类或者标签。 对于一个计算机来说&#xff0c;这是一个非常…