深度学习 - CNN

第一部分:基础知识

1. 什么是卷积神经网络(CNN)

定义和基本概念
卷积神经网络(CNN)是一种专门用于处理具有网格结构数据(如图像)的深度学习模型。它们在图像识别和计算机视觉领域表现尤为突出。与传统的全连接神经网络不同,CNN利用局部连接和共享权重的方式,能够有效减少参数数量,提高计算效率。

CNN在图像处理中的优势

  • 局部连接:只处理图像的局部区域,减少参数量。
  • 共享权重:同一个滤波器在图像不同位置扫描,进一步减少参数量。
  • 池化操作:通过降采样减少数据维度,提取重要特征。
2. CNN的基本结构

输入层
处理输入数据,比如一张图片,通常用三维数组表示(宽度,高度,颜色通道数)。

卷积层
通过应用不同的滤波器来提取特征。滤波器滑过输入图像,生成特征映射。

池化层
进行降采样,减少数据维度,提高计算效率,同时保留重要特征。

全连接层
将卷积层和池化层提取的特征展开成一维向量,并通过多个全连接层进行分类。

输出层
根据具体任务(如分类、回归)输出最终结果。
在这里插入图片描述

第二部分:深入理解

卷积操作(Convolution Operation)

实例:
假设有一个3x3的输入图像和一个2x2的滤波器:

输入图像:

1 2 3
4 5 6
7 8 9

滤波器:

1 0
0 -1

卷积操作是将滤波器应用于图像的每个局部区域,计算它们的点积和:

1*1 + 2*0 + 4*0 + 5*(-1) = 1 - 5 = -4
2*1 + 3*0 + 5*0 + 6*(-1) = 2 - 6 = -4
4*1 + 5*0 + 7*0 + 8*(-1) = 4 - 8 = -4
5*1 + 6*0 + 8*0 + 9*(-1) = 5 - 9 = -4

最终得到的特征映射:

-4 -4
-4 -4
激活函数(ReLU, Sigmoid, Tanh等)

实例:
ReLU(Rectified Linear Unit):f(x) = max(0, x)
假设输入为[-1, 2, -3, 4],经过ReLU后:

ReLU([-1, 2, -3, 4]) = [0, 2, 0, 4]
池化操作(Max Pooling, Average Pooling)

实例:
Max Pooling:
输入:

1 2
3 4

最大池化结果:

4

Average Pooling:
输入:

1 2
3 4

平均池化结果:

(1+2+3+4)/4 = 2.5
损失函数(Cross-Entropy Loss等)

实例:
假设有两个类别,实际标签为[1, 0](表示第一类),预测概率为[0.8, 0.2]。
交叉熵损失计算:

Loss = - (1 * log(0.8) + 0 * log(0.2)) = - log(0.8) = 0.223

第三部分:实战应用

1. 使用PyTorch实现CNN

安装和配置PyTorch

pip install torch torchvision

构建简单的CNN模型

import torch.nn as nn
import torch.nn.functional as Fclass SimpleCNN(nn.Module):def __init__(self):super(SimpleCNN, self).__init__()self.conv1 = nn.Conv2d(3, 16, 3, 1)  # 3个输入通道,16个输出通道,3x3的卷积核,步长1self.conv2 = nn.Conv2d(16, 32, 3, 1)self.fc1 = nn.Linear(32 * 6 * 6, 128)self.fc2 = nn.Linear(128, 10)def forward(self, x):x = F.relu(self.conv1(x))x = F.max_pool2d(x, 2, 2)x = F.relu(self.conv2(x))x = F.max_pool2d(x, 2, 2)x = x.view(-1, 32 * 6 * 6)x = F.relu(self.fc1(x))x = self.fc2(x)return F.log_softmax(x, dim=1)

数据预处理

import torchvision.transforms as transforms
from torchvision.datasets import CIFAR10
from torch.utils.data import DataLoadertransform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])trainset = CIFAR10(root='./data', train=True, download=True, transform=transform)
trainloader = DataLoader(trainset, batch_size=32, shuffle=True)

训练和评估模型

import torch.optim as optimmodel = SimpleCNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)for epoch in range(10):  # 训练10个epochrunning_loss = 0.0for i, data in enumerate(trainloader, 0):inputs, labels = dataoptimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.item()if i % 100 == 99:    # 每100个批次打印一次print(f'Epoch {epoch + 1}, Batch {i + 1}, Loss: {running_loss / 100:.3f}')running_loss = 0.0print('Finished Training')
2. 经典CNN架构

LeNet
由Yann LeCun提出,适用于手写数字识别。

AlexNet
由Alex Krizhevsky提出,首次在ImageNet竞赛中大放异彩。

VGGNet
由Oxford大学Visual Geometry Group提出,使用多个小卷积核代替大卷积核。

GoogLeNet/Inception
由Google提出,使用Inception模块提高模型性能。

ResNet
由Microsoft提出,引入残差连接解决深层网络训练困难问题。

DenseNet
由Cornell大学提出,通过密集连接提高梯度流动。

3. 转移学习与预训练模型

使用预训练模型

from torchvision import modelsresnet = models.resnet18(pretrained=True)

微调(Fine-Tuning)

for param in resnet.parameters():param.requires_grad = Falseresnet.fc = nn.Linear(resnet.fc.in_features, 10)

第四部分:高级主题

1. 优化与调整

学习率调度

scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=7, gamma=0.1)

正则化方法

self.dropout = nn.Dropout(0.5)  # 在网络中使用dropout防止过拟合

批量归一化

self.bn1 = nn.BatchNorm2d(16)  # 在卷积层后添加批量归一化层
2. 增强技术

数据增强

transform = transforms.Compose([transforms.RandomHorizontalFlip(),transforms.RandomCrop(32, padding=4),transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])

混合精度训练

from torch.cuda.amp import GradScaler, autocastscaler = GradScaler()for epoch in range(10):for inputs, labels in trainloader:optimizer.zero_grad()with autocast():outputs = model(inputs)loss = criterion(outputs, labels)scaler.scale(loss).backward()scaler.step(optimizer)scaler.update()
3.模型参数推荐
数据集规模数据集大小推荐的卷积层数量推荐的卷积核数(每层)推荐的全连接层数量推荐的全连接神经元数(每层)说明
小型数据集1,000 - 10,0002 - 332 - 641 - 2128 - 256例如MNIST等简单任务,可以用少量卷积层和全连接层。
中型数据集10,000 - 100,0003 - 564 - 1282 - 3256 - 512例如CIFAR-10等任务,需要更多的卷积层来提取特征。
大型数据集100,000 - 1,000,0005 - 10128 - 2562 - 4512 - 1024例如CIFAR-100、ImageNet子集等任务,复杂特征需要更多的卷积层。
超大型数据集1,000,000+10+256+3 - 51024+例如完整的ImageNet数据集或更大规模的任务,深度网络(如ResNet)通常是必要的。
小型数据集示例(如MNIST)
import torch.nn as nn
import torch.nn.functional as Fclass SmallCNN(nn.Module):def __init__(self):super(SmallCNN, self).__init__()self.conv1 = nn.Conv2d(in_channels=1, out_channels=32, kernel_size=3, padding=1)self.conv2 = nn.Conv2d(in_channels=32, out_channels=64, kernel_size=3, padding=1)self.pool = nn.MaxPool2d(kernel_size=2, stride=2, padding=0)self.fc1 = nn.Linear(64 * 7 * 7, 128)  # 假设输入图像大小为28x28self.fc2 = nn.Linear(128, 10)def forward(self, x):x = self.pool(F.relu(self.conv1(x)))x = self.pool(F.relu(self.conv2(x)))x = x.view(-1, 64 * 7 * 7)x = F.relu(self.fc1(x))x = self.fc2(x)return x

在这个示例中:

  • 卷积层数量:2层(conv1conv2
  • 每层卷积核数:32和64
  • 全连接层数量:2层(fc1fc2
  • 每层全连接神经元数:128和10
中型数据集示例(如CIFAR-10)
import torch.nn as nn
import torch.nn.functional as Fclass MediumCNN(nn.Module):def __init__(self):super(MediumCNN, self).__init__()self.conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, padding=1)self.conv2 = nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, padding=1)self.conv3 = nn.Conv2d(in_channels=128, out_channels=256, kernel_size=3, padding=1)self.pool = nn.MaxPool2d(kernel_size=2, stride=2, padding=0)self.fc1 = nn.Linear(256 * 4 * 4, 512)  # 假设输入图像大小为32x32self.fc2 = nn.Linear(512, 10)def forward(self, x):x = self.pool(F.relu(self.conv1(x)))x = self.pool(F.relu(self.conv2(x)))x = self.pool(F.relu(self.conv3(x)))x = x.view(-1, 256 * 4 * 4)x = F.relu(self.fc1(x))x = self.fc2(x)return x

在这个示例中:

  • 卷积层数量:3层(conv1, conv2conv3
  • 每层卷积核数:64, 128和256
  • 全连接层数量:2层(fc1fc2
  • 每层全连接神经元数:512和10
大型数据集示例(如ImageNet子集)
import torch.nn as nn
import torch.nn.functional as Fclass LargeCNN(nn.Module):def __init__(self):super(LargeCNN, self).__init__()self.conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, padding=1)self.conv2 = nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, padding=1)self.conv3 = nn.Conv2d(in_channels=128, out_channels=256, kernel_size=3, padding=1)self.conv4 = nn.Conv2d(in_channels=256, out_channels=512, kernel_size=3, padding=1)self.conv5 = nn.Conv2d(in_channels=512, out_channels=1024, kernel_size=3, padding=1)self.pool = nn.MaxPool2d(kernel_size=2, stride=2, padding=0)self.fc1 = nn.Linear(1024 * 1 * 1, 1024)  # 假设输入图像大小为32x32self.fc2 = nn.Linear(1024, 512)self.fc3 = nn.Linear(512, 10)def forward(self, x):x = self.pool(F.relu(self.conv1(x)))x = self.pool(F.relu(self.conv2(x)))x = self.pool(F.relu(self.conv3(x)))x = self.pool(F.relu(self.conv4(x)))x = self.pool(F.relu(self.conv5(x)))x = x.view(-1, 1024 * 1 * 1)x = F.relu(self.fc1(x))x = F.relu(self.fc2(x))x = self.fc3(x)return x

在这个示例中:

  • 卷积层数量:5层(conv1, conv2, conv3, conv4conv5
  • 每层卷积核数:64, 128, 256, 512和1024
  • 全连接层数量:3层(fc1, fc2fc3
  • 每层全连接神经元数:1024, 512和10
4. CNN的其他应用

对抗生成网络(GANs)
生成与判别网络相互竞争,提高生成图像质量。

目标检测(Object Detection)
检测图像中的多个对象并定位它们的边界框。

语义分割(Semantic Segmentation)
将图像中的每个像

素分类到特定类别。

第五部分:项目与实践

1. 手写数字识别(MNIST)

项目介绍
MNIST数据集是一个经典的手写数字识别数据集,包含60,000个训练样本和10,000个测试样本。每个样本是28x28的灰度图像,表示从0到9的数字。

步骤

  1. 数据准备
  2. 模型构建
  3. 模型训练
  4. 模型评估

详细过程

  1. 数据准备
import torch
import torchvision
import torchvision.transforms as transformstransform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,), (0.5,))
])trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=32, shuffle=True)testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=32, shuffle=False)
  1. 模型构建
import torch.nn as nn
import torch.nn.functional as Fclass SimpleCNN(nn.Module):def __init__(self):super(SimpleCNN, self).__init__()self.conv1 = nn.Conv2d(1, 32, 3, 1)self.conv2 = nn.Conv2d(32, 64, 3, 1)self.fc1 = nn.Linear(12 * 12 * 64, 128)self.fc2 = nn.Linear(128, 10)def forward(self, x):x = F.relu(self.conv1(x))x = F.max_pool2d(self.conv2(x), 2)x = torch.flatten(x, 1)x = F.relu(self.fc1(x))x = self.fc2(x)return F.log_softmax(x, dim=1)
  1. 模型训练
import torch.optim as optimmodel = SimpleCNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)for epoch in range(5):  # 训练5个epochmodel.train()running_loss = 0.0for inputs, labels in trainloader:optimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.item()print(f'Epoch {epoch + 1}, Loss: {running_loss / len(trainloader):.3f}')
  1. 模型评估
model.eval()
correct = 0
total = 0
with torch.no_grad():for inputs, labels in testloader:outputs = model(inputs)_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()print(f'Accuracy: {100 * correct / total:.2f}%')
2. 图像分类(CIFAR-10)

项目介绍
CIFAR-10数据集包含60,000张32x32的彩色图像,分为10个类别。每个类别有6,000张图像。

步骤

  1. 数据准备
  2. 模型构建
  3. 模型训练
  4. 模型评估

详细过程

  1. 数据准备
transform = transforms.Compose([transforms.RandomHorizontalFlip(),transforms.RandomCrop(32, padding=4),transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=32, shuffle=True)testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=32, shuffle=False)
  1. 模型构建
class CIFAR10CNN(nn.Module):def __init__(self):super(ImprovedImageClassifier, self).__init__()self.conv1 = nn.Conv2d(3, 32, 3, stride=1, padding=1)self.bn1 = nn.BatchNorm2d(32)self.conv2 = nn.Conv2d(32, 64, 3, stride=1, padding=1)self.bn2 = nn.BatchNorm2d(64)self.pool = nn.MaxPool2d(2, 2)self.conv3 = nn.Conv2d(64, 128, 3, stride=1, padding=1)self.bn3 = nn.BatchNorm2d(128)self.dropout = nn.Dropout(0.1)  # 加入Dropout层self.fc1 = nn.Linear(128 * 4 * 4, 256)self.fc2 = nn.Linear(256, 128)self.out = nn.Linear(128, 10)def forward(self, x):x = self.pool(torch.relu(self.bn1(self.conv1(x))))x = self.pool(torch.relu(self.bn2(self.conv2(x))))x = self.pool(torch.relu(self.bn3(self.conv3(x))))x = x.view(-1, 128 * 4 * 4)x = torch.relu(self.fc1(x))x = self.dropout(x)x = torch.relu(self.fc2(x))x = self.out(x)return x
  1. 模型训练
model = CIFAR10CNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)for epoch in range(10):  # 训练10个epochmodel.train()running_loss = 0.0for inputs, labels in trainloader:optimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.item()print(f'Epoch {epoch + 1}, Loss: {running_loss / len(trainloader):.3f}')
  1. 模型评估
# 构建数据加载器
dataloader = DataLoader(valid_dataset, batch_size=BATCH_SIZE, shuffle=True)
model.eval()# 计算精度和其他评估指标
y_true = []
y_pred = []
with torch.no_grad():for x, y in dataloader:x = x.to(device)y = y.to(device)output = model(x)y_pred.extend(torch.argmax(output, dim=-1).cpu().numpy())y_true.extend(y.cpu().numpy())# 混淆矩阵和分类报告
conf_mat = confusion_matrix(y_true, y_pred)
class_report = classification_report(y_true, y_pred, target_names=train_dataset.classes)# 打印分类报告
print("Classification Report:\n", class_report)# 绘制混淆矩阵
plt.figure(figsize=(10, 8))
sns.heatmap(conf_mat, annot=True, fmt='d', cmap='Blues', xticklabels=train_dataset.classes, yticklabels=train_dataset.classes)
plt.xlabel('Predicted')
plt.ylabel('True')
plt.title('Confusion Matrix')
plt.show()
3. 自然图像识别(ImageNet)

项目介绍
ImageNet数据集包含超过100万张带标签的高分辨率图像,分为1000个类别。它是深度学习和计算机视觉领域的标准数据集。

步骤

  1. 使用预训练模型
  2. 微调模型
  3. 模型评估

详细过程

  1. 使用预训练模型
from torchvision import modelsmodel = models.resnet18(pretrained=True)
  1. 微调模型
# 冻结除最后一层外的所有层
for param in model.parameters():param.requires_grad = False# 替换最后一层
model.fc = nn.Linear(model.fc.in_features, 1000)# 仅训练最后一层
optimizer = optim.Adam(model.fc.parameters(), lr=0.001)
  1. 模型训练
for epoch in range(5):  # 训练5个epochmodel.train()running_loss = 0.0for inputs, labels in trainloader:optimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.item()print(f'Epoch {epoch + 1}, Loss: {running_loss / len(trainloader):.3f}')
  1. 模型评估
model.eval()
correct = 0
total = 0
with torch.no_grad():for inputs, labels in testloader:outputs = model(inputs)_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()print(f'Accuracy: {100 * correct / total:.2f}%')

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

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

相关文章

SX2106B 2A同步降压型DC/DC转换器芯片IC

一般描述 SX2106B是一款同步降压DC/DC转换器,提供宽广的4.5V至24V输入电压范围和2A连续负载电流能力。 SX2106B故障保护包括逐周期电流限制、UVLO、输出过电压保护和热关机。可调软启动功能,防止启动时的浪涌电流。该器件采用电流模式控…

R语言数据分析案例28-对数据集可视化和T检验

一、分析主题: 本分析旨在对数据集进行可视化和 T 检验,以探索数据集中的变量之间的关系和差异。通过可视化数据,我们可以直观地了解数据的分布和趋势,而 T 检验则可以帮助我们确定这些差异是否具有统计学意义。 二、具体分析 …

【字符函数】

接下来介绍部分字符函数测试 2. 字符转换函数 1.字符分类函数 1.1iscntrl 注:任何控制字符 检查是否有控制字符 符合为真 int main() {int i 0;char str[] "first line \n second line \n";//判断是否遇到控制字符while (!iscntrl(str[i])){p…

【Java】多态、final关键字、抽象类、抽象方法

多态(Polymorphism) 【1】多态跟属性无关,多态指的是方法的多态,而不是属性的多态。 【2】案例代入: public class Animal {//父类:动物: public void shout(){ System.out.println("我是小动物&am…

Qt 非圆角图片裁剪为圆角图片

将Qt非圆角图片裁剪为圆角图片,步骤如下: 1、按照原始图片尺寸定义一张透明的新图形 2、使用画家工具在新图形上绘制一个圆角矩形线路 3、绘制图片 4、使用圆角矩形切割图片边角 封装成函数如下: QPixmap Widget::getRoundedPixmap(const QPixmap srcPix…

Vue引入element-plus-04

我们这次开发是使用vue的脚手架来进行开发,前面我们已经使用过最原生的方式去编写我们的vue的语法,从今天开始就使用vue的脚手架,但是前提是你需要用于node的环境 在我们开始之前,我们至少需要有node npm是什么? npm是一个强大的包管理工具,它…

Halcon 多相机统一坐标系

小杨说事-基于Halcon的多相机坐标系统一原理个人理解_多相机标定统一坐标系-CSDN博客 一、概述 最近在搞多相机标定等的相关问题,对于很大的场景,单个相机的视野是不够的,就必须要统一到一个坐标系下,因此我也用了4个相机&#…

人工智能ChatGPT的多种应用:提示词工程

简介 ChatGPT 的主要优点之一是它能够理解和响应自然语言输入。在日常生活中,沟通本来就是很重要的一门课程,沟通的过程中表达的越清晰,给到的信息越多,那么沟通就越顺畅。 和 ChatGPT 沟通也是同样的道理,如果想要 …

推荐系统三十六式学习笔记:原理篇.矩阵分解10|那些在Netflix Prize中大放异彩的推荐算法

目录 缘起矩阵分解为什么要矩阵分解1 基础的SVD算法2 增加偏置信息3 增加历史行为4 考虑时间因素 总结 我们先前聊过推荐系统中的经典问题,其中有一类就是评分预测。平心而论,评分预测问题只是很典型,其实并不大众。毕竟在实际的应用中&#…

最新情侣飞行棋高阶羞羞版,解锁私密版情侣小游戏,文末有福利!

今天要跟大家聊聊一种特别有意思的游戏——情侣飞行棋羞羞版。别急着脸红,这可是专为情侣设计的游戏,让你们在轻松愉快的氛围中,增进了解,加深感情。 谈恋爱,不就是两个人在一起,做些有趣的事情吗&#xf…

Opus从入门到精通(七)Opus编码基础之认识声音

Opus从入门到精通(七)Opus编码基础之认识声音 前面我们分析完Opus的编解码api使用,封装原理等,接下来我们准备分析Opus编码原理.Opus编码是一个复杂的工作,我们需要做一些基本铺垫,包括认识声音,压缩编码基础. 认识音频有助于我们了解音频特征,不仅对语音有助于我们理解编码技…

2021年9月电子学会青少年软件编程 中小学生Python编程等级考试三级真题解析(判断题)

2021年9月Python编程等级考试三级真题解析 判断题(共10题,每题2分,共20分) 26、readline()执行结果为字符串,readlines()执行结果为列表 答案:对 考点分析:考查文件读操作,readli…

【leetcode--同构字符串】

要求:判断两个字符串的形式是不是一致,即是不是AABC或者ABBBCC这种。 trick:使用set()结合zip()。 set()用法:用于创建一个不包含重复元素的集合 zip&#…

环保绩效评级:ABCD四个等级,你的企业处于哪个水平?

在当下社会,环保问题越来越受到人们的关注和重视。企业作为经济活动的重要参与者,其环保绩效评级直接关系到环境保护的成效。朗观视觉将详细解析环保绩效评级的ABCD四等级,帮助读者了解不同等级的特点和评判标准,进而引导企业提高…

大模型扫盲系列——初识大模型

本文将从大模型的原理、训练过程、prompt和相关应用介绍等方面进行分析,帮助读者初步了解大模型。 近年来,随着计算机技术和大数据的快速发展,深度学习在各个领域取得了显著的成果。为了提高模型的性能,研究者们不断尝试增加模型…

MySQL损坏,使用data恢复数据

MySQL损坏,重装MySQL使用data文件恢复数据库 1.清空相关注册表(清空安装残留)2.下载合适MySQL版本(与损坏数据库版本相同)3.数据恢复4.Windows server MySQL备份bat5.设置Windows定时执行 # 初始化安装 mysqld -install# 查看数据初始化密码 mysqld --initialize --…

工业 UI 风格,展现独特魅力

工业 UI 风格,展现独特魅力

Mysql之不使用部署在k8s集群的Mysql而是选择单独部署的Mysql的原因

测试准备: 线程组:并发数100,持续时间2min 两个请求:使用k8s集群中的mysql的wordpress对应端口30011 使用单独部署的mysql的wordpress的对应端口为30022 访问同一个博客 测试结果: 汇总报告: 响应时间图&…

HTML静态网页成品作业(HTML+CSS+JS)——游戏天天酷跑网页(4个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,使用Javacsript代码实现图片切换轮播,共有4个页面。 二、…

Linux---系统的初步学习【 项目二 管理Linux文件和目录】

项目二 管理Linux文件和目录 2.1项目知识准备 ​ 文件是存储在计算机上的数据集合。在Windows系统中,我们理解的文件可以是文本文档、图片、程序、音乐、视频等。在Linux中,一切皆文件,也就是除了Windows中所理解的文件,目录、字…