【人工智能机器学习基础篇】——深入详解深度学习之复杂网络结构:卷积神经网络(CNN)、循环神经网络(RNN)、生成对抗网络(GAN)等概念及原理

news2025/1/5 17:29:13

深入详解深度学习之复杂网络结构:卷积神经网络(CNN)、循环神经网络(RNN)、生成对抗网络(GAN)

深度学习作为人工智能的重要分支,通过复杂的网络结构实现对数据的高级抽象和理解。本文将深入探讨三种核心的复杂网络结构:卷积神经网络(Convolutional Neural Networks, CNN)、循环神经网络(Recurrent Neural Networks, RNN)和生成对抗网络(Generative Adversarial Networks, GAN),详细解读其关键概念、核心原理、示例及主要应用。


目录

  1. 卷积神经网络(CNN)
    • 关键概念
    • 核心原理
    • 示例及实现
    • 主要应用
  2. 循环神经网络(RNN)
    • 关键概念
    • 核心原理
    • 示例及实现
    • 主要应用
  3. 生成对抗网络(GAN)
    • 关键概念
    • 核心原理
    • 示例及实现
    • 主要应用
  4. 总结与展望

卷积神经网络(CNN)

关键概念

  1. 卷积层(Convolutional Layer):利用卷积核对输入数据进行滑动窗口操作,提取局部特征。
  2. 池化层(Pooling Layer):通过下采样操作减少特征图尺寸,降低计算复杂度,防止过拟合。
  3. 全连接层(Fully Connected Layer):将前层提取的特征进行整合,用于分类或回归任务。
  4. 激活函数(Activation Function):引入非线性,如ReLU、Sigmoid、Tanh等,增强模型表达能力。
  5. 卷积核/滤波器(Kernel/Filter):用于扫描输入数据提取特征的矩阵,权重共享机制。
  6. 特征图(Feature Map):卷积操作后的输出,反映数据的局部特征。
  7. 参数共享(Parameter Sharing):同一卷积核在不同位置共享权重,减少模型参数数量。

核心原理

卷积神经网络的设计灵感来源于生物视觉系统,通过模拟视觉皮层的结构,擅长处理具有网格结构的数据,如图像。其核心优势在于:

  • 局部感受野(Local Receptive Field):卷积核只关注输入的局部区域,能够有效捕捉局部特征。
  • 权重共享:同一卷积核应用于整个输入,有效减少参数数量,防止过拟合。
  • 多层次特征提取:通过多层卷积和池化,逐步提取从低级到高级的特征表示。

示例及实现

以下是一个使用TensorFlow和Keras构建和训练卷积神经网络(CNN)进行CIFAR-10图像分类的示例。

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.utils import to_categorical

# 加载CIFAR-10数据集
(x_train, y_train), (x_test, y_test) = cifar10.load_data()

# 数据预处理
x_train = x_train.astype('float32') / 255.0  # 标准化
x_test = x_test.astype('float32') / 255.0
y_train = to_categorical(y_train, 10)       # 独热编码
y_test = to_categorical(y_test, 10)

# 构建CNN模型
model = Sequential([
    Conv2D(32, (3, 3), activation='relu', padding='same', input_shape=(32, 32, 3)),
    Conv2D(32, (3, 3), activation='relu', padding='same'),
    MaxPooling2D(pool_size=(2, 2)),
    Dropout(0.25),

    Conv2D(64, (3, 3), activation='relu', padding='same'),
    Conv2D(64, (3, 3), activation='relu', padding='same'),
    MaxPooling2D(pool_size=(2, 2)),
    Dropout(0.25),

    Flatten(),
    Dense(512, activation='relu'),
    Dropout(0.5),
    Dense(10, activation='softmax')
])

# 编译模型
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# 训练模型
model.fit(x_train, y_train, epochs=50, batch_size=64, validation_split=0.2, verbose=2)

# 评估模型
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f'测试准确率: {test_acc:.4f}')

代码解释

  1. 数据加载与预处理

    • 使用Keras内置的CIFAR-10数据集,包含60000张32x32彩色图像,10个类别。
    • 将图像像素值标准化到[0,1]区间,标签进行独热编码。
  2. 模型构建

    • 卷积层:使用32和64个3x3卷积核,激活函数为ReLU,padding='same'保持输入尺寸。
    • 池化层:2x2最大池化降低特征图尺寸。
    • Dropout层:防止过拟合,分别设置25%和50%的神经元随机失活。
    • 全连接层:512个神经元,激活函数为ReLU,最后输出层有10个神经元,激活函数为Softmax。
  3. 模型编译与训练

    • 使用Adam优化器和交叉熵损失函数,适用于多分类任务。
    • 训练50个epoch,批量大小为64,使用20%的训练数据作为验证集。
  4. 模型评估

    • 在测试集上评估模型性能,输出测试准确率。

主要应用

卷积神经网络广泛应用于各类计算机视觉任务,包括但不限于:

  • 图像分类:识别图像所属的类别,如ImageNet竞赛。
  • 目标检测:定位图像中的物体,如YOLO、Faster R-CNN。
  • 图像分割:将图像划分为不同区域,进行像素级分类,如U-Net、Mask R-CNN。
  • 图像生成:生成逼真的图像,如DCGAN、StyleGAN。
  • 视频分析:动作识别、视频摘要等。

循环神经网络(RNN)

关键概念

  1. 循环连接(Recurrent Connection):允许信息在时间步之间传递,形成记忆。
  2. 隐藏状态(Hidden State):存储先前时间步的信息,影响当前输出。
  3. 时间步(Time Step):序列数据中的每个数据点。
  4. 序列数据(Sequential Data):具有时间或顺序关系的数据,如文本、音频、时间序列。
  5. 长短期依赖(Long-term Dependencies):捕捉序列中远距离元素之间的依赖关系。

核心原理

循环神经网络通过在网络中引入循环连接,使得网络能够处理序列数据,记忆前序信息。每个时间步的输出不仅依赖于当前输入,还依赖于前一时间步的隐藏状态。标准RNN存在梯度消失和梯度爆炸的问题,难以捕捉长距离依赖。为了解决这些问题,提出了LSTM(长短期记忆网络)和GRU(门控循环单元)等变种。

示例及实现

以下是一个使用TensorFlow和Keras构建和训练LSTM模型进行IMDB电影评论情感分类的示例。

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense, Dropout
from tensorflow.keras.datasets import imdb
from tensorflow.keras.preprocessing import sequence

# 参数设置
max_features = 20000  # 词汇表大小
maxlen = 100          # 序列最大长度

# 加载IMDB数据集
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)

# 数据预处理,填充序列
x_train = sequence.pad_sequences(x_train, maxlen=maxlen)
x_test = sequence.pad_sequences(x_test, maxlen=maxlen)

# 构建LSTM模型
model = Sequential([
    Embedding(max_features, 128, input_length=maxlen),  # 嵌入层,将词索引转换为密集向量
    LSTM(128, dropout=0.2, recurrent_dropout=0.2),      # LSTM层,128个隐藏单元
    Dense(1, activation='sigmoid')                      # 输出层,二分类
])

# 编译模型
model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])

# 训练模型
model.fit(x_train, y_train, epochs=10, batch_size=64, validation_split=0.2)

# 评估模型
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f'测试准确率: {test_acc:.4f}')

代码解释

  1. 参数设置与数据加载

    • max_features:选择最常见的20000个词作为词汇表。
    • maxlen:将所有序列填充或截断到100个词。
    • 使用Keras内置的IMDB数据集,按词频编码词索引。
  2. 数据预处理

    • 使用pad_sequences将所有序列填充到固定长度,确保输入形状一致。
  3. 模型构建

    • Embedding层:将词索引转换为128维的密集向量,捕捉词语语义。
    • LSTM层:具有128个隐藏单元,dropoutrecurrent_dropout用于防止过拟合。
    • 输出层:使用Sigmoid激活函数进行二分类。
  4. 模型编译与训练

    • 使用Adam优化器和二元交叉熵损失函数。
    • 训练10个epoch,批量大小为64,使用20%的训练数据作为验证集。
  5. 模型评估

    • 在测试集上评估模型性能,输出测试准确率。

主要应用

循环神经网络擅长处理序列数据,广泛应用于多个领域,包括:

  • 自然语言处理(NLP)

    • 语言模型与文本生成。
    • 机器翻译。
    • 情感分析。
    • 命名实体识别。
  • 时间序列预测

    • 股票价格预测。
    • 气象预报。
    • 传感器数据分析。
  • 语音识别

    • 将语音信号转换为文字。
    • 语音指令识别。
  • 视频分析

    • 动作识别。
    • 视频摘要与检索。

生成对抗网络(GAN)

关键概念

  1. 生成器(Generator):负责生成假样本,试图模仿真实数据分布。
  2. 判别器(Discriminator):负责区分真假样本,判断输入样本是否来自真实数据。
  3. 对抗训练(Adversarial Training):生成器和判别器通过对抗过程共同优化,互相提升。
  4. 潜在空间(Latent Space):生成器输入的随机噪声空间,通过映射生成样本。
  5. 损失函数(Loss Function):生成器和判别器的优化目标,通常采用交叉熵损失。

核心原理

生成对抗网络由生成器和判别器两个部分组成,形成一个博弈过程:

  • 生成器:接收随机噪声(如高斯噪声),生成尽可能真实的样本,目的是欺骗判别器。
  • 判别器:接收真实样本和生成器生成的假样本,输出样本真实性的概率,目的是准确区分真假样本。

训练过程中,生成器和判别器交替优化,生成器不断提高生成样本的真实性,判别器不断提高辨别能力。最终,生成器能生成与真实数据分布高度接近的样本。

示例及实现

以下是一个使用TensorFlow和Keras构建和训练基本GAN在MNIST数据集上生成手写数字的示例。

import tensorflow as tf
from tensorflow.keras import layers
import numpy as np
import matplotlib.pyplot as plt

# 设置随机种子
tf.random.set_seed(42)
np.random.seed(42)

# 加载MNIST数据集
(x_train, _), (_, _) = tf.keras.datasets.mnist.load_data()
x_train = x_train.astype('float32') / 255.0  # 标准化
x_train = np.expand_dims(x_train, axis=-1)   # 增加通道维度

# 定义潜在空间维度
latent_dim = 100

# 构建生成器
def build_generator(latent_dim):
    model = Sequential([
        layers.Dense(7*7*256, use_bias=False, input_shape=(latent_dim,)),
        layers.BatchNormalization(),
        layers.LeakyReLU(),
        layers.Reshape((7, 7, 256)),
        layers.Conv2DTranspose(128, (5, 5), strides=(1, 1), padding='same', use_bias=False),
        layers.BatchNormalization(),
        layers.LeakyReLU(),
        layers.Conv2DTranspose(64, (5, 5), strides=(2, 2), padding='same', use_bias=False),
        layers.BatchNormalization(),
        layers.LeakyReLU(),
        layers.Conv2DTranspose(1, (5, 5), strides=(2, 2), padding='same', use_bias=False, activation='tanh')
    ])
    return model

# 构建判别器
def build_discriminator():
    model = Sequential([
        layers.Conv2D(64, (5, 5), strides=(2, 2), padding='same', input_shape=[28, 28, 1]),
        layers.LeakyReLU(),
        layers.Dropout(0.3),
        layers.Conv2D(128, (5, 5), strides=(2, 2), padding='same'),
        layers.LeakyReLU(),
        layers.Dropout(0.3),
        layers.Flatten(),
        layers.Dense(1, activation='sigmoid')
    ])
    return model

# 实例化生成器和判别器
generator = build_generator(latent_dim)
discriminator = build_discriminator()

# 编译判别器
discriminator.compile(optimizer='adam',
                      loss='binary_crossentropy',
                      metrics=['accuracy'])

# 构建GAN模型,将判别器设置为不可训练
discriminator.trainable = False
gan_input = tf.keras.Input(shape=(latent_dim,))
generated_image = generator(gan_input)
gan_output = discriminator(generated_image)
gan = tf.keras.Model(gan_input, gan_output)

# 编译GAN
gan.compile(optimizer='adam', loss='binary_crossentropy')

# 训练参数
epochs = 10000
batch_size = 128
sample_interval = 1000

# 标签平滑
real = np.ones((batch_size, 1)) * 0.9
fake = np.zeros((batch_size, 1))

# 训练过程
for epoch in range(1, epochs + 1):
    # ---------------------
    #  训练判别器
    # ---------------------
    # 选择真实样本
    idx = np.random.randint(0, x_train.shape[0], batch_size)
    real_images = x_train[idx]
    
    # 生成假样本
    noise = np.random.normal(0, 1, (batch_size, latent_dim))
    generated_images = generator.predict(noise)
    
    # 训练判别器
    d_loss_real = discriminator.train_on_batch(real_images, real)
    d_loss_fake = discriminator.train_on_batch(generated_images, fake)
    d_loss = 0.5 * np.add(d_loss_real, d_loss_fake)
    
    # ---------------------
    #  训练生成器
    # ---------------------
    noise = np.random.normal(0, 1, (batch_size, latent_dim))
    g_loss = gan.train_on_batch(noise, real)
    
    # 打印进度
    if epoch % 1000 == 0 or epoch == 1:
        print(f"Epoch {epoch} / {epochs} [D loss: {d_loss[0]:.4f}, acc.: {100*d_loss[1]:.2f}%] [G loss: {g_loss:.4f}]")
        
        # 生成并保存样本
        noise = np.random.normal(0, 1, (16, latent_dim))
        gen_images = generator.predict(noise)
        gen_images = 0.5 * gen_images + 0.5  # 反标准化
        
        fig, axs = plt.subplots(4, 4, figsize=(4,4))
        cnt = 0
        for i in range(4):
            for j in range(4):
                axs[i,j].imshow(gen_images[cnt, :, :, 0], cmap='gray')
                axs[i,j].axis('off')
                cnt += 1
        plt.show()

代码解释

  1. 数据加载与预处理

    • 使用Keras内置的MNIST数据集,包含60000张28x28灰度手写数字图像。
    • 将图像像素值标准化到[-1,1]区间(通过tanh激活),并增加通道维度。
  2. 生成器构建

    • 从潜在空间(100维高斯噪声)开始,经过密集层、批量归一化、LeakyReLU激活、转置卷积层,生成28x28x1的图像。
  3. 判别器构建

    • 接收28x28x1的图像,经过卷积层、LeakyReLU激活、Dropout层、全连接层,输出样本真实性的概率。
  4. GAN模型构建与编译

    • 将生成器和判别器结合,构建对抗模型。
    • 判别器在GAN模型中设为不可训练,通过训练生成器优化其参数。
  5. 训练过程

    • 每个epoch先训练判别器,使用真实样本和生成出的假样本。
    • 然后训练生成器,通过对抗训练提高生成样本的真实性。
    • 定期生成并展示样本图像,观察生成效果。

主要应用

生成对抗网络具有强大的生成能力,广泛应用于多个领域,包括但不限于:

  • 图像生成:生成高质量、逼真的图像,如人脸生成(StyleGAN)。
  • 图像修复与超分辨率:填补图像缺失部分,提高图像分辨率。
  • 艺术风格转换:将一种艺术风格应用到另一幅图像上,如风格迁移(CycleGAN)。
  • 数据增强:为模型提供更多训练样本,改善模型泛化能力。
  • 文本生成:生成自然语言文本,如对话系统中的回复。
  • 语音合成:生成逼真的语音音频,应用于语音助手等。

总结与展望

卷积神经网络(CNN)、循环神经网络(RNN)和生成对抗网络(GAN)作为深度学习中三种核心的复杂网络结构,分别在计算机视觉、自然语言处理和生成模型等领域展现出卓越的性能和广泛的应用前景。

  • **卷积神经网络(CNN)**擅长处理图像数据,通过层叠的卷积和池化操作实现多层次特征提取,广泛应用于图像分类、目标检测等任务。
  • **循环神经网络(RNN)**专注于处理序列数据,通过循环连接和隐藏状态实现时间依赖建模,适用于自然语言处理、时间序列预测等领域。
  • **生成对抗网络(GAN)**通过生成器和判别器的对抗训练,能够生成高度逼真的数据样本,应用于图像生成、数据增强等多个方向。

随着研究的深入,这些网络结构不断演化,衍生出更为复杂和高效的变种,如ResNet、Transformer、CycleGAN等,进一步推动了人工智能技术的发展。未来,结合多种网络结构和新兴技术,深度学习将在更多复杂和多样化的任务中发挥重要作用。


参考资料

  1. 《深度学习》(Ian Goodfellow, Yoshua Bengio, Aaron Courville 著)
  2. 《神经网络与深度学习》(Michael Nielsen 著)
  3. TensorFlow官方网站:https://www.tensorflow.org/
  4. Keras官方网站:https://keras.io/
  5. PyTorch官方网站:https://pytorch.org/
  6. GAN论文:“Generative Adversarial Networks” by Ian Goodfellow et al., 2014.

本文旨在全面介绍卷积神经网络(CNN)、循环神经网络(RNN)和生成对抗网络(GAN)的关键概念、核心原理、示例及主要应用,帮助读者深入理解深度学习的复杂网络结构和其在实际中的应用。希望对您的学习和研究有所帮助。

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

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

相关文章

Android Studio学习笔记

01-课程前面的话 02-Android 发展历程 03-Android 开发机器配置要求 04-Android Studio与SDK下载安装 05-创建工程与创建模拟器

unity学习3:如何从github下载开源的unity项目

目录 1 网上别人提供的一些github的unity项目 2 如何下载github上的开源项目呢? 2.1.0 下载工具 2.1.1 下载方法1 2.1.2 下载方法2(适合内部项目) 2.1.3 第1个项目 和第4项目 的比较 第1个项目 第2个项目 第3个项目 2.1.4 下载方法…

自动驾驶新纪元:城区NOA功能如何成为智能驾驶技术的分水岭

目录 一、NOA 的定义 二、NOA 的主要特点 导航集成 场景覆盖 智能决策 高级感知能力 驾驶员参与 三、NOA 的优势 四、NOA的衡量指标 定性评价指标 安全性评价指标定义 可靠性评价指标定义 舒适性评价指标定义 通行效率评价指标 定量评价指标 五、代表厂商的实测…

解决uniapp H5页面限制输入框只能输数字问题

工作记录 最最近在做 uniapp 开发的移动端 H5 页面,有个需求是金额输入框只能输入数字,不能输入小数点和其他字符,经过各种尝试,发现其他字符可以通过正则过滤掉,但是输入小数点的话,因为没有触发 input 和…

JDK8源码分析Jdk动态代理底层原理

本文侧重分析JDK8中jdk动态代理的源码,若是想看JDK17源码分析可以看我的这一篇文章 JDK17源码分析Jdk动态代理底层原理-CSDN博客 两者之间有着略微的差别,JDK17在JDK8上改进了不少 目录 源码分析 过程 生成的代理类大致结构 本文侧重分析JDK8中jdk…

STM32单片机芯片与内部57 SPI 数据手册 寄存器

目录 一、SPI寄存器 1、SPI控制寄存器 1(SPI_CR1)(I2S模式下不使用) 2、SPI控制寄存器 2(SPI_CR2) 3、SPI 状态寄存器(SPI_SR) 4、SPI 数据寄存器(SPI_DR) 5、SPI CRC多项式寄存器(SPI_CRCPR)(I2S模式下不使用) 6、SPI Rx CRC寄存器(SPI_RXCRCR)(I2S模式下不…

vue设计与实现-框架设计

权衡的艺术 命令式和声明式 视图层框架通常分为命令式和声明式,各有优缺。jquery是一种命令式框架。命令式框架关注过程,而声明式框架关注结果。对于vue来说,过程被vue封装了,所以vue内部是命令式的,但vue暴露给用户…

CSDN充值、收费、会员

现在在CSDN上查阅资料经常碰到需要充值或变成会员才能继续阅读的情况,一直以为是博客作者为了赚钱而设置的,今天才知道原来是CSDN弄的,因为我在不登录的情况下查看自己的博文也需要充钱!我可没有做过任何设置。

ElasticSearch7.10-分词器

文章目录 分词器1.字符过滤器1.介绍2.过滤html标签3.mappings过滤规则(屏蔽非文明用语)4.正则替换 2.自定义分词器1.代码2.查询 3.中文分词器1.下载ik分词器7.10.0版本(跟es对应)2.应用ik分词器1.进入插件目录下创建一个ik目录2.将…

Linux之ARM(MX6U)裸机篇----6.BSP工程管理实验

一,BSP工程管理 定义:是为了模块化整理代码,相同属性的文件存放在同一个目录下。 ①先mkdir多个文件夹er ②把共同.h文件转移到指定文件夹下 二,启动文件 .global _start /* 全局标号 *//** 描述: _start函数&am…

【kubernetes组件合集】深入解析Kubernetes组件之三:client-go

深入解析Kubernetes组件之三:client-go 目录 深入解析Kubernetes组件之三:client-go 引言 1. client-go简介 2. client-go的功能 2.1 资源操作 2.2 资源监听 2.3 认证和授权 2.4 错误处理和重试 2.5 扩展性和定制化 3. 使用client-go与Kubern…

【门铃工作原理】2021-12-25

缘由关于#门铃工作原理#的问题,如何解决?-嵌入式-CSDN问答 4 RST(复位)当此引脚接高电平时定时器工作,当此引脚接地时芯片复位,输出低电平。 按钮按下给电容器充电并相当与短路了R1改变了频率,按…

html+css+js网页设计 美食 美食3个页面(带js)

htmlcssjs网页设计 美食 美食3个页面(带js) 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&…

jenkins修改端口以及开机自启

修改Jenkins端口 方式一:通过配置文件修改(以CentOS为例) 找到配置文件:在CentOS系统中,通常可以在/etc/sysconfig/jenkins文件中修改Jenkins的配置。如果没有这个文件,也可以查看/etc/default/jenkins&…

vue-table-<td colspan=“2“>不生效

代码是2:1:4:1:4五分布局,效果却是如下: 因为这里的表格没有指定表格布局算法 /*设置表格布局算法*/ 2 table{ 3 table-layout:fixed; 4 } 这里需要了解table-layout属性值、定义和用法、固定表格布局、自动表格布局。 1定义和用法 tableLayout属性用来显示表格单元格、…

Windows系统提示ffmpeg.dll丢失怎么解决?

一、了解ffmpeg.dll文件 ffmpeg.dll是FFmpeg项目的一个动态链接库文件,FFmpeg是一个开源的多媒体处理框架,能够解码、编码、转码、混流、过滤和播放几乎所有已知格式的音频和视频文件。当Windows系统提示ffmpeg.dll丢失时,通常意味着某个需要…

QT:控件属性及常用控件(1)------核心控件及属性

一个图形化界面上的内容,不需要我们直接从零去实现 QT中已经提供了很多的内置控件: 按钮,文本框,单选按钮,复选按钮,下拉框等等。。。。。 文章目录 1.常用控件属性1.1 enabled1.2 geometry1.2.1 geometry…

使用Diffusion Models进行图像超分辩重建

Diffusion Models专栏文章汇总:入门与实战 前言:图像超分辨率重建是一个经典CV任务,其实LR(低分辨率)和 HR(高分辨率)图像仅在高频细节上存在差异。通过添加适当的噪声,LR 图像将变得与其 HR 对应图像无法区分。这篇博客介绍一种方式巧妙利用这个规律使用Diffusion Mod…

药片(药丸)和胶囊识别数据集,使用yolo,pasical voc xml, coco json格式标注,可识别药片和胶囊两种标签,2445张原始图片

药片(药丸)和胶囊识别数据集,使用yolo,pasical voc xml, coco json格式标注,可识别药片和胶囊两种标签,2445张原始图片 数据集分割 训练组80% 1967图片 有效集13% 317图片 测试集7% 161图片 预处…

【生活】冬天如何选口罩(医用口罩,N95, KN95还是KP95?带不带呼吸阀门?带不带活性炭?)

💡总结一下就是: 日常防护的话,医用口罩就可以啦。要是想长时间佩戴N95(KN95)口罩的话也可以. 在高风险环境(像医院、疫情防控期间),一定要选不带呼吸阀门的N95口罩KN95&#xff09…