当前位置: 首页 > news >正文

2024年1月9日学习总结

目录

  • 学习目标
  • 学习内容
    • 联邦学习基础:why, what, how
      • why?
      • what?
      • how?
    • 联邦学习的例子——CIFAR-10数据集(分类问题)
      • 1、import libararies
      • 2、hyper-parameters
      • 3、加载并且划分数据
      • 4、创建神经网络模型
      • 5、helper functions
        • (1)client_update
        • (2)server_aggregate
        • (3)test
      • 6、实例化模型
      • 7、训练模型
      • 7、整体流程
    • 查看不同类型数据的方法
      • 1、dataframe
      • 2、ndarray
      • 3、Dictionary
      • 4、list
      • 5、tuple

学习目标

  • 完成集中学习的代码部分
  • 对联邦学习进行了解
  • 对学习过程中遇到的问题进行总结

学习内容

联邦学习基础:why, what, how

why?

深度学习对于数据的需求是贪得无厌的(insatiable),越多的数据训练的效果越好。ALphaGo学习了大约30万场的比赛模式才在2016年打败了人类玩家。如果能够不受限制的访问几大洲的所有医院数十亿的医疗记录,那么预测各类疾病的概率将会非常的精确。但是有数据保护法的管控,使用超级大量的数据来进行训练模型是不可能的。
高质量的数据像是一个个孤岛存储在世界各地的边缘设备上。在不违反隐私法的前提下把他们整合到一起得到他们的预测能力是非常困难的(herculean)的任务。联邦学习就是解决这一困境的!

what?

联邦学习提供了一个聪明的方式,连接机器学习模型和能够有效训练模型所需的数据
联邦学习工作可以比喻成:殖民地(colonies)和领土(territories)是如何组成共和国(republic)或联邦(federation)的。
分布的边缘设备使用自己的数据训练自己的local model,然后组合在一起创造一个global model(听起来像是分布式学习💦),联邦学习就是分布学习的一种形式,但是它和传统的HPC(high performance computing)不同,HPC的目的是减少训练的时间,因为你也知道经历45天的训练,想要记得上一次调整的超参数是多么困难😰。但是FL的目标是无论数据在哪里,都要获取数据,并将其用于模型训练。在HPC中,训练数据首先被收集在一起并随机化,然后作为碎片跨多个计算节点共享。这些过程产生了独立且同分布(IID)的数据,从而提高了随机梯度下降的性能。但是FL学习是不能生成IID数据的,FL数据大多是非IID的,并且系统必须具有能够承受这种现象的架构。

how?

传统的FL学习结构由中心的管理员(curator)或者服务器(server)协调训练的。客户端(clients)大多数是边缘设备,数量可能多达几百万,这些设备在每次训练的过程中至少与服务器通信两次。

  • 首先,客户端都从服务器接收当前的全局模型权重(global model weights)
  • 然后,在每个本地数据上训练它以生成更新的参数
  • 将这些参数上传到服务器进行聚合(aggregation)

联邦学习的例子——CIFAR-10数据集(分类问题)

1、import libararies

###############################
##### importing libraries #####
###############################import os
import random
from tqdm import tqdm
import numpy as np
import torch, torchvision
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data.dataset import Dataset   
torch.backends.cudnn.benchmark=True

2、hyper-parameters

##### Hyperparameters for federated learning #########
num_clients = 20
num_selected = 6
num_rounds = 150
epochs = 5
batch_size = 32
  1. num_clients: 客户端的数量。将全部数据平均分给每个client
  2. num_selected: 在num_clients中随机选择num-clients个客户端进行训练(每个communication round)。通常是30%
  3. num_rounds: 需要运行的communication 轮数。在每一个communication round中,从num_clients中随机抽出num_selected个客户端进行原理,然后聚合各自的模型参数成为一个global model
  4. epoch: 每一个被选择的客户端需要训练的轮数
  5. batch_size: 批量的加载数据

3、加载并且划分数据

本教程使用CIFAR10数据集。它由10个类别的6万张32x32像素的彩色图像组成。有5万张训练图像和1万张测试图像。在训练批次中,每个班级有5000张图像,总共有50000张。在PyTorch中,CIFAR 10可以在torchvision模块的帮助下使用。
在本教程中,图像被平均地划分为客户机,因此表示平衡(IID)情况。

  1. 加载图像,并对图像进行预处理
# Image augmentation 
transform_train = transforms.Compose([transforms.RandomCrop(32, padding=4),transforms.RandomHorizontalFlip(),transforms.ToTensor(),transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)),
])# Loading CIFAR10 using torchvision.datasets
traindata = datasets.CIFAR10('./data', train=True, download=True,transform= transform_train)
  1. 将训练数据分给num_clients个客户端
# Dividing the training data into num_clients, with each client having equal number of images
traindata_split = torch.utils.data.random_split(traindata, [int(traindata.data.shape[0] / num_clients) for _ in range(num_clients)])
  1. 将训练样本转化成深度学习的格式
# Creating a pytorch loader for a Deep Learning model
train_loader = [torch.utils.data.DataLoader(x, batch_size=batch_size, shuffle=True) for x in traindata_split]
  1. 对测试集进行预处理以及转成深度学习格式
# Normalizing the test images
transform_test = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)),
])# Loading the test iamges and thus converting them into a test_loader
test_loader = torch.utils.data.DataLoader(datasets.CIFAR10('./data', train=False, transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010))])), batch_size=batch_size, shuffle=True)

4、创建神经网络模型

VGG19(16个卷积层,3个完全连接层,5个MaxPool层和1个SoftMax层)在本教程中使用。还有VGG11、VGG13和VGG16等VGG的其他变体。

#################################
##### Neural Network model #####
#################################cfg = {'VGG11': [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'],'VGG13': [64, 64, 'M', 128, 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'],'VGG16': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'M', 512, 512, 512, 'M', 512, 512, 512, 'M'],'VGG19': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 256, 'M', 512, 512, 512, 512, 'M', 512, 512, 512, 512, 'M'],
}class VGG(nn.Module):def __init__(self, vgg_name):super(VGG, self).__init__()self.features = self._make_layers(cfg[vgg_name])self.classifier = nn.Sequential(nn.Linear(512, 512),nn.ReLU(True),nn.Linear(512, 512),nn.ReLU(True),nn.Linear(512, 10))def forward(self, x):out = self.features(x)out = out.view(out.size(0), -1)out = self.classifier(out)output = F.log_softmax(out, dim=1)return outputdef _make_layers(self, cfg):layers = []in_channels = 3for x in cfg:if x == 'M':layers += [nn.MaxPool2d(kernel_size=2, stride=2)]else:layers += [nn.Conv2d(in_channels, x, kernel_size=3, padding=1),nn.BatchNorm2d(x),nn.ReLU(inplace=True)]in_channels = xlayers += [nn.AvgPool2d(kernel_size=1, stride=1)]return nn.Sequential(*layers)

我们定义了一个名为VGG的类,它继承了nn.Module。这个类有两个主要方法:__init__和forward。__init__方法用于初始化网络结构,包括定义卷积层和全连接层。forward方法用于前向传播输入数据通过网络,并返回输出结果。
在__init__方法中,我们首先调用父类的__init__方法,然后定义了一个名为features的成员变量,它包含了VGG网络的卷积层。接下来,我们定义了一个名为classifier的成员变量,它包含了VGG网络的全连接层。最后,我们在forward方法中定义了如何处理输入数据,并返回输出结果。
_make_layers方法用于构建VGG网络的卷积层。它首先定义了一个名为layers的空列表,用于存储网络结构中的层。然后,我们遍历cfg列表,其中cfg是一个包含VGG网络结构配置的列表。如果x等于’M’,表示这是一个最大池化层,我们添加一个nn.MaxPool2d层;否则,表示这是一个卷积层,我们添加一个nn.Conv2d层、一个nn.BatchNorm2d层和一个nn.ReLU激活层。最后,我们添加一个平均池化层,并返回nn.Sequential(*layers),即网络结构中的所有层。

5、helper functions

(1)client_update

client_update函数使用privent client data训练client模型。这是在num_selected clients中进行的本地训练

def client_update(client_model, optimizer, train_loader, epoch=5):"""This function updates/trains client model on client data"""model.train()for e in range(epoch):for batch_idx, (data, target) in enumerate(train_loader):data, target = data.cuda(), target.cuda()optimizer.zero_grad()output = client_model(data)loss = F.nll_loss(output, target)loss.backward()optimizer.step()return loss.item()
  • 首先,我们使用client_model.train()将客户端模型设置为训练模式。
  • 然后,我们使用一个for循环遍历训练轮数。在每一轮中,我们使用另一个for循环遍历训练数据加载器中的数据。
  • 对于每个数据batch,我们将数据和目标标签从CPU转移到GPU上,并使用optimizer.zero_grad()将梯度清零。
  • 接下来,我们使用客户端模型对数据进行前向传播,并计算损失。output = client_model(data)
  • 然后,我们使用loss.backward()计算梯度。
  • 最后,我们使用optimizer.step()更新客户端模型的参数。
(2)server_aggregate

server_aggregate函数聚合从每个客户机接收到的模型权重,并用更新后的权重更新全局模型。在本教程中,采用权重的平均值并将其聚合为全局权重。

def server_aggregate(global_model, client_models):"""This function has aggregation method 'mean'"""### This will take simple mean of the weights of models ###global_dict = global_model.state_dict()for k in global_dict.keys():global_dict[k] = torch.stack([client_models[i].state_dict()[k].float() for i in range(len(client_models))], 0).mean(0)global_model.load_state_dict(global_dict)for model in client_models:model.load_state_dict(global_model.state_dict())
  • 首先,我们使用global_model.state_dict()获取全局模型的参数字典。
  • 然后,我们使用一个for循环遍历全局模型的参数字典中的每个键(参数名称)。
  • 对于每个参数,我们使用torch.stack()将所有客户端模型的相应参数堆叠在一起,并使用float()将其转换为浮点数类型。
  • 接下来,我们使用mean()函数计算参数的平均值。
  • 最后,我们使用global_model.load_state_dict()将计算出的平均值加载到全局模型的参数字典中。
  • 接下来,我们使用另一个for循环遍历客户端模型列表,并使用model.load_state_dict()将全局模型的参数字典加载到每个客户端模型中,以实现全局模型在每个客户端模型的平均值。
(3)test

test函数输入global模型和test loader,返回test loss和accuracy

def test(global_model, test_loader):"""This function test the global model on test data and returns test loss and test accuracy """global_model.eval()test_loss = 0correct = 0with torch.no_grad():for data, target in test_loader:data, target = data.cuda(), target.cuda()output = global_model(data)test_loss += F.nll_loss(output, target, reduction='sum').item()  # sum up batch losspred = output.argmax(dim=1, keepdim=True)  # get the index of the max log-probabilitycorrect += pred.eq(target.view_as(pred)).sum().item()test_loss /= len(test_loader.dataset)acc = correct / len(test_loader.dataset)return test_loss, acc
  • 首先,我们使用global_model.eval()将全局模型设置为评估模式,以便在测试过程中关闭dropout等正则化技术。
  • 然后,我们初始化测试损失为0,正确分类的样本数为0
  • 使用torch.no_grad()上下文,用于在代码块中禁用梯度计算。
  • 我们遍历test_loader中的每个数据样本。
  • 对于每个数据样本data,target,我们将数据和目标标签从CPU加载到GPU上
  • 并使用全局模型对其进行前向传播。output = global_model(data)
  • 我们使用F.nll_loss()计算输出与目标标签之间的交叉熵损失,并使用reduction='sum’将其转换为单个数值。
  • 接下来,我们使用test_loss += …将每个样本的损失累加到测试损失中。
  • 最后,我们使用pred = output.argmax(dim=1, keepdim=True)计算输出中最大概率的索引,并将其与目标标签进行比较。
  • 使用pred.eq(target.view_as(pred))比较预测索引和实际索引,并将它们转换为布尔值。
  • 使用sum().item()计算布尔值的总和,并将其除以测试数据加载器中样本的数量以获得测试准确性。
  • 最后,我们返回测试损失和测试准确性。

6、实例化模型

############################################
#### Initializing models and optimizer  ####
################################################ global model ##########
global_model =  VGG('VGG19').cuda()############## client models ##############
client_models = [ VGG('VGG19').cuda() for _ in range(num_selected)]
for model in client_models:model.load_state_dict(global_model.state_dict()) ### initial synchronizing with global model ############### optimizers ################
opt = [optim.SGD(model.parameters(), lr=0.1) for model in client_models]

7、训练模型

###### List containing info about learning #########
losses_train = []
losses_test = []
acc_train = []
acc_test = []
# Runnining FLfor r in range(num_rounds):# select random clientsclient_idx = np.random.permutation(num_clients)[:num_selected]# client updateloss = 0for i in tqdm(range(num_selected)):loss += client_update(client_models[i], opt[i], train_loader[client_idx[i]], epoch=epochs)losses_train.append(loss)# server aggregateserver_aggregate(global_model, client_models)test_loss, acc = test(global_model, test_loader)losses_test.append(test_loss)acc_test.append(acc)print('%d-th round' % r)print('average train loss %0.3g | test loss %0.3g | test acc: %0.3f' % (loss / num_selected, test_loss, acc))

7、整体流程

在这里插入图片描述

查看不同类型数据的方法

首先要查看变量的数据类型:type(object)

1、dataframe

使用万能函数

def basic_eda(df):print("-------------------------------TOP 5 RECORDS-----------------------------")print(df.head(5))print("-------------------------------INFO--------------------------------------")print(df.info())print("-------------------------------Describe----------------------------------")print(df.describe())print("-------------------------------Columns-----------------------------------")print(df.columns)print("-------------------------------Data Types--------------------------------")print(df.dtypes)print("----------------------------Missing Values-------------------------------")print(df.isnull().sum())print("----------------------------NULL values----------------------------------")print(df.isna().sum())print("--------------------------Shape Of Data---------------------------------")print(df.shape)print("============================================================================ \n")
  • df.head():查看前几行数据,默认是5
  • df.info:打印dataframe的简要摘要,包括索引的数据类型dtype和列的数据类型dtype,非空值的数量和内存使用情况。
    在这里插入图片描述
  • df.describe:describe()函数用于生成描述性统计信息。 描述性统计数据:数值类型的包括均值,标准差,最大值,最小值,分位数等;类别的包括个数,类别的数目,最高数量的类别及出现次数等;输出将根据提供的内容而有所不同
    在这里插入图片描述
  • df.colunms:查看列
  • df.dtypes:查看元素的数据类型
  • df.shape:查看dataframe的形状

2、ndarray

  • ndarray.type:查看元素类型
  • ndarray.shape:查看数组的形状
  • ndarray.ndim:查看数组维度
  • ndarry.size:查看数组的全部元素个数
  • len(ndarray):计算的是数组的行数,相当于ndarray.shape[0]

3、Dictionary

  • dict.keys():返回字典全部的key
  • dict.size❌‘dict’ object has no attribute ‘size’
  • numpy.size(dict)❌无法获得字典大小
  • len(dict):返回字典key-value对的个数

4、list

  • list.size❌‘list’ object has no attribute ‘size’
  • numpy.size(list):查看列表全部元素的个数
  • len(list):同numpy.size(list)一样

5、tuple

  • tuple.size❌‘tuple’ object has no attribute ‘size’
  • numpy.size(tuple):查看元组全部元素的个数
  • len(tuple):同numpy.size(tuple)一样

okkksleeeeep!

在这里插入图片描述

相关文章:

2024年1月9日学习总结

目录 学习目标学习内容联邦学习基础:why, what, howwhy?what?how? 联邦学习的例子——CIFAR-10数据集(分类问题)1、import libararies2、hyper-parameters3、加载并且划分数据4、创建神经网络模型5、helper…...

Nacos使用MySQL8时区问题导致启动失败

文章目录 配置下mysql的时区方式一 (永久)方式二(临时) 由于mysql8需要配置时区,如果不配置时区,nacos就连不上mysql,从而也就无法登录nacos自带的图形化界面 配置下mysql的时区 方式一 (永久) 直接修改配置文件&…...

在k8s集群中部署多nginx-ingress

关于ingress的介绍,前面已经详细讲过了,参考ingress-nginx详解和部署方案。本案例ingress的部署使用deploymentLB的方式。 参考链接: 多个ingress部署 文章目录 1. 下载ingress的文件2. 文件资源分析3. 部署ingress3.1 部署第一套ingress3.1…...

SLF4J Spring Boot日志框架

JAVA日志框架 JAVA有好多优秀的日志框架,比如log4j、log4j2、logback、JUL(java.util.logging)、JCL(JAVA Common Logging)等等,logback是后起之秀,是Spring Boot默认日志框架。 今天文章的目…...

mysql之导入导出远程备份

文章目录 一、navicat导入导出二、mysqldump命令导入导出2.1导出2.1.1 导出表数据和表结构2.1.2 只导出表结构() 2.2 导入(使用mysqldump导入 包含t _log表的整个数据库 共耗时 20s;)方法一:方法二: 三、LOAD DATA INFILE命令导入导出(只针对单表)设置导…...

Java虚拟机ART 读书笔记 第2章 深入理解Class文件格式

GitHub - Omooo/Android-Notes: ✨✨✨这有一包小鱼干,确定不要吃嘛?( 逃 深入理解Android:Java虚拟机ART 读书笔记 以下内容均来自书中内容 建议看原书哦 第2章 深入理解Class文件格式 2.1 class文件总览 Class文件格式全貌 u4&#xff…...

编程基础 - 初识Linux

编程基础 - 初识Linux 返回序言及专栏目录 文章目录 编程基础 - 初识Linux前言一、Linux发展简介二、现代Linux三、Linux系统各发行版小结 前言 为什么要学习Linux呢?我这Windows用得好好的,简单易用傻瓜式、用的人还超多!但是我要告诉你的…...

c yuv422转yuv420p

思路: yuv422 存储格式为 y u y v y u y v y u y v y u y v yuv420p 存储最简单,先存所以的y,再存u,最后v 所以先把422所有的y存在一起,再提奇数行的u ,偶数行舍弃。提…...

计算机网络 - 路由器查表过程模拟 C++(2024)

1.题目描述 参考计算机网络教材 140 页 4.3 节内容,编程模拟路由器查找路由表的过程,用(目的地址 掩码 下一跳) 的 IP 路由表以及目的地址作为输入,为目的地址查找路由表,找出正确的下一跳并输出结果。 1.…...

实现pytorch版的mobileNetV1

mobileNet具体细节,在前面已做了分析记录:轻量化网络-MobileNet系列-CSDN博客 这里是根据网络结构,搭建模型,用于图像分类任务。 1. 网络结构和基本组件 2. 搭建组件 (1)普通的卷积组件:CBL …...

vue多tab页面全部关闭后自动退出登录

业务场景:主项目是用vue写的单页面应用,但是有多开页面的需求,现在需要在用户关闭了所有的浏览器标签页面后,自动退出登录。 思路:因为是不同的tab页面,我只能用localStorage来通信,新打开一个…...

记一个集群环境部署不完整导致的BUG

一 背景 产品有三个环境:开发测试环境、验收环境、生产环境。 开发测试环境,保持最新的更新; 验收环境,阶段待发布内容; 生产环境,部署稳定内容。 产品为BS架构,后端采用微服务&#xf…...

Go zero copy,复制文件

这里使用零拷贝技术复制文件,从内核态操作源文件和目标文件。避免了在用户态开辟缓冲区,然后从内核态复制文件到用户态的问题。 由内核态完成文件复制操作。 调用的是syscall.Sendfile系统调用函数。 //go:build linuxpackage zero_copyimport ("f…...

http协议九种请求方法介绍及常见状态码

http1.0定义了三种: GET: 向服务器获取资源,比如常见的查询请求POST: 向服务器提交数据而发送的请求Head: 和get类似,返回的响应中没有具体的内容,用于获取报头 http1.1定义了六种 PUT:一般是用于更新请求,…...

详解flink exactly-once和两阶段提交

以下是我们常见的三种 flink 处理语义: 最多一次(At-most-Once):用户的数据只会被处理一次,不管成功还是失败,不会重试也不会重发。 至少一次(At-least-Once):系统会保…...

Qt/QML编程学习之心得:QDbus实现service接口调用(28)

D-Bus协议用于进程间通讯的。 QString value = retrieveValue();QDBusPendingCall pcall = interface->asyncCall(QLatin1String("Process"), value);QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pcall, this);QObject::connect(watcher, SI…...

前端nginx配置指南

前端项目发布后,有些接口需要在服务器配置反向代理,资源配置gzip压缩,配置跨域允许访问等 配置文件模块概览 配置示例 反向代理 反向代理是Nginx的核心功能之一,是指客户端发送请求到代理服务器,代理服务器再将请求…...

接口测试到底怎么做,5分钟时间看完这篇文章彻底搞清楚

01、通用的项目架构 02、什么是接口 接口:服务端程序对外提供的一种统一的访问方式,通常采用HTTP协议,通过不同的url,不同的请求类型(GET、POST),不同的参数,来执行不同的业务逻辑。…...

显示管理磁盘分区 fdisk

显示管理磁盘分区 fdisk fdisk是用于检查一个磁盘上分区信息最通用的命令。 fdisk可以显示分区信息及一些细节信息,比如文件系统类型等。 设备的名称通常是/dev/sda、/dev/sdb 等。 对于以前的设备有可能还存在设备名为 /dev/hd* (IDE)的设备,这个设…...

Hyperledger Fabric 管理链码 peer lifecycle chaincode 指令使用

链上代码(Chaincode)简称链码,包括系统链码和用户链码。系统链码(System Chaincode)指的是 Fabric Peer 中负责系统配置、查询、背书、验证等平台功能的代码逻辑,运行在 Peer 进程内,将在第 14 …...

L1-011 A-B(Java)

题目 本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。 输入格式: 输入在2行中先后给出字符串A和B。两字符串的长度都不超过10的四次方,并且…...

系列七、Ribbon

一、Ribbon 1.1、概述 Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具,是Netflix发布的一款开源项目,其主要功能是提供客户端的软件负载均衡算法和服务调用,Ribbon客户端组件提供一系列完善的配置项,例如&#xff1a…...

山东名岳轩印刷包装携专业包装袋盛装亮相2024济南生物发酵展

山东名岳轩印刷包装有限公司盛装亮相2024第12届国际生物发酵展,3月5-7日山东国际会展中心与您相约! 展位号:1号馆F17 山东名岳轩印刷包装有限公司是一家拥有南北两个生产厂区,设计、制版、印刷,营销策划为一体的专业…...

BGP公认必遵属性——Next-hop(一)

BGP公认必遵属性共有三个,分别是:Next-hop、Origin、As-path,本期介绍Next-hop 点赞关注,持续更新!!! Next-hop 华为BGP路由下一跳特点: 默认情况下传给EBGP邻居的BGP路由的下一跳…...

增强Wi-Fi信号的10种方法,值得去尝试

Wi-Fi信号丢失,无线盲区。在一个对一些人来说,上网和呼吸一样必要的世界里,这些问题中的每一个都令人抓狂。 如果你觉得你的Wi-Fi变得迟钝,有很多工具可以用来测试你的互联网速度。你还可以尝试一些技巧来解决网络问题。然而,如果你能获得良好接收的唯一方法是站在无线路…...

第十五章 ECMAScript6新增的常用语法

文章目录 一、声明关键字二、箭头函数三、解构赋值四、展开运算符五、对字符的补充六、Symbol七、对象的简写语法八、Set和Map九、for-of 一、声明关键字 ES6新增的声明关键字: let,const:声明变量class:声明类import&#xff0c…...

vulhub中的Apache SSI 远程命令执行漏洞

Apache SSI 远程命令执行漏洞 1.cd到ssi-rce cd /opt/vulhub/httpd/ssi-rce/ 2.执行docker-compose up -d docker-compose up -d 3.查看靶场是否开启成功 dooker ps 拉取成功了 4.访问url 这里已经执行成功了,注意这里需要加入/upload.php 5.写入一句话木马 &…...

MSB20M-ASEMI迷你贴片整流桥MSB20M

编辑:ll MSB20M-ASEMI迷你贴片整流桥MSB20M 型号:MSB20M 品牌:ASEMI 封装:UMSB-4 特性:贴片、整流桥 最大平均正向电流:2A 最大重复峰值反向电压:1000V 恢复时间:&#xff1…...

工程管理系统功能设计与实践:实现高效、透明的工程管理

在现代化的工程项目管理中,一套功能全面、操作便捷的系统至关重要。本文将介绍一个基于Spring Cloud和Spring Boot技术的Java版工程项目管理系统,结合Vue和ElementUI实现前后端分离。该系统涵盖了项目管理、合同管理、预警管理、竣工管理、质量管理等多个…...

【C#】网址不进行UrlEncode编码会存在一些问题

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是2024年第3篇文章,此篇文章是C#知识点实践序列文章,博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言数据丢失效果请求端代码接口端代码…...

模板网站不可以做seo优化吗/上海seo优化培训机构

回到系列文章的目录——[系列文章目录]  回到本章目录——[第1章目录]1.2 让程序“跑”起来把程序写在纸上,有思考,有实践,这种方式可以有。  把程序输入到计算机,让计算机“跑”程序,这种方式最直观。这也是让程序…...

配色设计网站推荐/aso搜索优化

adb常用命令总结 程序员你可以考虑安装的15款谷歌插件 推荐20套实战源码 99%的人不知道搜索引擎的6个技巧 12款好用的Visual Studio插件,最后一款良心推荐 ​ bootstrap自带的响应式导航栏是向下滑动的,有时满足不了个性化的需求,需要做一…...

网套加工机器设备/seo职位

1034: 交换最值的位置 [水题]时间限制: 1 Sec 内存限制: 128 MB提交: 379 解决: 132 统计题目描述给定一个序列,现在让你交换序列最大值和最小值的位置,并输出交换后的序列。输入第一行输入一个整数T,代表有T组测试数据。每组数据第一行输入一…...

商丘做网站的哪家好/搜索引擎推广的常见形式有

2019独角兽企业重金招聘Python工程师标准>>> 表结构与数据:https://github.com/XuePeng87/TSQLV4 子查询 1.自包含子查询 每个子查询都具有一个其所隶属的外部查询。自包含子查询是独立于其所隶属的外部查询的。看一个自包含子查询示例: SELE…...

大良o2o网站建设/百度推广客服投诉电话

QC 使用中问题点汇总,包括以下方面:  1、不兼容IE7,IE8的问题(服务器端设置)  2、无法在Win 7下正常下载页面(客户端设置)  3、在QC中填写中文内容后无法正常提交到数据库(客户端设置)  4、在QC中填写中文内容出现乱码的现象(待修改)…...

彩票网站做维护是什么/杭州网站优化服务

一、简单回顾 通过前几讲的讲解,我们对工业4.0的认识趋于清晰。 第一讲告诉我们,德国实施工业4.0战略的根本目的是“确保德国制造业的未来”,联想到中国制造2025的“实现制造业由大变强的历史跨越”的战略目标,实质也是“确保中国…...