大数据深度学习卷积神经网络CNN:CNN结构、训练与优化一文全解

文章目录

  • 大数据深度学习卷积神经网络CNN:CNN结构、训练与优化一文全解
  • 一、引言
    • 1.1 背景和重要性
    • 1.2 卷积神经网络概述
  • 二、卷积神经网络层介绍
    • 2.1 卷积操作
      • 卷积核与特征映射
        • 卷积核大小
        • 多通道卷积
      • 步长与填充
        • 步长
        • 填充
      • 空洞卷积(Dilated Convolution)
      • 分组卷积(Grouped Convolution)
    • 2.2 激活函数
      • ReLU激活函数
        • 优势与劣势
      • Leaky ReLU
      • Sigmoid激活函数
        • 优势与劣势
      • Tanh激活函数
        • 优势与劣势
      • Swish激活函数
      • 其他激活函数
      • 激活函数的选择
    • 2.3 池化层
      • 最大池化(Max Pooling)
        • 优势与劣势
      • 平均池化(Average Pooling)
        • 优势与劣势
      • 全局平均池化(Global Average Pooling)
      • 池化窗口大小和步长
      • 池化的替代方案
      • 池化层的选择
    • 2.4 归一化层
      • 批量归一化(Batch Normalization)
        • 优势与劣势
      • 层归一化(Layer Normalization)
      • 实例归一化(Instance Normalization)
      • 组归一化(Group Normalization)
      • 归一化层的选择
  • 三、训练与优化
    • 3.1 训练集准备与增强
      • 数据预处理
      • 数据增强
        • 常见增强技巧
      • 训练集分割
  • 3.2 损失函数
    • 回归任务
    • 分类任务
    • 优化损失函数
  • 3.3 优化器
    • 随机梯度下降(SGD)
    • 自适应优化器
    • 优化器选择注意事项
  • 3.4 学习率调整
    • 固定学习率
    • 学习率调度
      • 预定调整
      • 自适应调整
    • 学习率预热
  • 3.5 正则化技巧
    • L1和L2正则化
    • Dropout
    • Batch Normalization
    • 数据增强
  • 3.6 模型评估与调优
    • 交叉验证
    • 调参技巧
    • 早停技巧
    • 模型集成
  • 4. 总结

大数据深度学习卷积神经网络CNN:CNN结构、训练与优化一文全解

本文全面探讨了卷积神经网络CNN,深入分析了背景和重要性、定义与层次介绍、训练与优化,详细分析了其卷积层、激活函数、池化层、归一化层,最后列出其训练与优化的多项关键技术:训练集准备与增强、损失函数、优化器、学习率调整、正则化技巧与模型评估调优。

一、引言

卷积神经网络(Convolutional Neural Networks, CNN)的复杂性和灵活性使其成为深度学习领域的核心研究主题之一。在本引言部分中,我们将深入探讨CNN的历史背景、基本原理、重要性以及其在科学和工业领域的影响。

在这里插入图片描述

1.1 背景和重要性

卷积神经网络的灵感源自人类视觉系统,特别是视觉皮层中的神经元结构。自Hubel和Wiesel在1962年的开创性工作以来,这一理念已经引发了一系列研究和发展。

  1. 早期发展: 由Yann LeCun等人在上世纪80年代末到90年代初开发的LeNet-5被视为第一个成功的卷积神经网络。LeNet-5在手写数字识别方面取得了令人印象深刻的结果。
  2. 现代崛起: 随着硬件的快速进展和大数据的涌现,CNN在21世纪初开始重新崛起,并在各个领域实现了突破性进展。

CNN的重要性不仅体现在其精度和效率上,而且还体现在其理论洞见上。例如,卷积层通过共享权重减少了参数数量,这有助于更有效地训练模型,还增强了模型对平移不变性的理解。

1.2 卷积神经网络概述

卷积神经网络是一种前馈神经网络,它的人工神经元可以响应周围单元的局部区域,从而能够识别视觉空间的部分结构特征。以下是卷积神经网络的关键组成部分:

  1. 卷积层: 通过卷积操作检测图像的局部特征。
  2. 激活函数: 引入非线性,增加模型的表达能力。
  3. 池化层: 减少特征维度,增加模型的鲁棒性。
  4. 全连接层: 在处理空间特征后,全连接层用于进行分类或回归。

卷积神经网络的这些组件协同工作,使得CNN能够从原始像素中自动学习有意义的特征层次结构。随着深度增加,这些特征从基本形状和纹理逐渐抽象为复杂的对象和场景表现。

卷积神经网络的独特优势在于其能够自动化许多传统机器学习中需要人工干预的特征工程部分。这一点不仅使其在许多任务中取得了优越性能,还激发了广泛的学术和工业界的兴趣。


二、卷积神经网络层介绍

卷积神经网络由多个层组成,每个层具有特定的目的和功能。这一部分将探讨卷积操作、激活函数、池化层、归一化层基本概念。

2.1 卷积操作

卷积操作是卷积神经网络的核心,涉及多个复杂的概念和细节。我们将逐一介绍它们。
在这里插入图片描述

卷积核与特征映射

卷积核是一个小型的矩阵,通过在输入上滑动来生成特征映射。每个卷积核都能捕获不同的特征,例如边缘、角点等。

卷积核大小

在这里插入图片描述

卷积核的大小影响了它能捕获的特征的尺度。较小的卷积核可以捕获更细致的特征,而较大的卷积核可以捕获更广泛的特征。

# 使用3x3的卷积核
conv_layer_small = nn.Conv2d(3, 64, 3)
# 使用5x5的卷积核
conv_layer_large = nn.Conv2d(3, 64, 5)
多通道卷积

在多通道输入下进行卷积,每个输入通道与一个卷积核进行卷积,然后所有的结果相加。这允许模型从不同的通道捕获不同的特征。

步长与填充

步长和填充控制卷积操作的几何属性。

步长

步长定义了卷积核在输入上移动的速度。较大的步长可以减少输出的尺寸,而较小的步长则保持尺寸不变。

# 使用步长2
conv_layer_stride2 = nn.Conv2d(3, 64, 3, stride=2)
填充

填充通过在输入边缘添加零来控制输出的尺寸。这有助于控制信息在卷积操作中的丢失。

# 使用填充1,使得输出尺寸与输入尺寸相同(假设步长为1)
conv_layer_padding1 = nn.Conv2d(3, 64, 3, padding=1)

空洞卷积(Dilated Convolution)

空洞卷积是一种扩展卷积核感受野的方法,它在卷积核的元素之间插入空白。这允许网络捕获更广泛的信息,而不增加卷积核的大小或计算量。

# 使用空洞率2的卷积核
conv_layer_dilated = nn.Conv2d(3, 64, 3, dilation=2)

分组卷积(Grouped Convolution)

分组卷积通过将输入通道分组并对每组使用不同的卷积核来扩展卷积操作。这增加了模型的容量,并使其能够学习更复杂的表示。

# 使用2个分组
conv_layer_grouped = nn.Conv2d(3, 64, 3, groups=2)

2.2 激活函数

在这里插入图片描述

激活函数在神经网络中起到了至关重要的作用。它们增加了模型的非线性,从而使其能够学习和逼近复杂的函数。

ReLU激活函数

ReLU(Rectified Linear Unit)是现代深度学习中最流行的激活函数之一。它是非线性的,但计算非常高效。

优势与劣势

ReLU的主要优点是计算效率高和促进稀疏激活。然而,它可能会导致"死亡ReLU"现象,其中某些神经元永远不会被激活。

# 使用PyTorch定义ReLU激活函数
relu = nn.ReLU()

Leaky ReLU

Leaky ReLU是ReLU的一种变体,允许负输入值的小正斜率。这有助于缓解"死亡ReLU"问题。

# 使用PyTorch定义Leaky ReLU激活函数
leaky_relu = nn.LeakyReLU(0.01)

Sigmoid激活函数

Sigmoid激活函数可以将任何值压缩到0和1之间。

优势与劣势

Sigmoid用于输出层可以表示概率,但在隐藏层中可能会导致梯度消失问题。

# 使用PyTorch定义Sigmoid激活函数
sigmoid = nn.Sigmoid()

Tanh激活函数

Tanh是另一个类似于Sigmoid的激活函数,但它将输出压缩到-1和1之间。

优势与劣势

Tanh通常优于Sigmoid,因为它的输出范围更大,但仍可能导致梯度消失。

# 使用PyTorch定义Tanh激活函数
tanh = nn.Tanh()

Swish激活函数

Swish是一种自适应激活函数,可能会自动调整其形状以适应特定问题。

# 使用PyTorch定义Swish激活函数
class Swish(nn.Module):
    def forward(self, x):
        return x * torch.sigmoid(x)

其他激活函数

还有许多其他激活函数,例如Softmax、Mish、ELU等,各有各的优点和适用场景。

激活函数的选择

激活函数的选择取决于许多因素,例如模型架构、数据类型和特定任务的需求。通过实验和调整,可以找到适合特定问题的最佳激活函数。

2.3 池化层

在这里插入图片描述

池化层(Pooling Layer)在卷积神经网络中扮演了重要角色,通常用于降低特征映射的维度,从而减少计算需求,并增加特征检测器的感受野。

最大池化(Max Pooling)

最大池化是最常用的池化技术之一。它通过选择窗口中的最大值来降低特征映射的尺寸。

# 使用PyTorch定义2x2的最大池化层
max_pooling = nn.MaxPool2d(2)
优势与劣势

最大池化的主要优点是它能保留窗口中的最显著特征。然而,它会丢失一些细节信息。

平均池化(Average Pooling)

与最大池化不同,平均池化使用窗口中所有值的平均值。

# 使用PyTorch定义2x2的平均池化层
average_pooling = nn.AvgPool2d(2)
优势与劣势

平均池化可以减轻最大池化可能导致的过于突出某些特征的问题,但可能会淡化一些重要特征。

全局平均池化(Global Average Pooling)

全局平均池化是一种更复杂的池化策略,它计算整个特征映射的平均值。这常用于网络的最后一层,直接用于分类。

# 使用PyTorch定义全局平均池化层
global_average_pooling = nn.AdaptiveAvgPool2d(1)

池化窗口大小和步长

池化窗口的大小和步长会直接影响输出的尺寸。较大的窗口和步长会更显著地降低尺寸。

池化的替代方案

池化层已经有了一些现代替代方案,例如使用卷积层的步长大于1,或使用空洞卷积。这些方法可能提供更好的特征保存。

池化层的选择

选择特定类型的池化层取决于任务需求和特定数据特性。深入理解各种池化技术如何工作,可以帮助深入理解它们是如何影响模型性能的。

2.4 归一化层

在这里插入图片描述

归一化层在训练深度神经网络时扮演了关键角色,主要用于改善训练的稳定性和速度。通过将输入数据缩放到合适的范围,归一化层有助于缓解训练过程中的梯度消失和梯度爆炸问题。

批量归一化(Batch Normalization)

批量归一化通过对每个特征通道的输入进行归一化,将输入缩放到零均值和单位方差。

# 使用PyTorch定义批量归一化层
batch_norm = nn.BatchNorm2d(num_features=64)
优势与劣势
  • 优势:它允许更高的学习率,提供了一些正则化效果,通常导致更快的训练。
  • 劣势:在小批量上的统计估计可能会导致训练和推理间的不一致。

层归一化(Layer Normalization)

层归一化是在单个样本上对所有特征进行归一化的变体。它在句子处理和循环神经网络中特别流行。

# 使用PyTorch定义层归一化
layer_norm = nn.LayerNorm(normalized_shape=64)

实例归一化(Instance Normalization)

实例归一化主要用于样式转换任务,归一化是在每个样本的每个通道上独立进行的。

# 使用PyTorch定义实例归一化
instance_norm = nn.InstanceNorm2d(num_features=64)

组归一化(Group Normalization)

组归一化是批量归一化和层归一化之间的一种折衷方案,将通道分为不同的组,并在每个组内进行归一化。

# 使用PyTorch定义组归一化
group_norm = nn.GroupNorm(num_groups=32, num_channels=64)

归一化层的选择

归一化层的选择应基于特定的任务和模型架构。例如,在视觉任务中,批量归一化可能是首选,而在NLP任务中,层归一化可能更有用。


三、训练与优化

在这里插入图片描述

卷积神经网络的训练和优化涉及许多关键组件和技术,它们共同决定了模型的性能和可用性。下面详细介绍这些方面。

3.1 训练集准备与增强

有效的训练数据是深度学习成功的基础。为了使卷积神经网络有效学习,训练集的选择和增强至关重要。

数据预处理

预处理是训练集准备的关键步骤,包括:

  • 标准化:将输入缩放到0-1范围。
  • 中心化:减去均值,使数据以0为中心。
  • 数据清洗:消除不一致和错误的数据。

数据增强

数据增强是一种通过应用随机变换增加数据量的技术,从而增加模型的泛化能力。

常见增强技巧
  • 图像旋转、缩放和剪裁
  • 颜色抖动
  • 随机噪声添加
# 使用PyTorch进行多种图像增强
from torchvision import transforms
transform = transforms.Compose([
    transforms.RandomRotation(10),
    transforms.RandomResizedCrop(224),
    transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1)
])

训练集分割

通常将数据分为训练集、验证集和测试集,以确保模型不会过拟合。

3.2 损失函数

损失函数衡量模型预测与真实目标之间的差距。选择适当的损失函数是优化模型性能的关键步骤。

回归任务

对于连续值预测,通常使用:

  • 均方误差(MSE):衡量预测值与真实值之间的平方差。
# 使用PyTorch定义MSE损失
mse_loss = nn.MSELoss()
  • 平滑L1损失:减少异常值的影响。

分类任务

对于类别预测,常见的损失函数包括:

  • 交叉熵损失:衡量预测概率分布与真实分布之间的差异。
# 使用PyTorch定义交叉熵损失
cross_entropy_loss = nn.CrossEntropyLoss()
  • 二元交叉熵损失:特别用于二分类任务。
  • 多标签损失:适用于多标签分类。

优化损失函数

选择适当的损失函数不仅取决于任务类型,还与模型架构、数据分布和特定的业务指标有关。有时,自定义损失函数可能是必要的,以便捕捉特定问题的核心挑战。

3.3 优化器

优化器用于更新神经网络的权重,以便最小化损失函数。每种优化器都有其特定的数学原理和应用场景。

随机梯度下降(SGD)

SGD是最基本的优化算法。

  • 基本SGD: 按照负梯度方向更新权重。
  • 带动量的SGD: 引入动量项,积累之前的梯度,以便更平稳地收敛。
# 使用PyTorch定义带动量的SGD优化器
optimizer_sgd_momentum = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

自适应优化器

自适应优化器能自动调整学习率。

  • Adam: 结合了Momentum和RMSProp的优点。
# 使用PyTorch定义Adam优化器
optimizer_adam = torch.optim.Adam(model.parameters(), lr=0.001)
  • Adagrad、RMSprop等: 针对不同参数有不同的学习率。

优化器选择注意事项

  • 任务相关性: 不同优化器在不同任务和数据上可能有不同的效果。
  • 超参数调优: 如学习率、动量等可能需要调整。

3.4 学习率调整

学习率是优化器中的关键超参数,其调整对模型训练有深远影响。

固定学习率

最简单的方法是使用固定学习率。但可能不够灵活。

学习率调度

更复杂的方法是在训练过程中动态调整学习率。

预定调整

  • 步骤下降: 在固定步骤处降低学习率。
  • 余弦退火: 周期性调整学习率。
# 使用PyTorch定义余弦退火调度器
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer_adam, T_max=50)

自适应调整

  • ReduceLROnPlateau: 基于验证损失降低学习率。

学习率预热

训练初期逐渐增加学习率。

  • 线性预热: 初始阶段线性增加学习率。

3.5 正则化技巧

正则化是防止过拟合和提高模型泛化能力的关键技术。

L1和L2正则化

  • L1正则化:倾向于产生稀疏权重,有助于特征选择。
  • L2正则化:减小权重,使模型更平滑。
# 使用PyTorch添加L1和L2正则化
l1_lambda = 0.0005
l2_lambda = 0.0001
loss = loss + l1_lambda * torch.norm(weights, 1) + l2_lambda * torch.norm(weights, 2)

Dropout

随机关闭一部分神经元,使模型更鲁棒。

  • 普通Dropout:随机丢弃神经元。
  • Spatial Dropout:在卷积层中随机丢弃整个特征图。

Batch Normalization

通过标准化层输入,加速训练并减轻初始化的敏感性。

数据增强

如前所述,数据增强是一种重要的正则化手段。

3.6 模型评估与调优

模型评估是衡量模型性能的过程,调优则是改进性能。

交叉验证

使用交叉验证来估计模型的泛化能力。

  • k-折交叉验证:将数据分为k个部分,轮流使用其中一个作为验证集。

调参技巧

  • 网格搜索:尝试不同超参数组合。
  • 随机搜索:随机选择超参数,更高效。

早停技巧

如果验证损失不再下降,则停止训练,以防止过拟合。

模型集成

通过结合多个模型来提高性能。

  • Bagging:训练多个模型并平均预测。
  • Boosting:在先前模型的错误上训练新模型。
  • Stacking:使用新模型组合其他模型的预测。

4. 总结

[外链图片转存中...(img-kMlGvINe-1705163206359)]

通过上面文章内容我们全面探讨了卷积神经网络CNN,深入分析了背景和重要性、定义与层次介绍、训练与优化,详细分析了其卷积层、激活函数、池化层、归一化层,最后列出其训练与优化的多项关键技术:训练集准备与增强、损失函数、优化器、学习率调整、正则化技巧与模型评估调优。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

八爪鱼拉拉手

欢迎来到程序小院 八爪鱼拉拉手 玩法&#xff1a;点击鼠标左键拖动移动八爪鱼&#xff0c;当他的手很忙的时候他会很高兴&#xff0c; 不同关卡不同的八爪鱼的位置摆放&#xff0c;快去闯关吧^^。开始游戏https://www.ormcc.com/play/gameStart/248 html <div id"gam…

Gauss消去法(C++)

文章目录 算法描述顺序Gauss消去法列选主元Gauss消去法全选主元Gauss消去法Gauss-Jordan消去法 算法实现顺序Gauss消去法列选主元Gauss消去法全选主元Gauss消去法列选主元Gauss-Jordan消去法 实例分析 Gauss消去法是求解线性方程组较为有效的方法, 它主要包括两个操作, 即消元和…

开源云原生安全的现状

近年来&#xff0c;人们非常重视软件供应链的安全。尤其令人担忧的是开源软件发行版中固有的风险越来越多。这引发了围绕云原生开源安全的大量开发&#xff0c;其形式包括软件物料清单 (SBOM)、旨在验证 OSS 包来源的项目等。 许多组织循环使用大型开源包&#xff0c;但只使用…

NLP技术在搜索推荐场景中的应用

NLP技术在搜索推荐中的应用非常广泛&#xff0c;例如在搜索广告的CTR预估模型中&#xff0c;NLP技术可以从语义角度提取一些对CTR预测有效的信息&#xff1b;在搜索场景中&#xff0c;也经常需要使用NLP技术确定展现的物料与搜索query的相关性&#xff0c;过滤掉相关性较差的物…

设计模式——抽象工厂模式(Abstract Factory Pattern)

概述 抽象工厂模式的基本思想是将一些相关的产品组成一个“产品族”&#xff0c;由同一个工厂统一生产。在工厂方法模式中具体工厂负责生产具体的产品&#xff0c;每一个具体工厂对应一种具体产品&#xff0c;工厂方法具有唯一性&#xff0c;一般情况下&#xff0c;一个具体工厂…

YOLOv5改进 | 二次创新篇 | 结合iRMB和EMA形成全新的iEMA机制(全网独家创新)

一、本文介绍 本文给大家带来的改进机制是二次创新的机制,二次创新是我们发表论文中关键的一环,为什么这么说,从去年的三月份开始对于图像领域的论文发表其实是变难的了,在那之前大家可能搭搭积木的情况下就可以简单的发表一篇论文,但是从去年开始单纯的搭积木其实发表论…

第1课 ROS 系统介绍

1.ROS操作系统介绍 在学习ROS 系统前&#xff0c;我们需要先了解操作系统的定义。操作系统&#xff0c;顾名思义&#xff0c;即提供部分软件和硬件的接口&#xff0c;以供用户直接使用。因此&#xff0c;针对不同的平台、不同的功能&#xff0c;需要采用不同的操作系统来完成底…

Three.js 纹理贴图的实现

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 纹理贴图简介 当我们创建一个网格时&#xff0c;比如我们不起眼的立…

大模型开启应用时代 数钉科技一锤定音

叮叮叮叮&#xff01;数钉智造大模型&#xff0c;“定音”强势发布&#xff01; 随着科技的飞速发展&#xff0c;大模型技术已逐渐成为推动产业变革的核心力量。在这一浪潮中&#xff0c;数钉科技凭借深厚的技术积累和敏锐的市场洞察力&#xff0c;成功利用大模型技术搭建起智能…

鸿蒙开发-UI-布局

鸿蒙开发-序言 鸿蒙开发-工具 鸿蒙开发-初体验 鸿蒙开发-运行机制 鸿蒙开发-运行机制-Stage模型 鸿蒙开发-UI 鸿蒙开发-UI-组件 鸿蒙开发-UI-组件-状态管理 鸿蒙开发-UI-应用-状态管理 鸿蒙开发-UI-渲染控制 文章目录 前言 一、布局概述 1.布局结构 2.布局元素组成 3.布局分类 …

场效应管在电路中如何控制电流大小

场效应管的概念 场效应晶体管&#xff08;FieldEffectTransistor缩写&#xff08;FET&#xff09;&#xff09;简称场效应管。主要有两种类型&#xff08;juncTIonFET—JFET&#xff09;和金属-氧化物半导体场效应管&#xff08;metal-oxidesemiconductorFET&#xff0c;简称M…

操作系统详解(5)——信号(Signal)

系列文章&#xff1a; 操作系统详解(1)——操作系统的作用 操作系统详解(2)——异常处理(Exception) 操作系统详解(3)——进程、并发和并行 操作系统详解(4)——进程控制(fork, waitpid, sleep, execve) 文章目录 概述信号的种类Hardware EventsSoftware Events 信号的原理信号…

YOLOv8改进 | 注意力篇 | 实现级联群体注意力机制CGAttention (全网首发)

一、本文介绍 本文给大家带来的改进机制是实现级联群体注意力机制CascadedGroupAttention,其主要思想为增强输入到注意力头的特征的多样性。与以前的自注意力不同,它为每个头提供不同的输入分割,并跨头级联输出特征。这种方法不仅减少了多头注意力中的计算冗余,而且通过增…

虚幻UE 特效-Niagara特效初识

虚幻的Niagara特效系统特别的强大&#xff0c;可以为开发者提供丰富的视觉效果&#xff01; 本篇笔记对Niagara系统进行初步的学习探索 文章目录 前言一、Niagara四大核心组件二、粒子发射器和粒子系统1、粒子发射器的创建2、粒子系统的创建3、Niagara系统的使用 总结 前言 在…

【SSM框架】初识Spring

初识Spring Spring家族 Spring发展到今天已经形成了一种开发的生态圈&#xff0c;Spring提供了若千个项目&#xff0c;每个项目用于完成特定的功能 ✅Spring Framework&#xff08;底层框架&#xff09;Spring Boot&#xff08;提高开发速度&#xff09;Spring Cloud&#xf…

C# 图解教程 第5版 —— 第24章 预处理指令

文章目录 24.1 什么是预处理指令24.2 基本规则24.3 符号指令&#xff08;#define、#undef &#xff09;24.4 条件编译&#xff08;#if、#else、#elif、#endif&#xff09;24.5 条件编译结构24.6 诊断指令&#xff08;#warning、#error&#xff09;24.7 行号指令&#xff08;#li…

最新域名群站开源系统:打造强大网站矩阵,引领SEO优化新潮流!

搭建步骤 第一步&#xff1a;安装PHP和MYSQL服务器环境 对于想要深入了解网站建设的人来说&#xff0c;自己动手安装PHP和MYSQL服务器环境是必不可少的步骤。这将使你能够更好地理解网站的运行机制&#xff0c;同时为后续的网站开发和优化打下坚实基础。 第二步&#xff1a;…

迅腾文化用网络集成化生态系统助力品牌之路的坚实后盾

商业竞争激烈&#xff0c;品牌不仅是企业的标志和形象&#xff0c;更是其核心价值和竞争力的体现。然而&#xff0c;企业在品牌推广过程中面临着诸多如缺乏有效的渠道管理、品牌形象模糊以及竞争激烈的市场环境等。这些阻碍着企业的品牌发展和市场占有率的提升。本文将通过企业…

[GN] nodejs16.13.0版本完美解决node-sass和sass-loader版本冲突问题

项目场景&#xff1a; npm install 运行vue项目时候 问题描述 项目场景&#xff1a;sass-loader &#xff0c;node-sass出错 ! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: smoore-mes-web1.4.0 npm ERR! Found: webpack3.12.0 npm ER…

【计算机组成原理】高速缓冲存储器 Cache 的写策略(Writing Policy)

写策略 Writing Policy 缓存的写策略指的是确定何时将数据写入缓存或主存的策略。 写命中 Write Hit 全写法 Write Through 在全写法策略中&#xff0c;每次发生写操作时都会将数据同时写入缓存和主存。这样可以保证数据的一致性&#xff0c;但会增加主存的写入操作&#xf…