python深度学习实战期末考试复习资料

课本的介绍:python深度学习实战

目录

课本的介绍:python深度学习实战

12月25日:

①强化学习:

②卷积层:

③神经网络的基本原理

④选择题

⑤大题的实现:


12月25日:

  1. 机器学习的复习:自己的word文档复习资料,在自己的上传资料里面哈

深度学习期末复习_深度学习期末考试-CSDN博客

①强化学习:

  1. 监督学习:是通过带有标签或者对应结果的样训练得到一个最优的解模型,在利用这个模型将所有的输入映射为相应的输出,以实现分类
  2. 非监督的学习:是指在样本标签未知的情况下,根据样本间的相似性对样本集进行聚类,使类内差距最小化,学习出分类器
  3. 强化学习包含4个元素:智能体、环境状态、行为、反馈
  4. 强化学习的特征:
    1. 没有监督者,只有一个反馈的信息
    2. 反馈是延迟的,不是立即生成的
  1. 强化学习主要分为:model-free、model-based两个类,model-free算法又分为基于概率、价值的算法
  2. 神经元:是基本的信息操作和处理单位。
  3. 神经网络:是一个端到端的系统,是一个有向图,以神经元为顶点,神经元的输入为顶点的入边,神经元的输出为顶点的出边
    1. 层次划分:输入层、输出层、隐藏层
  1. 常用的激活函数:sigmoid函数、relu函数、softmax函数

②卷积层:

  1. 前向传播(Forward Propagation):在神经网络中,前向传播是指从输入层开始,通过每一层的神经元,计算并传递信号到输出层的过程。在这一过程中,每个神经元接收来自前一层神经元的输出作为输入,经过加权求和和激活函数处理后,生成自己的输出,并将这个输出传递给下一层的神经元。这个过程一直持续到输出层,生成对给定输入的预测或分类结果。
  2. 反向传播(Backward Propagation):反向传播是神经网络中用于训练权重和偏置参数的过程。在前向传播得出预测结果后,反向传播会计算实际输出与期望输出之间的误差(损失函数)。然后,它会从输出层开始,通过每一层反向计算梯度(误差对每个权重和偏置的偏导数),这些梯度表示了每个参数对于总误差的影响程度。最后,使用这些梯度来更新网络的权重和偏置,以减小预测误差。这个过程通常使用一种称为梯度下降的优化算法来实现。
  3. 卷积层:主要是用一个采样器,从输入数据中采取关键数据内容。
  4. 池化层:主要用于特征降维,压缩数据和参数的数量,减少过拟合,提高模型的容错性。
  5. TensorFlow:是一个采用数据流图(data flow graph)进行数值计算的开源软件库
  6. 卷积神经网络:由卷积层、池化层、非线性激活函数层组成

③神经网络的基本原理

  1. 神经网络的基本原理:每个神经元把最初的输入值乘以一定的权重,并加上其他输入到这个神经元里的值(并结合其他信息值),最后算出一个总和,再经过神经元的偏差调整,最后用激励函数把输出值标准化。

3、感知机的缺陷

答:感知机的缺陷:感知机只能解决线性可分问题,无法解决“异或”这种线性不可分问题。

1、由于感知机的激活函数承受的是阀值函数,输出矢量只能取0或1,所以只能用它来解决简洁的分类问题;

2、感知机仅可以线性地将输入矢量进展分类。理论上已经证明,只要输人矢量是线性可分的,感知机在有限的时间内总能到达目的矢量;

3、感知机还有另外一个问题,当输入矢量中有一个数比其他数都大或小得许多时,可能导致较慢的收敛速度。

4、如何解决过拟合

答:什么是过拟合:

1.在训练上分数很高而在预测上分数表现很低;在训练和预测的分数都表现的很高,但在实际运用是准确率很低

答:过拟合的原因:

1.训练数据太少(比如只有几百组)

2.模型的复杂度太高,拥有大量参数、表现力强。(比如隐藏层层数设置的过多,神经元的数量设置的过大)

解决方法:

1、增加训练数据数

2、使用正则化约束

3、减少特征数

4、调整参数和超参数

5、降低模型的复杂度

6、使用Dropout

5、卷积神经网络卷积层和池化层的作用

答:卷积层的作用是提取输入图片中的信息,这些信息被称为图像特征,这些特征是由图像中的每个像素通过组合或者独立的方式所体现,比如图片的纹理特征,颜色特征。

池化层主要有以下几个作用:

1. 挑选不受位置干扰的图像信息。

2. 对特征进行降维,提高后续特征的感受野,也就是让池化后的一个像素对应前面图片中的一个区域。

3. 因为池化层是不进行反向传播的,而且池化层减少了特征图的变量个数,所以池化层可以减少计算量。

6、什么是过拟合

答:所建的机器学习模型或者是深度学习模型在训练样本中表现得过于优越,导致在测试数据集中表现不佳

7、为什么线性函数不能作为激活函数

答:非线性激活函数可以拓展神经网络的表达能力。如果用线性激活函数,多层的神经网络和单层的就没有区别,只能表达线性逻辑。严格来讲ReLU函数算是分段线性函数。中间隐层激活函数选用线性函数(例如恒等函数)不好,是因为算下来多层网络和单层网络一个效果。其实激活函数的存在是为了神经网络更好的拟合目标函数。

8、什么叫感受野

感受野(Receptive Field)指的是神经网络中某个神经元对输入的影响区域大小。在卷积神经网络(CNN)中,每个卷积层的输出都是由几个局部区域的输入所共同贡献的,这些局部区域的大小和数量决定了该层的感受野大小。一个神经元的感受野可以理解为是该神经元对于输入中哪些部分的信息进行了处理和响应。感受野大小的变化会对网络结构的特征提取能力和计算效率产生影响,如增大感受野可以提高神经元对于图像中全局信息的处理能力,但也会带来较高的计算复杂度。感受野在图像分割和目标检测等任务中也具有重要的意义,可以帮助确定哪些像素需要被聚焦并且进行分类或分割。

④选择题

1.以下哪一项在神经网络中引入了非线性?(B)

A.Dropout B.修正线性单元(ReLU) C.卷积函数 D.随机梯度下降

2.不属于图像分类技术应用领域的是?(D)

A.商品自动分类 B.运输车辆识别 C.残次品自动分类 D.自动驾驶技术

3.不属于深度学习网络模型?(D)

A.GoogleNet B.AlexNet C.resNet D.SVM

4.首次提出人工智能是在哪一年?(D)

A. 1946年 B. 1960年 C.1916年 D.1956年

⑤大题的实现:

8、已知有Affine函数,SoftWithLoss函数,Relu函数,请设计具有一层隐藏层的神经网络并实现代码:P156

答:

import sys, os
sys.path.append(os.pardir)
import numpy as np
from common.layers import *
from common.gradient import numerical_gradient
from collections import OrderedDict
class TwoLayerNet:
def __init__(self, input_size, hidden_size, output_size,weight_init_std=0.01):
# 初始化权重
self.params = {}
self.params['W1'] = weight_init_std * \
np.random.randn(input_size, hidden_size)
self.params['b1'] = np.zeros(hidden_size)
self.params['W2'] = weight_init_std * \
np.random.randn(hidden_size, output_size)
self.params['b2'] = np.zeros(output_size)
# 生成层
self.layers = OrderedDict()
self.layers['Affine1'] = \
Affine(self.params['W1'], self.params['b1'])
self.layers['Relu1'] = Relu()
self.layers['Affine2'] = \Affine(self.params['W2'], self.params['b2'])
self.lastLayer = SoftmaxWithLoss()
def predict(self, x):
for layer in self.layers.values():
x = layer.forward(x)
return x
# x:输入数据, t:监督数据
def loss(self, x, t):
y = self.predict(x)
return self.lastLayer.forward(y, t)
def accuracy(self, x, t):
y = self.predict(x)
y = np.argmax(y, axis=1)
if t.ndim != 1 : t = np.argmax(t, axis=1)
accuracy = np.sum(y == t) / float(x.shape[0])
return accuracy
# x:输入数据, t:监督数据
def numerical_gradient(self, x, t):
loss_W = lambda W: self.loss(x, t)
grads = {}
grads['W1'] = numerical_gradient(loss_W, self.params['W1'])
grads['b1'] = numerical_gradient(loss_W, self.params['b1'])
grads['W2'] = numerical_gradient(loss_W, self.params['W2'])
grads['b2'] = numerical_gradient(loss_W, self.params['b2'])
return grads
def gradient(self, x, t):
# forward
self.loss(x, t)
# backward
dout = 1
dout = self.lastLayer.backward(dout)
layers = list(self.layers.values())
layers.reverse()
for layer in layers:
dout = layer.backward(dout)
# 设定
grads = {}
grads['W1'] = self.layers['Affine1'].dW
grads['b1'] = self.layers['Affine1'].db
grads['W2'] = self.layers['Affine2'].dW
grads['b2'] = self.layers['Affine2'].db
return grads

9、使用Pytorch搭建一个三层神经网络(补考)

答:

Import torch
Import torch.nn as nn
model = nn.Sequential(
nn.Linsear( 784,512),
nn.Relu(),
nn.Linsear( 512,256),
nn.Relu(),
nn.Linsear( 256,2)
image = torch.randn(1,1,784)
Print(model(image),model(image).shape) 
  • 25
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值