飞浆深度学习框架 课程复习题

名词解释

  • 深度学习

    深度学习(英语:deep learning)是机器学习的分支,是一种以人工神经网络为架构,对资料进行表征学习的算法。
    表征学习的目标是寻求更好的表示方法并创建更好的模型来从大规模未标记数据中学习这些表示方法。

  • 机器学习

    机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能。
    机器学习是对能通过经验自动改进的计算机算法的研究。
    机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。

  • 人工智能

    人工智能(英语:artificial intelligence,缩写为AI)亦称智械、机器智能,指由人制造出来的机器所表现出来的智能。通常人工智能是指通过普通计算机程序来呈现人类智能的技术。

  • 感受野

    感受野(Receptive Field),指的是神经网络中神经元“看到的”输入区域,在卷积神经网络中,feature map上某个元素的计算受输入图像上某个区域的影响,这个区域即该元素的感受野。

选择题

  1. 以下哪些不是DNN
    SVM
  2. 首次提出人工智能这个名词是哪一年
    1956 年
  3. 神经网络中引入了什么非线性的方式
    激励函数

填空题和简答题

  1. 常用的激励函数有哪些?

    Sigmoid函数(Logistic函数)
    双曲正切函数(Tanh函数)
    ReLU函数(Rectified Linear Unit)
    Leaky ReLU函数
    Parametric ReLU函数(PReLU函数)
    ELU(Exponential Linear Unit)
    SELU(Scaled Exponential Linear Unit)
    Swish

  2. 池化层又称为采样层,主要方法有()

    最大池化(Max Pooling)、平均池化(Average Pooling)和L2范数池化(L2-Norm Pooling)等

  3. 房价预测,垃圾分类分别属于什么类型的问题?

    回归和分类

  4. 什么神经网络用于解决自然语言处理问题?

    RNN(循环神经网络)

  5. 池化层课有效缩小(参数矩阵)尺寸,带来()什么好处?

    这有助于减少参数数量、降低模型过拟合的风险,并提取对于任务重要的显著特征。

  6. 飞浆卷积算子API

    paddle.nn.Conv2D

  7. ()常用于模式识别,图像处理?

    CNN

  8. 回归问题和分类问题分别使用什么损失函数?

    均方差(MSE),交叉熵(Cross Entropy)

  9. 当前成熟的优化算法

    随机梯度下降(Stochastic Gradient Descent,SGD)
    基于动量的优化算法 Momentum、Nesterov Accelerated Gradient(NAG)和Adaptive Moment Estimation(Adam)
    AdaGrad:AdaGrad算法自适应地调整学习率
    RMSprop:RMSprop算法也是自适应学习率算法,通过指数加权移动平均来调整学习率。
    Adam:Adam算法结合了动量优化算法和自适应学习率算法的优点。
    AdaDelta:AdaDelta算法也是一种自适应学习率算法,它通过近似估计参数更新的二阶矩来调整学习率,相对于AdaGrad和RMSprop更加稳定。
    AdamW:AdamW是对Adam算法的一种变体,引入了L2正则化项,以减小模型的权重衰减。
    L-BFGS:L-BFGS算法是一种拟牛顿法优化算法,适用于较小规模的问题。它利用函数值和梯度的历史信息来近似更新参数。

  10. 丢弃操作的英文

    drop out

  11. pandas 中的两个重要的数据类型

    series、data frame

  12. 一个CNN由()()()组成,其中隐藏层又由哪些组成?

    输入层,隐藏层,输出层
    隐藏层由 卷积层、池化层、relu层、全连接层组成

  13. 人工智能三要素

    数据,算力,模型

  14. 列举5个深度学习应用场景

    计算机视觉(Computer Vision):深度学习在计算机视觉中有广泛应用,如图像分类、目标检测、图像分割、人脸识别、行人检测、视频分析等。
    
    自然语言处理(Natural Language Processing,NLP):深度学习在NLP领域有很多应用,包括文本分类、情感分析、机器翻译、语言生成、问答系统、命名实体识别等。
    
    语音识别(Speech Recognition):深度学习被广泛应用于语音识别任务,如语音命令识别、语音转文字、语音合成等。
    
    推荐系统(Recommendation Systems):深度学习可用于构建个性化推荐系统,根据用户的历史行为和兴趣,预测和推荐相关的产品、内容或服务。
    
    医疗影像分析(Medical Image Analysis):深度学习在医疗领域的影像分析方面有重要应用,如病变检测、疾病诊断、医学图像分割等。
    
    金融风控(Financial Risk Management):深度学习可用于金融领域的风险评估和欺诈检测,例如信用评分、反欺诈模型、异常交易检测等。
    
    自动驾驶(Autonomous Driving):深度学习在自动驾驶领域有重要应用,如目标检测与跟踪、车道识别与保持、交通标志识别、行人检测与预测等。
    
    游戏智能(Game AI):深度学习在游戏领域中被用于构建智能代理,如强化学习算法在玩家控制、游戏策略优化和游戏内容生成方面的应用。
    
    工业质检(Industrial Quality Inspection):深度学习可用于工业质检中的缺陷检测、产品分类和表面缺陷识别等任务。
    
    智能机器人(Intelligent Robotics):深度学习可以用于机器人的感知、运动控制和决策,使机器人能够执行复杂的任务和与人类进行交互。
    
  15. CNN常用模型

    LeNet-5:LeNet-5是最早的卷积神经网络之一,由Yann LeCun等人于1998年提出。它主要用于手写数字识别任务,由卷积层、池化层和全连接层组成。
    
    AlexNet:AlexNet是由Alex Krizhevsky等人于2012年在ImageNet挑战赛中获胜的模型。它深层次地使用了卷积层和池化层,并在网络中引入了ReLU激活函数和Dropout正则化技术。
    
    VGGNet:VGGNet是由Karen Simonyan和Andrew Zisserman在2014年提出的模型。它采用了深层的网络结构,以小尺寸的卷积核进行多次卷积和池化操作,并在全连接层之前使用了大量的卷积层。
    
    GoogLeNet(Inception):GoogLeNet是由Google团队在2014年提出的模型,其创新之处在于引入了Inception模块,通过多种不同尺寸的卷积核并行处理输入,增加网络的宽度和深度。
    
    ResNet:ResNet是由Kaiming He等人在2015年提出的模型,具有非常深的网络结构。它引入了残差连接,通过跨层的快捷连接解决了深层网络中的梯度消失和模型退化问题。
    
    DenseNet:DenseNet是由Gao Huang等人在2016年提出的模型,它采用了密集连接(Dense Connection)的思想,将每一层的输出与后续所有层的输入连接在一起,促进了信息的流动和特征重用。
    
    MobileNet:MobileNet是由Google团队在2017年提出的模型,旨在设计适用于移动设备的轻量级卷积神经网络。它使用深度可分离卷积(Depthwise Separable Convolution)来减少计算量和参数量。
    
    EfficientNet:EfficientNet是由Mingxing Tan和Quoc V. Le在2019年提出的模型,通过使用复合缩放系数(Compound Scaling)同时调整深度、宽度和分辨率来构建高效且准确的网络。
    
  16. 深度学习框架举例出5个以上

    TensorFlow:TensorFlow是由Google开发的开源深度学习框架,具有广泛的生态系统和强大的计算能力。它支持静态图和动态图模式,并提供了丰富的API和工具,可用于构建各种深度学习模型。
    
    PyTorch:PyTorch是由Facebook开发的开源深度学习框架,以动态图为特点,提供了简洁易用的API和灵活的调试能力。PyTorch的设计理念注重易用性和可读性,受到了广泛的欢迎。
    
    Caffe:Caffe是一个专注于卷积神经网络的深度学习框架,由Berkeley Vision and Learning Center开发。Caffe的主要特点是速度快、易于配置和扩展,适用于计算机视觉任务。
    
    MXNet:MXNet是一个可扩展的深度学习框架,具有高效的计算和内存管理,支持多种编程语言(如Python、C++、R和Julia)。MXNet的特点之一是动态计算图和分布式训练的能力。
    
    MindSpore:MindSpore是华为公司开发的全场景AI计算框架,支持深度学习和机器学习任务。它提供了动态图和静态图两种计算模式,并具有高效的计算性能和灵活的分布式训练能力。
    
    PaddlePaddle:PaddlePaddle(百度飞桨)是由百度开发的深度学习平台和框架。它支持动态图和静态图模式,并提供了丰富的预训练模型和工具,适用于各种深度学习任务。
    
    MegEngine:MegEngine是由微软亚洲研究院(MSRA)开发的深度学习框架,具有高性能和可扩展性。它支持静态图模式,并提供了易用的API和丰富的功能,适用于各种深度学习应用。
    
    
  17. 介绍模型调优经验,调整什么参数,得到了什么结果?

  18. 谈谈人工智能对人类的影响

编程题

1

1)	生成模型实例(设为“训练”状态),再设置优化算法和学习率(使用随机梯度下降,学习率设置为0.001),实现方法如下所示,请补全代码。
#声明网络结构
model = MNIST()
def train(model):
# 启动训练模式
model.train()
# 加载训练集 batch_size 设为 16
train_loader = paddle.io.DataLoader(paddle.vision.datasets.MNIST(mode='___(1)___________'), ______(2)__________________, shuffle=True)
       # 定义优化器,使用随机梯度下降SGD优化器,学习率设置为0.001
opt=paddle.optimizer.SGD(learning_rate=____(3)___________, parameters=________(4)__________________)
#声明网络结构
model = MNIST()

def train(model):
# 启动训练模式
model.train()
# 加载训练集 batch_size 设为 16
train_loader = paddle.io.DataLoader(paddle.vision.datasets.MNIST(mode='train'), batch_size=16, shuffle=True)
# 定义优化器,使用随机梯度下降SGD优化器,学习率设置为0.001
opt = paddle.optimizer.SGD(learning_rate=0.001, parameters=model.parameters())

2

  
编写代码,实现如下要求:
(1)	定义一个函数:解压原始数据集,将src_path路径下的zip包解压至target_path目录下的“foods”文件夹下,如该问价不存在,则创建该路径。
答: 
(2)	定义一个类:构建一个2个隐藏层、1个池化层、1个全连接层的卷积神经网络,其中:输入层数据为:3通道,图片大小为64*64,卷积核大小为3*3,步长为1。

# 第一问
import os
import zipfile
import paddle
import paddle.nn as nn

def unzip_dataset(src_path, target_path):
    # 创建目标路径下的"foods"文件夹
    target_dir = os.path.join(target_path, "foods")
    if not os.path.exists(target_dir):
        os.makedirs(target_dir)

    # 解压zip包到目标路径下的"foods"文件夹
    with zipfile.ZipFile(src_path, "r") as zip_ref:
        zip_ref.extractall(target_dir)


# 第二问
class CNN(nn.Layer):
    def __init__(self):
        super(CNN, self).__init__()
        self.conv1 = nn.Conv2D(in_channels=3, out_channels=64, kernel_size=3, stride=1, padding=1)
        self.pool = nn.MaxPool2D(kernel_size=2, stride=2)
        self.conv2 = nn.Conv2D(in_channels=64, out_channels=128, kernel_size=3, stride=1, padding=1)
        self.fc = nn.Linear(in_features=128*16*16, out_features=10)

    def forward(self, x):
        x = self.conv1(x)
        x = paddle.nn.functional.relu(x)
        x = self.pool(x)
        x = self.conv2(x)
        x = paddle.nn.functional.relu(x)
        x = self.pool(x)
        x = paddle.flatten(x, start_axis=1)
        x = self.fc(x)
        return x

3

1)	生成模型实例(设为“训练”状态),再设置优化算法和学习率(使用随机梯度下降,学习率设置为0.001),实现方法如下所示,请补全代码。
#声明网络结构
model = MNIST()
def train(model):
# 启动训练模式
model.train()
# 加载训练集 batch_size 设为 16
train_loader = paddle.io.DataLoader(paddle.vision.datasets.MNIST(mode='___(1)___________'), ______(2)__________________, shuffle=True)
       # 定义优化器,使用随机梯度下降SGD优化器,学习率设置为0.001
opt=paddle.optimizer.SGD(learning_rate=____(3)___________, parameters=________(4)__________________)
1.____________________________
2.________________________________
3.________________________________
4._________________________________
# 声明网络结构
model = MNIST()

def train(model):
    # 启动训练模式
    model.train()
    # 加载训练集 batch_size 设为 16
    train_loader = paddle.io.DataLoader(paddle.vision.datasets.MNIST(mode='train'), batch_size=16, shuffle=True)
    # 定义优化器,使用随机梯度下降SGD优化器,学习率设置为0.001
    opt = paddle.optimizer.SGD(learning_rate=0.001, parameters=model.parameters())

4

用Paddlepaddle深度学习框架搭建VGG神经网络。
1.)首先定义了一组卷积网络,即conv_block。卷积核大小为3x3,池化窗口大小为2x2,窗口滑动大小为2,groups决定每组VGG模块是几次连续的卷积操作,dropouts指定Dropout操作的概率。所使用的img_conv_group是在paddle.networks中预定义的模块,由若干组 Conv->BN->ReLu->Dropout 和 一组 Pooling 组成。
2.)五组卷积操作,即 5个conv_block。 第一、二组采用两次连续的卷积操作。第三、四、五组采用三次连续的卷积操作。每组最后一个卷积后面Dropout概率为0,即不使用Dropout操作。
3.)最后接两层512维的全连接。
4.)通过上面VGG网络提取高层特征,然后经过全连接层映射到类别维度大小的向量,再通过Softmax归一化得到每个类别的概率,也可称作分类器。
答:
import paddle
import paddle.nn as nn

# 定义卷积块(conv_block)
def conv_block(in_channels, out_channels, groups, dropouts):
    layers = []
    for _ in range(groups):
        layers.append(nn.Conv2D(in_channels, out_channels, kernel_size=3, padding=1))
        layers.append(nn.BatchNorm2D(out_channels))
        layers.append(nn.ReLU())
        if dropouts > 0:
            layers.append(nn.Dropout(dropouts))
        in_channels = out_channels
    layers.append(nn.Pool2D(pool_size=2, pool_stride=2))
    return layers

# 定义VGG网络
class VGG(nn.Layer):
    def __init__(self):
        super(VGG, self).__init__()
        self.features = nn.Sequential(
            *conv_block(3, 64, 2, 0.3),  # 第一组,连续两次卷积操作,Dropout概率为0.3
            *conv_block(64, 128, 2, 0.4),  # 第二组,连续两次卷积操作,Dropout概率为0.4
            *conv_block(128, 256, 3, 0.4),  # 第三组,连续三次卷积操作,Dropout概率为0.4
            *conv_block(256, 512, 3, 0.4),  # 第四组,连续三次卷积操作,Dropout概率为0.4
            *conv_block(512, 512, 3, 0.4),  # 第五组,连续三次卷积操作,Dropout概率为0.4
        )
        self.fc1 = nn.Linear(512*7*7, 512)  # 全连接层1,输入大小为512*7*7,输出大小为512
        self.fc2 = nn.Linear(512, num_classes)  # 全连接层2,输入大小为512,输出大小为类别维度大小

    def forward(self, x):
        x = self.features(x)
        x = paddle.flatten(x, start_axis=1)
        x = self.fc1(x)
        x = self.fc2(x)
        return x

# 创建VGG实例
model = VGG()

你可能感兴趣的:(学校作业,深度学习,人工智能)