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

数字探秘:用神经网络解密MNIST数据集中的数字!

用神经网络解密MNIST数据集中的数字!

    • 一. 介绍
      • 1.1 MNIST数据集简介
      • 1.2 MLP(多层感知器)模型介绍
      • 1.3 目标:使用MLP模型对MNIST数据集中的0-9数字进行分类
    • 二.数据预处理
      • 2.1 数据集的获取与加载
      • 2.2 数据集的探索性分析(EDA)
      • 2.3 数据预处理:归一化、展平图像数据
    • 三. MLP模型构建
      • 3.1 MLP模型结构介绍
      • 3.2 激活函数选择
      • 3.3 损失函数和优化算法选择
      • 3.4 模型训练
    • 四. 模型性能评估
      • 4.1 分类准确度(Accuracy)评估
      • 4.2 混淆矩阵(Confusion Matrix)分析
      • 4.3 精确率(Precision)、召回率(Recall)和F1分数(F1 Score)计算
      • 4.4 可视化误差分析
    • 五. 性能改进
      • 5.1 超参数调优
        • 5.1.1 学习率调整
        • 5.1.2 批量大小优化
      • 5.2 模型结构优化
        • 5.2.1 增加隐藏层和神经元数量
        • 5.2.2 正则化技术的应用
      • 5.3 数据增强(Data Augmentation)应用
        • 5.3.1 图像旋转、平移和缩放
    • 六. 结论
      • 6.1 模型性能总结
      • 6.2 可能的改进方向
      • 6.3 对于实际应用的启示

一. 介绍

1.1 MNIST数据集简介

MNIST(Modified National Institute of Standards and Technology database)是一个经典的手写数字数据集,常被用来测试机器学习算法的性能。它包含了大约70000张标准化的手写数字图像,每张图像是28x28像素,灰度图,标记从0到9的数字。这个数据集被广泛应用于数字识别的研究和实验中,是深度学习入门和基准测试的常用选择。
在这里插入图片描述

1.2 MLP(多层感知器)模型介绍

多层感知器(MLP)是一种经典的前馈人工神经网络模型,由一个或多个隐藏层组成,每个隐藏层由多个神经元(节点)组成。MLP的每个神经元与前一层的所有神经元相连,每条连接都有一个权重。通常,MLP包括一个输入层、若干隐藏层和一个输出层。每一层都通过一个非线性激活函数(如ReLU、sigmoid等)来处理输入数据,以产生非线性的模型输出。

MLP适合处理结构化数据,特别是在特征之间存在复杂关系或需要进行非线性映射时表现良好。在数字分类问题中,MLP通过学习输入数据的特征和模式,能够有效地识别和分类不同的数字。

1.3 目标:使用MLP模型对MNIST数据集中的0-9数字进行分类

本项目的主要目标是设计、实现和评估一个MLP模型,用于对MNIST数据集中的手写数字进行准确的分类。我们将通过以下步骤完成这一任务:

  • 数据预处理:包括加载数据集、标准化图像、划分训练集和测试集等。
  • 模型设计:定义MLP模型的结构,包括选择合适的层数、每层的神经元数量和激活函数。
  • 模型训练:使用训练集对MLP模型进行训练,通过反向传播算法优化模型参数。
  • 模型评估:使用测试集评估模型的性能,包括准确率、混淆矩阵等指标。
  • 性能优化:通过调整超参数、正则化技术和其他优化策略改进模型性能。

接下来,我们将详细展开每个步骤,并介绍如何在实际项目中实现这些内容。

二.数据预处理

2.1 数据集的获取与加载

在实现基于MNIST数据集的MLP模型之前,首先需要获取和加载数据集。MNIST数据集可以通过多种方式获取,包括直接从公共数据集存储库下载或使用机器学习库提供的API进行访问。以下是使用Python和相关库加载MNIST数据集的示例代码:

import tensorflow.keras as keras
from tensorflow.keras.datasets import mnist# 加载MNIST数据集,分为训练集和测试集
(X_train, y_train), (X_test, y_test) = mnist.load_data()print("训练集数据量:", X_train.shape[0])
print("测试集数据量:", X_test.shape[0])

2.2 数据集的探索性分析(EDA)

探索性数据分析(EDA)是数据科学中的重要步骤,有助于理解数据的结构、特征分布以及可能存在的问题。对于MNIST数据集,我们可以进行以下分析:

  • 数据形状和类型:检查数据集中图像和标签的维度和类型。
  • 类别分布:统计每个数字类别在数据集中的分布情况,确保类别平衡。
  • 图像可视化:随机可视化几个图像样本,检查图像质量和手写风格的多样性。
import matplotlib.pyplot as plt
import numpy as np# 查看类别分布
unique, counts = np.unique(y_train, return_counts=True)
plt.bar(unique, counts)
plt.title('Class Frequency')
plt.xlabel('Class')
plt.ylabel('Frequency')
plt.xticks(unique)
plt.show()# 随机可视化几个图像样本
plt.figure(figsize=(10, 10))
for i in range(25):plt.subplot(5, 5, i + 1)plt.imshow(X_train[i], cmap='gray')plt.title(f'Label: {y_train[i]}')plt.axis('off')
plt.show()

2.3 数据预处理:归一化、展平图像数据

在训练MLP模型之前,需要对图像数据进行预处理,以便提高模型训练的效果和收敛速度。常见的预处理步骤包括图像归一化和展平操作:

  • 归一化:将图像像素值缩放到0到1之间,有助于加速模型收敛并提高模型的稳定性。
  • 展平:将二维的28x28像素图像转换为一维向量,以作为MLP模型的输入。
# 归一化
X_train = X_train.astype('float32') / 255.0
X_test = X_test.astype('float32') / 255.0# 展平图像数据
X_train_flat = X_train.reshape((-1, 28*28))
X_test_flat = X_test.reshape((-1, 28*28))print("训练集展平后的形状:", X_train_flat.shape)
print("测试集展平后的形状:", X_test_flat.shape)

通过上述步骤,我们完成了对MNIST数据集的加载、探索性分析和预处理操作。接下来,可以设计和训练MLP模型,并对其性能进行评估。在后续章节中,我们将详细讨论如何构建和优化MLP模型,以及如何解释和改进其分类性能。

三. MLP模型构建

3.1 MLP模型结构介绍

多层感知器(MLP)是一种经典的前馈神经网络模型,适用于处理结构化数据和分类问题。MLP由输入层、若干隐藏层和输出层组成,每个层之间的神经元完全连接,并通过权重进行信息传递。以下是一个典型的MLP模型结构示例:

  • 输入层:接收展平后的图像数据作为输入,每个样本是一个长度为784的向量(对应28x28像素的展平图像)。
  • 隐藏层:可以包括一个或多个隐藏层,每个隐藏层包含多个神经元。隐藏层的选择通常基于任务的复杂性和数据的特征。
  • 输出层:最后一层通常是一个具有10个神经元的输出层,每个神经元对应一个数字类别(0到9)的概率。
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense# 定义MLP模型
model = Sequential([Dense(128, activation='relu', input_shape=(784,)),Dense(64, activation='relu'),Dense(10, activation='softmax')
])# 打印模型结构
model.summary()

在上面的示例中,我们创建了一个包含两个隐藏层(128个神经元和64个神经元)的MLP模型,输出层使用softmax激活函数以获得每个类别的概率分布。

3.2 激活函数选择

激活函数在神经网络中起到了非常重要的作用,它们增加了模型的非线性特性,使其能够学习复杂的数据模式和特征。常用的激活函数包括:

  • ReLU(Rectified Linear Unit): ( f(x) = \max(0, x) ),在隐藏层中常用,能够有效地缓解梯度消失问题。
  • sigmoid函数: ( f(x) = \frac{1}{1 + e^{-x}} ),用于二分类问题中的输出层。
  • softmax函数: ( f(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}} ),用于多分类问题中的输出层,将输出转换为概率分布。

在MLP模型中,通常在隐藏层使用ReLU激活函数,在输出层使用softmax激活函数来预测每个类别的概率。

3.3 损失函数和优化算法选择

选择合适的损失函数和优化算法对模型的性能和训练效率至关重要。

  • 损失函数:用于衡量模型预测值与真实标签之间的差异。对于多分类问题,常用的损失函数包括交叉熵损失函数(Categorical Crossentropy),它能够衡量两个概率分布之间的差异。

  • 优化算法:用于更新模型参数以最小化损失函数。常见的优化算法包括随机梯度下降(SGD)、Adam优化器等。Adam优化器结合了动量和自适应学习率调整,通常在训练深度学习模型时表现较好。

# 编译模型,选择损失函数和优化算法
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])

3.4 模型训练

模型构建完成后,我们需要对其进行训练。训练过程包括将模型参数调整到最佳状态,以便能够对新数据做出准确的预测。

四. 模型性能评估

4.1 分类准确度(Accuracy)评估

分类准确度是最常用的性能指标之一,它表示模型正确分类的样本比例。在MNIST数据集上,我们可以通过以下方式计算模型的分类准确度:

# 在测试集上评估模型
test_loss, test_acc = model.evaluate(X_test_flat, y_test, verbose=2)
print(f'测试集上的准确率:{test_acc:.4f}')

4.2 混淆矩阵(Confusion Matrix)分析

混淆矩阵是一种用于可视化模型预测结果的表格,显示了模型在每个类别上的真实预测情况。我们可以使用混淆矩阵来进一步分析模型在各个类别上的表现:

from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay# 预测测试集的类别
y_pred = model.predict_classes(X_test_flat)# 计算混淆矩阵
cm = confusion_matrix(y_test, y_pred)# 可视化混淆矩阵
plt.figure(figsize=(10, 8))
ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=np.arange(10)).plot(cmap='Blues')
plt.title('Confusion Matrix')
plt.show()

4.3 精确率(Precision)、召回率(Recall)和F1分数(F1 Score)计算

精确率、召回率和F1分数是衡量分类器性能的重要指标,特别是在不平衡类别分布的情况下更为有用。它们的计算公式如下:

  • 精确率(Precision): ( \text{Precision} = \frac{TP}{TP + FP} ),其中TP是真阳性(正确预测为正例的样本数),FP是假阳性(错误预测为正例的样本数)。
  • 召回率(Recall): ( \text{Recall} = \frac{TP}{TP + FN} ),其中FN是假阴性(错误预测为负例的样本数)。
  • F1分数(F1 Score): ( F1 = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}} ),综合考虑了精确率和召回率。
from sklearn.metrics import classification_report# 打印精确率、召回率和F1分数
print(classification_report(y_test, y_pred, target_names=[str(i) for i in range(10)]))

4.4 可视化误差分析

最后,我们可以通过可视化来分析模型在测试集上的误差,帮助我们理解模型预测错误的原因和模式:

# 找出预测错误的样本
incorrect_indices = np.where(y_pred != y_test)[0]# 随机选择一些错误样本进行展示
plt.figure(figsize=(12, 8))
for i, incorrect in enumerate(np.random.choice(incorrect_indices, size=25, replace=False)):plt.subplot(5, 5, i + 1)plt.imshow(X_test[incorrect], cmap='gray')plt.title(f'True: {y_test[incorrect]} Predicted: {y_pred[incorrect]}')plt.axis('off')
plt.tight_layout()
plt.show()

通过以上步骤,我们可以全面评估和理解MLP模型在MNIST数据集上的分类性能。下一步将是根据评估结果对模型进行优化和改进,以提高其在数字分类任务上的表现。

五. 性能改进

5.1 超参数调优

超参数是影响模型性能和训练速度的重要因素,包括学习率、批量大小、隐藏层神经元数量等。通过系统地调整这些超参数,我们可以找到最佳组合以改善模型性能。

5.1.1 学习率调整

学习率控制着模型参数更新的速度,过高的学习率可能导致模型在训练过程中震荡,而过低的学习率则会导致收敛速度缓慢。可以通过尝试不同的学习率来找到最优值。

from tensorflow.keras.optimizers import Adam# 定义不同的学习率
learning_rates = [1e-3, 1e-4, 1e-5]for lr in learning_rates:model = Sequential([Dense(128, activation='relu', input_shape=(784,)),Dense(64, activation='relu'),Dense(10, activation='softmax')])# 编译模型,选择优化器和学习率optimizer = Adam(learning_rate=lr)model.compile(optimizer=optimizer,loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 训练模型history = model.fit(X_train_flat, y_train, epochs=10, batch_size=128, validation_data=(X_test_flat, y_test), verbose=0)# 打印最终的验证集准确率_, test_acc = model.evaluate(X_test_flat, y_test, verbose=0)print(f'学习率 {lr} 下的测试集准确率:{test_acc:.4f}')
5.1.2 批量大小优化

批量大小决定了在每次参数更新时用于计算梯度的样本数。通常情况下,较大的批量大小可以加快训练速度,但可能会影响模型的泛化能力。

# 尝试不同的批量大小
batch_sizes = [32, 64, 128]for bs in batch_sizes:model = Sequential([Dense(128, activation='relu', input_shape=(784,)),Dense(64, activation='relu'),Dense(10, activation='softmax')])# 编译模型,选择优化器和批量大小model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 训练模型history = model.fit(X_train_flat, y_train, epochs=10, batch_size=bs, validation_data=(X_test_flat, y_test), verbose=0)# 打印最终的验证集准确率_, test_acc = model.evaluate(X_test_flat, y_test, verbose=0)print(f'批量大小 {bs} 下的测试集准确率:{test_acc:.4f}')

5.2 模型结构优化

优化模型结构是提升模型性能的关键步骤之一,可以通过增加/减少隐藏层、调整神经元数量等方式来改进模型的表现。

5.2.1 增加隐藏层和神经元数量

在某些情况下,增加隐藏层或增加每层神经元数量可以增加模型的表达能力,从而提升性能。但需要注意避免过拟合问题。

# 增加隐藏层和神经元数量的示例
model = Sequential([Dense(256, activation='relu', input_shape=(784,)),Dense(128, activation='relu'),Dense(64, activation='relu'),Dense(10, activation='softmax')
])
5.2.2 正则化技术的应用

正则化技术(如L2正则化、dropout等)可以有效控制模型的复杂度,提升泛化能力,从而减少过拟合现象。

from tensorflow.keras.layers import Dropout
from tensorflow.keras import regularizers# 添加Dropout层进行正则化
model = Sequential([Dense(128, activation='relu', kernel_regularizer=regularizers.l2(0.01), input_shape=(784,)),Dropout(0.3),Dense(64, activation='relu', kernel_regularizer=regularizers.l2(0.01)),Dropout(0.3),Dense(10, activation='softmax')
])

5.3 数据增强(Data Augmentation)应用

对于图像数据,数据增强是一种有效的方法,通过对原始图像进行随机变换来生成新的训练样本,以增加数据的多样性和数量,从而提升模型的泛化能力。

5.3.1 图像旋转、平移和缩放
from tensorflow.keras.preprocessing.image import ImageDataGenerator# 创建图像增强生成器
datagen = ImageDataGenerator(rotation_range=10, width_shift_range=0.1, height_shift_range=0.1, zoom_range=0.1)# 在训练集上应用图像增强
datagen.fit(X_train.reshape(-1, 28, 28, 1))# 使用增强后的数据训练模型
model.fit(datagen.flow(X_train_flat, y_train, batch_size=32), epochs=10, validation_data=(X_test_flat, y_test))

通过以上方法,我们可以有效地优化和改进基于MNIST数据集的MLP模型的性能,提升其在数字分类任务上的表现。在实际应用中,建议结合交叉验证等技术,综合考虑模型在不同超参数组合下的表现,以获取最佳的性能结果。

六. 结论

6.1 模型性能总结

通过本文中的实验和分析,我们成功地实现了基于MNIST数据集的MLP(多层感知器)模型,用于识别手写数字图像。以下是我们对模型性能的总结:

  • 准确度评估:我们通过测试集对模型进行了准确度评估,通常能够达到90%以上的准确率,这表明MLP模型在处理MNIST数据集上具有良好的分类能力。
  • 混淆矩阵分析:混淆矩阵展示了模型在各个数字类别上的预测效果,能够清晰地看出模型在每个类别上的精确度和召回率。
  • 精确率、召回率和F1分数:通过计算精确率、召回率和F1分数,我们进一步评估了模型在不同类别上的分类表现,确保模型在各个类别上均有良好的性能。

总体而言,我们的MLP模型在MNIST数据集上展现出了较高的分类精度和稳定性,能够有效地区分手写数字。

6.2 可能的改进方向

尽管我们的模型已经取得了良好的结果,但仍然存在一些改进的空间,以进一步提升其性能和泛化能力:

  • 超参数调优:可以进一步探索不同的学习率、批量大小、隐藏层结构等超参数的组合,以找到最佳的模型配置。
  • 模型结构优化:考虑尝试更复杂的模型结构,如增加更深的隐藏层或者应用正则化技术来提升模型的表达能力和泛化能力。
  • 集成学习:可以尝试集成多个MLP模型,如投票集成或堆叠集成,以进一步提升模型的整体性能。
  • 数据增强:对于MNIST数据集这种小规模数据集,可以应用数据增强技术,如图像旋转、平移、缩放等,增加训练样本的多样性,从而提升模型的鲁棒性。

6.3 对于实际应用的启示

基于我们在MNIST数据集上的探索,我们可以得出以下对于实际应用的启示:

  • 模型迁移:虽然MNIST是一个简单的手写数字数据集,但是MLP模型的训练和优化方法可以迁移到更复杂的图像分类任务中,如物体识别、人脸识别等。
  • 自动化和优化:在实际应用中,可以结合自动化超参数搜索、模型选择和部署技术,以便更快速地优化和部署深度学习模型。
  • 持续学习:随着数据和任务的变化,模型需要不断更新和优化。因此,建立持续学习和监控的机制是确保模型长期性能的关键。

综上所述,通过本文对基于MNIST数据集的MLP模型的实现与性能评估,我们不仅提升了对深度学习模型的理解和应用能力,还为更复杂问题的解决提供了有益的经验和指导。在未来的工作中,可以进一步探索和应用新的技术,以不断提升模型的性能和应用效果。

相关文章:

数字探秘:用神经网络解密MNIST数据集中的数字!

用神经网络解密MNIST数据集中的数字! 一. 介绍1.1 MNIST数据集简介1.2 MLP(多层感知器)模型介绍1.3 目标:使用MLP模型对MNIST数据集中的0-9数字进行分类 二.数据预处理2.1 数据集的获取与加载2.2 数据集的探索性分析(E…...

11个IT运维领域必考证书,每一个都含金量极高

这几年,网络方向里,IT运维其实还是挺吃香的。 运维人员的职责不仅仅是确保系统的正常运行,还需要应对突发事件、优化性能以及保障信息安全。 面对如此复杂的工作环境,拥有专业认证不仅是对自身技能的肯定,更是提升职业…...

VScode 常用插件

基础开发插件 Chinese (Simplified)(简体中文语言包):这是适用于VS Code的中文(简体)语言包,适用于英语不太流利的用户。Auto Rename Tag:这个插件可以同步修改HTML/XML标签,当用户修…...

299k stars利用Public APIs提升开发效率:探索APILayer提供的开源资源

299k stars利用Public APIs提升开发效率:探索APILayer提供的开源资源 在现代软件开发中,API(应用程序接口)是实现应用间通信和功能扩展的关键工具。公共API(Public APIs)则为开发者提供了宝贵的资源&#…...

在目标检测数据集上微调Florence-2

Florence-2是由微软开源的轻量级视觉-语言模型,采用MIT许可。该模型在任务如图像描述、目标检测、定位和分割中展示了强大的零样本和微调能力。 图1。图示展示了每个任务所表达的空间层次和语义细粒度水平。来源:Florence-2:推进多种视觉任务的统一表示。 该模型将图…...

AI提示词:AI辅导「数学作业」

辅导孩子作业对许多家长来说可能是一件头疼的事,但这部分工作可以在一定程度上交给AI来完成。 打开ChatGPT4,输入以下内容: # Role 数学辅导专家## Profile - author: 姜小尘 - version: 02 - LLM: Kimi - language: 中文 - description: 专门为小学生…...

odoo文档的安装

步骤 1: 安装必要的软件 确保你已经安装了Git和Python 3.6、3.7或3.8之一。 步骤 2: 克隆 Odoo 文档存储库 打开终端,然后使用Git克隆Odoo的文档存储库。 git clone https://github.com/odoo/documentation.git cd documentation步骤 3: 安装 Python 依赖项 …...

02STM32软件安装新建工程

STM32软件安装&新建工程 1.软件安装:1.1Keil5 MDK安装1.2安装器件支持包离线安装支持包在线安装支持包 1.3软件注册:1.4安装驱动STLINK驱动JLink驱动在此文件夹下USB转串口 2.新建工程2.1STM32开发方式:1.寄存器2.标准库3.HAL库 固件库压…...

社区6月月报 | Apache DolphinScheduler重要修复和优化记录

各位热爱Apache DolphinScheduler的小伙伴们,社区6月月报更新啦!这里将记录Apache DolphinScheduler社区每月的重要更新,欢迎关注。 月度Merge Stars 感谢以下小伙伴上个月为Apache DolphinScheduler所做的精彩贡献(排名不分先后…...

Docker 使用基础(2)—镜像

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━️💟──────── 4:20 🔄 ◀️ ⏸ …...

Docker学习笔记(三)Dockerfile

一、什么是Dockerfile Dockerfile 是一个用于自动化构建 Docker 镜像的文本文件,其中包含了从一个基础镜像开始,到最终形成所需定制镜像的所有指令集。这个文件中的每一条指令都对应着构建镜像过程中的一个步骤或一层,指导 Docker 如何安装软…...

学懂C#编程:C# 索引器(Indexer)的概念及用法

C#中的索引器(Indexer)是一种特殊的成员,它允许类或结构的实例像数组那样通过索引来访问其内部的数据。索引器提供了一种灵活的方式来暴露集合或数组类型的内部数据,使得客户端代码可以使用类似于数组下标的语法来访问类的成员&am…...

汇川CodeSysPLC教程03-2-14 与HMI通信

硬件连接 PLC与HMI连接采用何种连接方式,通常是参考双方支持哪些接口。PLC(可编程逻辑控制器)与HMI(人机界面)之间的通讯方式主要有以下几种: 串行通讯(Serial Communication)&…...

centos部署jar包

第一步: 将IDEA中的项目打包为jar,将这个jar文件放到centos服务器上的目录里,我在opt新建api目录,将jar文件放入,如下图: 第二步: 将需要读取的配置文件也放入此目录(其他目录也可以,和脚本中…...

CSS相对定位和绝对定位的区别

CSS相对定位和绝对定位的区别 区别1:相对的对象不同 相对定位是相对于自己绝对定位是相对于离自己最近的有定位的祖先 区别2:是否会脱离文档流 相对定位不会脱离文档流,不会影响其他元素的位置绝对定位会脱离文档流,会影响其他元素的布局 代…...

SpringCloud之nacos共享配置文件实现多数据源灵活切换

目录 前言 1.引入Springboot相关的aop切面依赖 2.创建自定义注解DataSourceKey 3.创建对ThreadLocal类 4.创建aop切面 5.创建动态数据源类 6.创建多数据库连接配置类 7.关键代码讲解 8.nacos主要配置 前言 通过Spring AOP(面向切面编程)的功能来动…...

原生小程序生成二维码方法之一

效果图&#xff1a; 第一步&#xff1a;下载对应的包并构建&#xff08;工具---》构建npm&#xff09; npm install weapp-qrcode --save 第二步&#xff1a;在wxml页面声明canvas <canvas style"width: 200px; height: 200px;margin:0 auto;" canvas-id"myQ…...

Kubernetes k8s Pod容器 探针 健康探测

目录 Pod容器健康探测 为什么要对容器做探测&#xff1f; 启动探测startupprobe 存活性探测livenessProbe 就绪性探测readinessProbe ReadinessProbe LivenessProbe startupProbe配合使用示例一般程序中需要设置三种探针结合使用&#xff0c;并且也要结合实际情况&#xff…...

Conformal low power-2.电源感知等效性检查

电源感知等效性检查 ■ 第24页&#xff1a;电源感知等效性检查概述 ■ 第24页&#xff1a;启动低功耗&#xff08;等效性检查&#xff09;软件 ■ 第25页&#xff1a;电源感知等效性检查流程 ■ 第28页&#xff1a;电源感知等效性检查示例Do文件 电源感知等效性检查概述…...

【密码学】从有限状态自动机到密钥流生成器

本文是对流密码内容的拓展&#xff0c;在流密码中种子密钥通过一个伪随机数生成器产生一个与明文等长的伪随机密钥流。而本文的内容就是在回答这样两个问题&#xff1a; 伪随机密钥流是如何生成的&#xff1f;流密码、流密钥生成器和有限状态自动机之间是什么关系&#xff1f;…...

3.相机标定原理及代码实现(opencv)

1.相机标定原理 相机参数的确定过程就叫做相机标定。 1.1 四大坐标系及关系 &#xff08;1&#xff09;像素坐标系&#xff08;单位&#xff1a;像素&#xff08;pixel&#xff09;&#xff09; 像素坐标系是指相机拍到的图片的坐标系&#xff0c;以图片的左上角为坐标原点&a…...

Centos7 安装Docker步骤及报错信息(不敢说最全,但是很全)

一、操作系统要求&#xff1a; 要安装Docker Engine&#xff0c;您需要CentOS 7及以上的维护版本。存档版本不受支持或测试。必须启用centos临时存储库。默认情况下&#xff0c;此存储库已启用&#xff0c;但如果已禁用&#xff0c;则需要重新启用它。建议使用overlay2存储驱动…...

【C语言】符号优先级详解

C语言符号优先级详细解析 在C语言中&#xff0c;不同的运算符具有不同的优先级和结合性&#xff0c;这决定了在表达式中运算符的计算顺序。理解这些优先级和结合性是正确编写和理解C语言程序的基础。本文将详细解析C语言中的符号优先级&#xff0c;包括各类运算符的优先级、结…...

天翼云高级运维工程师202407回忆题库 最新出炉

备考天翼云高级运维工程师 必须备考天翼云 之前觉得外企牛批 然后民企&#xff0c;拔地而起&#xff0c;民企也不错&#xff0c;工资高&#xff0c;有钱途 现在看来看去&#xff0c;还是国企好&#xff0c;体制内的&#xff0c;有保障&#xff0c;树大根深 有必要备考下天…...

在Python中什么是上下文管理器以及如何使用with语句来管理资源

什么是上下文管理器&#xff1f; 在Python中&#xff0c;上下文管理器&#xff08;Context Manager&#xff09;是一种支持with语句的协议&#xff0c;允许对象管理资源&#xff0c;如文件、线程锁的获取和释放、数据库连接等。上下文管理器负责资源的分配和释放&#xff0c;确…...

(四)、python程序--贪吃蛇游戏

一、绪论 贪吃蛇游戏。 已实现功能&#xff1a; 1、上下左右移动&#xff1b; 2、吃食物&#xff0c;随机生成食物&#xff1b; 3、碰撞检测&#xff0c;判断是否游戏结束。 二、代码分享 1、main.py import pygame import sys import food as c_food import snake as c…...

什么是DNS欺骗

DNS欺骗&#xff08;DNS Spoofing&#xff09;&#xff0c;也称为DNS缓存中毒&#xff08;DNS Cache Poisoning&#xff09;&#xff0c;是一种网络攻击形式&#xff0c;攻击者通过操纵DNS记录&#xff0c;将用户重定向到一个伪造的、恶意的网站。这些恶意网站可能看起来与用户…...

C++实现对结构体信息排序

思路解读&#xff1a; 定义结构体 Student: 结构体 Student 用来表示学生信息&#xff0c;包含两个成员变量&#xff1a;name&#xff08;学生姓名&#xff09;和 score&#xff08;学生分数&#xff09;。Student 结构体定义了一个构造函数&#xff0c;用于初始化 name 和 sco…...

[CTF]-PWN:House of Cat堆题型综合解析

原理&#xff1a; 调用顺序&#xff1a; exit->_IO_wfile_jumps->_IO_wfile_seekoff->_IO_switch_to_wget_mode _IO_wfile_seekoff源码&#xff1a; off64_t _IO_wfile_seekoff (FILE *fp, off64_t offset, int dir, int mode) {off64_t result;off64_t delta, new…...

18.按键消抖模块设计(使用状态机,独热码编码)

&#xff08;1&#xff09;设计意义&#xff1a;按键消抖主要针对的时机械弹性开关&#xff0c;当机械触点断开、闭合时&#xff0c;由于机械触点的弹性作用&#xff0c;一个按键开关在闭合时不会马上稳定地接通&#xff0c;在断开时也不会一下子就断开。因而在闭合以及断开的瞬…...

wordpress日主题官网/腾讯会议付费

...

如何分析企业网站/免费外链发布平台在线

如果再不写点东西&#xff0c;害怕自己以后再也不会写程序了&#xff0c;很久没有更新BLOG了&#xff0c;作为即将失去九月的几年还是摘录一篇稿子中的东西吧——关于Command对象的&#xff0c;主要是关于参数的问题&#xff0c;Command对象参数输入输出&#xff0c;以及获取的…...

重庆丰都建设局网站/360开户推广

转自&#xff1a;https://sherlockliao.github.io/2017/05/01/git/ 平时使用git老是要去查找用法&#xff0c;十分不方便&#xff0c;于是决定写一篇文章记录一下git里面常用的命令&#xff0c;持续更新。 git init 将目录变成git repository git add readme.txt 添加readme.t…...

中国建设银行重庆网站首页/上海百度提升优化

简介 这里我想说的是&#xff0c;程序本身不需要关心表的结构&#xff0c;只需要按照视图定义来取数据或更新数据。 什么是视图 说起视图呢&#xff0c;就是说它相当于一个虚拟的表&#xff0c;你看不到它&#xff0c;但是你可以根据它来更新和操作表&#xff0c;视图中的wi…...

网易企业邮箱收费标准/兰州模板网站seo价格

微信小程序组件里没有下拉框&#xff0c;正好要用到&#xff0c;记下来以后参考wxml代码选择接收班级{{grade_name}}{{item}}wxss代码/* 顶部 */.top{width: 100vw;height: 80rpx;padding: 0 20rpx;line-height: 80rpx;font-size: 34rpx;border-bottom: 1px solid #000;}.top-t…...

wordpress商品导出淘宝/学历提升

各位Gopher们&#xff0c;因疫情影响&#xff0c;北京不允许举办大型线下活动&#xff0c;我们在征询过部分Gopher的意见后&#xff0c;决定取消今年的线下大会。对此&#xff0c;我们感到非常遗憾&#xff01;但各位Gopher也别太过伤心和惋惜&#xff0c;好事多磨&#xff0c;…...