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

视觉经典神经网络与复现:深入解析与实践指南

目录

引言

经典视觉神经网络模型详解

1. LeNet-5:卷积神经网络的先驱

LeNet-5的关键特点:

2. AlexNet:深度学习的突破

AlexNet的关键特点:

3. VGGNet:深度与简洁的平衡

VGGNet的关键特点:

4. ResNet:解决梯度消失问题

ResNet的关键特点:

5. Inception:网络中的网络

Inception的关键特点:

复现经典神经网络的详细步骤

环境准备

数据准备

数据归一化

数据增强

模型构建

卷积层

池化层

全连接层

编译模型

损失函数

优化器

评估指标

训练模型

批次大小

训练轮数

验证集

评估模型

测试集

性能分析

可视化结果

损失曲线

准确率曲线

混淆矩阵

可视化结果

特征图可视化

热力图

模型调优

超参数调整

模型剪枝和量化

结论

进一步学习


引言

深度学习技术在计算机视觉领域的应用已经取得了革命性的进展。视觉神经网络(CNNs)作为这一领域的核心技术,已经在图像识别、目标检测、图像分割等多个领域展现出了巨大的潜力。本文旨在深入探讨几个视觉领域中的经典神经网络模型,并提供一个详细的复现指南,帮助读者理解这些模型的内部机制,并能够在实际项目中应用这些技术。

经典视觉神经网络模型详解

1. LeNet-5:卷积神经网络的先驱

LeNet-5由Yann LeCun等人于1998年提出,是卷积神经网络的先驱之一。它主要用于手写数字识别,其结构包括两个卷积层、两个池化层和三个全连接层。LeNet-5的成功应用开启了卷积神经网络在图像识别领域的新纪元。LeNet-5的设计简洁而有效,它通过卷积层提取图像特征,池化层降低特征维度,全连接层进行分类。这一结构成为了后续卷积神经网络设计的基石。

LeNet-5的关键特点:
  • 局部感受野:LeNet-5的卷积层使用小尺寸的卷积核(5x5),这使得网络能够捕捉局部特征,同时减少参数数量。
  • 参数共享:卷积层的权重在整个输入图像上共享,减少了模型的参数数量,同时使得模型能够捕捉到图像中的平移不变性。
  • 池化层:LeNet-5使用平均池化层来降低特征图的空间维度,同时保持特征的不变性,这有助于减少计算量并提高模型的泛化能力。
  • 非线性激活:LeNet-5使用Sigmoid激活函数引入非线性,使得模型能够学习复杂的函数映射,增强了模型的表达能力。
  • 结构设计:LeNet-5的设计考虑了数字图像的特定结构,例如,输入层的大小为32x32,这与当时手写数字图像的标准大小相匹配。

2. AlexNet:深度学习的突破

AlexNet由Alex Krizhevsky等人在2012年提出,并在当年的ImageNet竞赛中取得了冠军。它包含五个卷积层和三个全连接层,使用ReLU激活函数和Dropout技术来防止过拟合。AlexNet的成功标志着深度学习在视觉识别领域的崛起。AlexNet的设计在LeNet-5的基础上进行了扩展,增加了网络的深度和宽度,提高了模型的性能。

AlexNet的关键特点:
  • ReLU激活函数:AlexNet引入了ReLU激活函数,它不仅计算效率高,而且能够缓解梯度消失问题,使得深层网络的训练成为可能。
  • Dropout正则化:为了防止过拟合,AlexNet在训练过程中随机丢弃一部分神经元,这有助于模型在训练过程中保持稀疏性,提高泛化能力。
  • 数据增强:AlexNet通过随机裁剪和水平翻转来增加数据的多样性,提高模型的泛化能力,这在当时是一个创新的做法。
  • 局部响应归一化:AlexNet在ReLU激活后使用局部响应归一化(LRN)来增强模型的泛化能力,这有助于减少不同特征之间的干扰。
  • GPU加速:AlexNet是第一个大规模利用GPU进行训练的网络,这使得训练大型深度网络变得可行,大大缩短了训练时间。

3. VGGNet:深度与简洁的平衡

VGGNet由牛津大学的视觉几何组(Visual Geometry Group)提出,它通过重复使用小卷积核(3x3)和步长为1的卷积操作,减少了参数数量,同时保持了网络的深度。VGGNet的结构简单,易于训练,且在多个视觉任务上表现出色。VGGNet的设计哲学是“一个尺寸适合所有”,即通过增加网络的深度来提高性能,而不是改变卷积核的大小。

VGGNet的关键特点:
  • 小卷积核:VGGNet全部使用3x3的卷积核,这使得网络能够捕捉更细粒度的特征,同时减少了计算量。
  • 深度:VGGNet的网络深度达到了16层或19层,这在当时是前所未有的,它证明了深度网络在视觉任务上的有效性。
  • 连续的卷积层:VGGNet的卷积层之间没有池化层,这使得网络能够更有效地捕捉局部特征,同时保持了特征图的空间维度。
  • 均匀的结构:VGGNet的所有卷积层都具有相同的结构,这简化了网络的训练和优化,使得网络更容易扩展。
  • 全局平均池化:VGGNet在网络的末端使用全局平均池化层替代全连接层,这减少了模型的参数数量,同时保持了特征的全局信息。

4. ResNet:解决梯度消失问题

ResNet(残差网络)由何恺明等人在2015年提出,解决了深层网络训练中的梯度消失问题。通过引入残差学习框架,ResNet能够训练非常深的网络(如1000层),并在多个视觉任务上取得了优异的成绩。ResNet的核心思想是残差学习,即通过添加跳过连接来允许梯度直接通过网络流动,从而避免了梯度消失问题。

ResNet的关键特点:
  • 残差学习:ResNet通过添加跳过连接(也称为快捷连接)来实现残差学习,这使得网络能够学习恒等映射,从而解决了梯度消失问题。
  • 深度网络训练:ResNet能够训练非常深的网络,如50层、100层甚至1000层,这在以往的网络中是难以实现的,它证明了深度网络的强大性能。
  • 瓶颈结构:ResNet的每个残差块使用1x1的卷积核来减少特征图的通道数,这被称为瓶颈结构,它有助于减少模型的参数数量和计算量。
  • 全局平均池化:ResNet在网络的最后使用全局平均池化来替代全连接层,这减少了模型的参数数量,同时保持了特征的全局信息。
  • 训练策略:ResNet采用了特殊的训练策略,例如使用更高的初始学习率和更小的权重衰减,这有助于更有效地训练深层网络。

5. Inception:网络中的网络

Inception网络,也称为GoogLeNet,通过使用不同大小的卷积核并行捕获信息,然后合并结果,有效地增加了网络的深度和宽度。Inception网络的设计思想是在同一层中并行使用不同尺寸的卷积核,这样可以在不同尺度上捕捉图像特征。Inception网络的结构复杂而高效,它在2014年的ImageNet竞赛中取得了冠军。

Inception的关键特点:
  • 多尺度特征融合:Inception网络在同一层中并行使用1x1、3x3和5x5的卷积核,这使得网络能够同时捕捉不同尺度的特征,提高了特征的表达能力。
  • 1x1卷积核:Inception网络使用1x1的卷积核来减少特征图的通道数,这有助于减少计算量,并且可以看作是一种特征的维度变换。
  • 辅助分类器:Inception网络在网络中间添加辅助分类器,这有助于提高模型的训练稳定性,并且可以提供早期的停止信号。
  • 深度可分离卷积:Inception网络在后续版本中引入了深度可分离卷积,这进一步减少了模型的参数数量和计算量,使得网络更加高效。
  • 模块化设计:Inception网络的设计采用了模块化的思想,每个Inception模块可以独立地在不同尺度上捕捉特征,这使得网络更加灵活和可扩展。

复现经典神经网络的详细步骤

环境准备

在开始复现之前,需要准备好以下环境:

  • Python:作为编程语言,Python具有丰富的库支持,是深度学习研究和开发的首选语言。Python的简洁性和强大的社区支持使得它成为实现深度学习算法的理想选择。
  • TensorFlow/Keras:作为深度学习框架,TensorFlow和Keras提供了强大的API支持,使得构建和训练神经网络变得简单快捷。TensorFlow的灵活性和Keras的易用性使得它们成为实现复杂神经网络的首选工具。
  • NumPy:用于数值计算,NumPy是Python中进行科学计算的基础库,提供了高效的数组操作和数学函数。NumPy的高性能使得它成为深度学习中数据处理和数值计算的必备工具。
  • Matplotlib:用于数据可视化,Matplotlib是Python中常用的绘图库,可以方便地绘制训练过程中的损失和准确率曲线。Matplotlib的灵活性和易用性使得它成为可视化深度学习结果的理想选择。

数据准备

以MNIST手写数字数据集为例,可以使用Keras内置的API直接加载:

from tensorflow.keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1).astype('float32') / 255
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1).astype('float32') / 255

在数据准备阶段,除了加载数据集外,还需要进行数据预处理,包括归一化、数据增强等操作,以提高模型的性能和泛化能力。

数据归一化

数据归一化是深度学习中常用的预处理步骤,它能够加快模型的收敛速度,并提高模型的性能。对于图像数据,通常将像素值归一化到[0,1]或[-1,1]的范围内。归一化后的数据有助于模型更快地学习,因为它确保了不同特征的尺度一致性。

数据增强

数据增强是通过随机变换增加数据集的多样性,这有助于模型学习到更加鲁棒的特征。对于图像数据,常用的数据增强方法包括随机裁剪、旋转、翻转等。数据增强可以有效地扩大训练集,减少过拟合的风险,并提高模型的泛化能力。

模型构建

以LeNet-5为例,构建模型:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Densemodel = Sequential([Conv2D(6, kernel_size=(5, 5), activation='relu', input_shape=(28, 28, 1)),MaxPooling2D(pool_size=(2, 2)),Conv2D(16, (5, 5), activation='relu'),MaxPooling2D(pool_size=(2, 2)),Flatten(),Dense(120, activation='relu'),Dense(84, activation='relu'),Dense(10, activation='softmax')
])

在模型构建阶段,需要根据具体的任务选择合适的网络结构和层类型。对于不同的视觉任务,可能需要调整卷积层、池化层、全连接层的数量和参数。构建模型的过程是一个迭代和实验的过程,需要根据模型在训练集和验证集上的表现不断调整和优化。

卷积层

卷积层是CNN中的核心,它通过卷积核提取图像的局部特征。卷积层的参数包括卷积核的数量、大小、步长和填充方式等。卷积层的设计直接影响到模型的性能和计算效率。在实际应用中,可能需要尝试不同的卷积核大小和数量,以找到最佳的模型结构。

池化层

池化层用于降低特征图的空间维度,同时保持特征的不变性。常用的池化方式包括最大池化和平均池化。最大池化能够捕捉局部特征中最显著的部分,而平均池化则能够捕捉局部特征的平均信息。池化层的设计需要考虑到特征图的大小和模型的计算效率。

全连接层

全连接层将特征图展平后进行分类或回归。在CNN中,全连接层通常位于网络的末端,用于输出最终的预测结果。全连接层的参数数量通常很大,因此需要谨慎设计,以避免过拟合。在实际应用中,可能需要使用Dropout等正则化技术来减少过拟合的风险。

编译模型

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

在模型编译阶段,需要选择合适的损失函数、优化器和评估指标。对于分类任务,常用的损失函数包括交叉熵损失;对于回归任务,常用的损失函数包括均方误差损失。优化器的选择会影响到模型的训练效率和最终性能,常用的优化器包括SGD、Adam、RMSprop等。评估指标用于衡量模型的性能,常用的评估指标包括准确率、精确率、召回率等。

损失函数

损失函数用于衡量模型预测值和真实值之间的差异,优化器的目标是最小化损失函数。选择合适的损失函数对于模型的训练至关重要。例如,对于多分类问题,通常使用交叉熵损失;对于回归问题,通常使用均方误差损失。

优化器

优化器用于更新模型的权重,以最小化损失函数。不同的优化器有不同的优化策略和特点。例如,SGD是一种传统的优化器,它使用梯度下降法来更新权重;Adam是一种自适应学习率优化器,它结合了RMSprop和Momentum的优点,通常能够更快地收敛。

评估指标

评估指标用于衡量模型的性能,常用的评估指标包括准确率、精确率、召回率等。准确率是最常用的评估指标,它衡量了模型预测正确的样本比例;精确率和召回率则用于衡量模型在特定类别上的性能,它们分别衡量了模型预测为正样本的样本中实际为正样本的比例和实际为正样本的样本中被预测为正样本的比例。

训练模型

model.fit(x_train, y_train, epochs=10, validation_split=0.1, batch_size=32)

在模型训练阶段,需要设置训练的轮数(epochs)、批次大小(batch size)和验证集比例(validation split)。训练过程中,模型将通过反向传播算法不断更新权重,以最小化损失函数。训练的目的是找到一组权重,使得模型在训练集上的损失最小,同时具有良好的泛化能力。

批次大小

批次大小决定了每次更新权重时使用的样本数量。较小的批次大小可以提高模型的泛化能力,但可能会增加训练时间。较大的批次大小可以加快训练速度,但可能会影响模型的收敛性和泛化能力。批次大小的选择需要根据具体的硬件条件和模型结构来确定。

训练轮数

训练轮数决定了模型训练的总次数。过多的训练轮数可能导致过拟合,而过少的训练轮数可能导致欠拟合。训练轮数的选择需要根据模型在训练集和验证集上的表现来确定。通常,可以通过监控验证集上的损失和准确率来决定何时停止训练。

验证集

验证集用于在训练过程中评估模型的性能,以防止过拟合。通过在每个epoch后在验证集上评估模型,可以及时调整训练策略,例如调整学习率、增加Dropout等。验证集的选择需要确保其与训练集的分布一致,以便于评估结果的准确性。

评估模型

test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"Test accuracy: {test_acc}")

在模型评估阶段,需要在测试集上评估模型的性能,并使用混淆矩阵、ROC曲线等工具进行深入分析。测试集用于最终评估模型的性能。测试集应该与训练集和验证集互斥,以确保评估结果的公正性。

测试集

测试集用于最终评估模型的性能。测试集应该与训练集和验证集互斥,以确保评估结果的公正性。测试集的选择需要确保其与训练集的分布一致,以便于评估结果的准确性。

性能分析

性能分析可以帮助我们理解模型在不同类别上的表现,找出模型的优缺点,并指导后续的模型优化。常用的性能分析工具包括混淆矩阵、ROC曲线等。混淆矩阵可以展示模型在每个类别上的性能,包括真正例、假正例、真负例和假负例。ROC曲线可以展示模型在不同阈值下的性能,包括真正例率和假正例率。

可视化结果

使用Matplotlib可视化训练和测试的准确率:

import matplotlib.pyplot as pltplt.plot(range(1, 11), history.history['accuracy'], label='Training Accuracy')
plt.plot(range(1, 11), history.history['val_accuracy'], label='Validation Accuracy')
plt.legend()
plt.show()

在结果可视化阶段,可以使用图表和图像直观地展示模型的训练过程和性能。常用的可视化工具包括Matplotlib、Seaborn等。可视化结果可以帮助我们更直观地理解模型的训练过程和性能,发现潜在的问题,并指导后续的模型优化。

损失曲线

损失曲线展示了模型在训练过程中损失函数的变化情况,可以帮助我们判断模型是否收敛。如果损失曲线持续下降,说明模型正在学习;如果损失曲线波动或上升,可能需要调整模型结构或训练策略。

准确率曲线

准确率曲线展示了模型在训练过程中准确率的变化情况,可以帮助我们判断模型是否过拟合或欠拟合。如果训练准确率持续提高,而验证准确率停滞或下降,可能存在过拟合;如果训练准确率和验证准确率都很低,可能存在欠拟合。

混淆矩阵

混淆矩阵展示了模型在测试集上的性能,可以帮助我们了解模型在不同类别上的表现。混淆矩阵中的每个元素代表模型在特定类别上的真实和预测情况,包括真正例、假正例、真负例和假负例。

可视化结果

除了准确率曲线和损失曲线,还有其他几种重要的可视化手段可以帮助我们更好地理解模型的性能和行为。

特征图可视化

特征图(或称为激活图)可视化是一种展示卷积神经网络中间层输出的方法。通过观察这些特征图,我们可以了解网络在不同层次上是如何响应输入图像的。例如,较低层次的特征图可能响应简单的边缘和纹理,而较高层次的特征图可能响应更复杂的形状和对象部分。

from tensorflow.keras.models import Model# 提取中间层的输出作为新模型的输出
layer_outputs = [layer.output for layer in model.layers[-4:]]
activation_model = Model(inputs=model.input, outputs=layer_outputs)
activations = activation_model.predict(x_test[0].reshape(1, 28, 28, 1))# 可视化第一个测试图像在中间层的激活
for activation_map in activations:plt.matshow(activation_map[0, :, :, 0], cmap='viridis')plt.show()
热力图

热力图是一种将模型的预测概率或梯度与输入图像相关联的可视化技术。通过这种方式,我们可以直观地看到模型在做出预测时,哪些部分的输入图像对模型的决策影响最大。

# 假设我们有一个名为model的预训练模型和一个名为x_test的测试集
from tensorflow.keras.preprocessing.image import img_to_array
from tensorflow.keras import backend as K# 将模型的预测转换为梯度相对于输入的函数
grads = K.gradients(model.output, model.input)[0]# 计算测试图像的梯度
iterate = K.function([model.input], [model.output, grads])
[loss, grads_val] = iterate([x_test[0].reshape(1, 28, 28, 1)])# 将梯度值归一化到[0, 1]范围内
loss, grads_val = loss[0], grads_val[0]
grads_val = grads_val.reshape(28, 28, -1)
grads_val = grads_val / np.max(grads_val)# 生成热力图
plt.imshow(x_test[0], cmap='viridis')
plt.imshow(grads_val, cmap='jet', alpha=0.5)
plt.show()

模型调优

在模型训练和评估之后,通常需要进行调优以提高模型的性能。调优可以包括调整模型结构、改变超参数、尝试不同的优化器或损失函数等。

超参数调整

超参数调整是机器学习中的一个重要步骤,它涉及到选择最优的超参数组合以提高模型的性能。超参数包括学习率、批次大小、训练轮数、卷积层的数量和大小等。

from tensorflow.keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import GridSearchCV# 定义模型构建函数
def create_model():model = Sequential()model.add(Conv2D(6, (5, 5), activation='relu', input_shape=(28, 28, 1)))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Conv2D(16, (5, 5), activation='relu'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Flatten())model.add(Dense(120, activation='relu'))model.add(Dense(84, activation='relu'))model.add(Dense(10, activation='softmax'))model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])return model# 创建KerasClassifier实例
model = KerasClassifier(build_fn=create_model, verbose=0)# 定义超参数网格
param_grid = {'batch_size': [16, 32, 64],'epochs': [10, 20, 30],'optimizer': ['adam', 'rmsprop']
}# 创建GridSearchCV实例并进行搜索
grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1, cv=3)
grid_result = grid.fit(x_train, y_train)# 输出最佳超参数组合
print("最佳: %f 使用 %s" % (grid_result.best_score_, grid_result.best_params_))
模型剪枝和量化

模型剪枝和量化是减少模型大小和提高推理速度的两种技术。模型剪枝通过移除模型中不重要的权重来减少模型的复杂度,而量化则是将模型的权重和激活从浮点数转换为低精度的表示,如int8。

结论

通过复现这些经典视觉神经网络,我们不仅能够深入了解它们的工作原理,还能够在实际项目中应用这些模型,解决复杂的视觉识别问题。随着技术的不断进步,新的网络结构和优化技术也在不断涌现,但这些经典模型仍然是理解深度学习在视觉领域应用的重要基石。

进一步学习

对于每个模型的具体细节和代码实现,建议读者查阅相关文献和在线资源,进行深入学习。以下是一些推荐的资源:

  • LeNet-5:Yann LeCun等人的原始论文《Gradient-Based Learning Applied to Document Recognition》。
  • AlexNet:Alex Krizhevsky等人的论文《ImageNet Classification with Deep Convolutional Neural Networks》。
  • VGGNet:牛津大学视觉几何组的论文《Very Deep Convolutional Networks for Large-Scale Image Recognition》。
  • ResNet:何恺明等人的论文《Deep Residual Learning for Image Recognition》。
  • Inception:GoogLeNet团队的论文《Going Deeper with Convolutions》。

相关文章:

视觉经典神经网络与复现:深入解析与实践指南

目录 引言 经典视觉神经网络模型详解 1. LeNet-5:卷积神经网络的先驱 LeNet-5的关键特点: 2. AlexNet:深度学习的突破 AlexNet的关键特点: 3. VGGNet:深度与简洁的平衡 VGGNet的关键特点: 4. ResNe…...

ByConity ELT 测试体验

在实际业务中,用户会基于不同的产品分别构建实时数仓和离线数仓。其中,实时数仓强调数据能够快速入库,且在入库的第一时间就可以进行分析,低时延的返回分析结果。而离线数仓强调复杂任务能够稳定的执行完,需要更好的内…...

对象键值对内容映射

对象映射: 数据字段的英文名映射为更易理解的中文标签进行展示。即数据字段英文名 -> 中文描述。 作用: 提高代码的可读性。支持数据字段与展示内容的解耦,方便修改展示语言或样式,而无需改动数据源。 映射特点&#xff1a…...

《生成式 AI》课程 第7講:大型語言模型修練史 — 第二階段: 名師指點,發揮潛力 (兼談對 ChatGPT 做逆向工程與 LLaMA 時代的開始)

资料来自李宏毅老师《生成式 AI》课程,如有侵权请通知下线 Introduction to Generative AI 2024 Springhttps://speech.ee.ntu.edu.tw/~hylee/genai/2024-spring.php 摘要 这一系列的作业是为 2024 年春季的《生成式 AI》课程设计的,共包含十个作业。…...

学习C#中的反射

在C#编程中,反射(Reflection)是一项强大且灵活的技术,它允许程序在运行时动态地获取类型信息、创建对象实例、调用方法、访问字段和属性等。这种机制极大地增强了程序的动态性和可扩展性,使得开发者能够在编译时未知的…...

学习使用jquery实现在指定div前面增加内容

学习使用jquery实现在指定div前面增加内容 设计思路代码示例 设计思路 选择要添加内容的指定元素‌: 使用jQuery选择器来选择你希望在其前添加内容的元素。例如,如果你有一个 元素,其ID为qipa250,你可以使用$(‘#qipa250’)来选择…...

react项目初始化配置步骤

1.npx create-react-app 项目名称 vue项目同理 2.去编辑器市场安装所需插件,例如ESlint以及Prettier-Code formatter formatiing-toggle 3.在项目中安装 ESLint 和 Prettier 及相关插件: 3.1: npm install --save-dev eslint prettier 3.2…...

vue使用百度富文本编辑器

1、安装 npm add vue-ueditor-wrap 或者 pnpm add vue-ueditor-wrap 进行安装 2、下载UEditor 官网:ueditor:rich text 富文本编辑器 - GitCode 整理好的:vue-ueditor: 百度编辑器JSP版 因为官方的我没用来,所以我自己找的另外的包 …...

异常处理(6)自定义异常

异常处理(6)自定义异常类 1、自定义异常要求: (1)要继承一个异常类型 自定义一个编译时异常类型:自定义类继承java.lang.Exception。 自定义一个运行时异常类型:自定义类继承java.lang.Runtim…...

微软正在测试 Windows 11 对第三方密钥的支持

微软目前正在测试 WebAuthn API 更新,该更新增加了对使用第三方密钥提供商进行 Windows 11 无密码身份验证的支持。 密钥使用生物特征认证,例如指纹和面部识别,提供比传统密码更安全、更方便的替代方案,从而显著降低数据泄露风险…...

时间的礼物:如何珍视每一刻

《时间的礼物:如何珍视每一刻》 夫时间者,宇宙之精髓,生命之经纬,悄无声息而流转不息,如织锦之细线,串联古今,贯穿万物。 人生短暂,犹如白驹过隙,倏忽而逝,…...

初级 Python 数据脱敏技术及应用

文章目录 引言:为什么需要数据脱敏?常见的数据脱敏技术字符替换加密脱敏数据伪造组合策略 数据脱敏的合规性和伦理脱敏方案选择脱敏操作的性能优化结论 引言:为什么需要数据脱敏? 随着数据隐私问题越来越受到重视,数据…...

1063 Set Similarity (25)

Given two sets of integers, the similarity of the sets is defined to be Nc​/Nt​100%, where Nc​ is the number of distinct common numbers shared by the two sets, and Nt​ is the total number of distinct numbers in the two sets. Your job is to calculate th…...

Web登录页面设计

记录第一个前端界面,暑假期间写的,用了Lottie动画和canvas标签做动画,登录和注册也连接了数据库。 图片是从网上找的,如有侵权私信我删除,谢谢啦~...

【大数据学习 | Spark】Spark on hive与 hive on Spark的区别

1. Spark on hive Spark on hive指的是使用Hive的元数据(Metastore)和SQL解析器(HiveQL)。这种方式下,spark可以读取和写入hive表,利用hive的元数据信息来进行表结构的定义和管理。 具体特点为: 1.1 元数据共享 sp…...

软件测试丨Pytest 第三方插件与 Hook 函数

Pytest不仅是一个用于编写简单和复杂测试的框架,还有大量的第三方插件以及灵活的Hook函数供我们使用,这些功能大大增强了其在软件测试中的应用。通过使用Pytest,测试开发变得简便、安全、高效,同时也能帮助我们更快地修复Bug&…...

Python学习35天

# 定义父类 class Computer: CPUNone MemoryNone diskNone def __init__(self,CPU,Memory,disk): self.disk disk self.Memory Memory self.CPU CPU def get_details(self): return f"CPU:{self.CPU}\tdisk:{self.disk}\t…...

IO基础(字符集与字符流)

在字节流中,文件中的中文显示的是乱码。 在计算机存储体系中,以字节为最小存储单位,一个英文占一字节。 字符集类型 ASCII字符集,又叫编码表,编码表中有128个数据,其中大小写字母、符号、数字等。GB2312…...

LLM应用-prompt提示:RAG query重写、相似query生成 加强检索准确率

参考: https://zhuanlan.zhihu.com/p/719510286 1、query重写 你是一名AI助手,负责在RAG(知识库)系统中通过重构用户查询来提高检索效果。根据原始查询,将其重写得更具体、详细,以便更有可能检索到相关信…...

[python脚本处理文件入门]-17.Python如何操作Excel文件的读写

哈喽,大家好,我是木头左! 在Python中,处理Excel文件最常用的库之一是xlrd,它用于读取Excel文件。而当需要创建或写入Excel文件时,xlwt库则是一个不错的选择。这两个库虽然功能强大,但使用起来也非常简单直观。 安装与导入 确保你已经安装了这两个库。如果没有安装,可以…...

深度理解进程的概念(Linux)

目录 一、冯诺依曼体系 二、操作系统(OS) 设计操作系统的目的 核心功能 系统调用 三、进程的概念与基本操作 简介 查看进程 通过系统调用获取进程标识符 通过系统调用创建进程——fork() 四、进程的状态 操作系统中的运行、阻塞和挂起 理解linux内核链表 Linux的进…...

【C++】STL容器中的比较函数对象

目录 set、map容器 priority_queue容器 在STL中涉及到以某种规则排序的容器都需要比较函数对象,比如:set、map、priority_queue这些容器内部都是依赖比较函数对象以某种规则存储数据的。STL容器中的比较函数对象可以是:函数指针、仿函数(函…...

深度学习基础02_损失函数BP算法(上)

目录 一、损失函数 1、线性回归损失函数 1.MAE损失 2.MSE损失 3.SmoothL1Loss 2、多分类损失函数--CrossEntropyLoss 3、二分类损失函数--BCELoss 4、总结 二、BP算法 1、前向传播 1.输入层(Input Layer)到隐藏层(Hidden Layer) 2.隐藏层(Hidden Layer)到输出层(Ou…...

6.584-Lab4A

6.584-LabA HomeworkReference CodeReference Blog 通过作业提供的概览图可以看出整个系统的组成:用户 Clerk 会发出命令(Get、Put、Append)到每个 Service,每个 Service 接收到命令后向下传递到 RaftCode 层,由 RaftC…...

语义版本控制

注意: 本文内容于 2024-11-27 22:25:05 创建,可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容,请访问原文地址:语义版本控制。感谢您的关注与支持! 由于自己平时喜欢写点小玩意,自然而…...

深入理解HTML基本结构:构建现代网页的基石

深入理解HTML基本结构:构建现代网页的基石 在数字时代,HTML(超文本标记语言)是构建和设计网页的基础。了解HTML的基本结构对于任何希望掌握网页开发的人来说至关重要。本文将详细介绍HTML文件的基本骨架,包括其核心标…...

一体化数据安全平台uDSP 入选【年度创新安全产品 TOP10】榜单

近日,由 FreeBuf 主办的 FCIS 2024 网络安全创新大会在上海隆重举行。大会现场揭晓了第十届 WitAwards 中国网络安全行业年度评选获奖名单,该评选自 2015 年举办以来一直饱受赞誉,备受关注,评选旨在以最专业的角度和最公正的态度&…...

【机器学习】机器学习的基本分类-监督学习(Supervised Learning)

监督学习是一种通过已有的输入数据(特征)和目标输出(标签)对模型进行训练的机器学习方法,旨在学到一个函数,将输入映射到正确的输出。 1. 监督学习概述 监督学习需要: 输入数据(特…...

Oracle之提高PLSQL的执行性能

目录 1、SQL解析详解 2、演示示例 3、启用Oracle跟踪事件 4、查看改造后SQL性能对比结果 更多技术干货,关注个人博客吧 1、SQL解析详解 SQL解析是数据块处理SQL语句不可缺少的步骤,是在解析器中执行的。将SQL转换成数据库可以执行的低级指令。 SQL解析分为硬解析和软…...

[VSCode] vscode下载安装及安装中文插件详解(附下载文件)

前言 vscode 链接:https://pan.quark.cn/s/3acbb8aed758 提取码:dSyt VSCode 是一款由微软开发且跨平台的免费源代码编辑器;该软件支持语法高亮、代码自动补全、代码重构、查看定义功能,并且内置了命令行工具和Git版本控制系统。 …...

做网站需要提供什么/百度账户托管

使用maxwell实时采集mysql数据 1. 什么是maxwell maxwell 是由美国zendesk开源,用java编写的Mysql实时抓取软件。 其抓取的原理也是基于binlog。 2. Maxwell与canal的对比 Maxwell 没有 Canal那种serverclient模式,只有一个server把数据发送到消息队…...

网站流量数据查询/网站媒体推广

在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足: nums1[i] == nums2[j] 且绘制的直线不与任何其他连线(非水平线)相交。 请注意,连线即使在端点也不能相交:每个…...

做国外网站关键词用写/线上营销活动有哪些

文章目录系统迁移到另一个硬盘过程遇到的问题思路1思路2思路3最终启动效果最近更换固态硬盘,因系统资料较多重装比较麻烦,尝试盘对盘对拷,记录下更换过程以及遇到的问题及排查过程 参考https://askubuntu.com/questions/741723/moving-entire…...

深圳大型网站设计/刷关键词排名seo软件

出国留学网考研网为大家提供电子科技大学2018考研调剂,更多考研资讯请关注我们网站的更新!电子科技大学2018考研调剂要求:(1)考生分数达到第一志愿专业对应国家一区复试分数线,并且达到申请调剂学院调剂专业的复试分数线(国家复试分数线公布前…...

云南网络营销推广/seo提升关键词排名

ORM型框架:对数据进行持久化操作,例如:基于SQL的MyBatis框架和Hibernate框架。MVC型框架:从逻辑上分为视图层,控制层,模型层,各层各司其职,之间是相互调用的关系,而不是相…...

wordpress huxiu/中国国家数据统计网

2019年,新东方前途出国实现业绩16.75亿元,同比增长18%;新签留学申请个数47520,同比增长16%。昨天,在新东方前途出国2019财年表彰暨2020财年工作部署动员大会上,新东方教育科技集团助理副总裁、新东方前途出…...