华为云在线课堂AI技术领域课程“深度学习”学习心得体会---第四周

举报
在云空中漫步 发表于 2022/07/30 22:10:22 2022/07/30
【摘要】 深度置信网络是神经网络的一种,既可以用于非监督学习,类似于一个自编码机;也可以用于监督学习,作为分类器使用。深度学习和卷积神经网络的发展离不开ILSVRC;

第8章 深度置信网络

8.1 深度置信网络介绍

深度置信网络是神经网络的一种,既可以用于非监督学习,类似于一个自编码机;也可以用于监督学习,作为分类器使用。

非监督学习:尽可能保留原始特征特点,降低特征维度;

监督学习:使得分类错误率尽可能地小;

玻尔兹曼机:

特点:①随机变量都是二值的({0,1})②所有节点是全连接的 ③两个节点之间的相互影响是对称的

用能量衡量整个模型的稳定性

能量收敛到最小,热平衡趋于稳定,能量最少时,最稳定,网络最优。

训练时间非常长。

受限玻尔兹曼机:

层内的神经元没有连接关系,计算量大大减小。

两层:

受限玻尔兹曼机传播过程-正向

受限玻尔兹曼机传播过程-反向

深度置信网络:

多层受限玻尔兹曼机组成的神经网络,生成模型,也可以被看做是监督模型。

训练法则是逐层进行,每一层都用户数向量来推断隐层,再把这个隐层作为数据向量来推断下一个隐层。

深度信念网络

第9章 卷积神经网络

9.1卷积神经网络回顾

网络层:卷积、池化和全连接层

作用:卷积-特征提取;池化-降低特征图参数量和解决图像不变性。全连接-将特征图映射为向量。

核心思想:参数共享和局部感知

卷积计算

信号与系统:

矩阵论:

深度学习:

时域卷积=频域相乘

CNN-特征提取

卷积神经网络的主要作用是提取特征,主要包括图像和语音的特征。

提取特征是为了去除冗余信息量,保留显著特征。

人是通过图像的局部特征来理解图像:特征+认知

卷积神经网络的优点是精确度高,自动提取特征。

9.2 经典的CNN结构

深度学习和卷积神经网络的发展离不开ILSVRC;

ImageNet拥有1500万张标注过得高清图片,总共有22000类,其中约有100万张标注了图片中主要物体的定位边框。

ILSVRC历年成绩

主要包括3个比赛项目:图像分类,单物体定位,物体检测;

AlexNet

闪光点:ReLU,重叠Pooling,数据增强,Dropout

ReLU

使用ReLU代替Sigmoid激活函数,快速收敛

重叠Pooling

实现:stride<kernel size;目的:池化能减轻过拟合

数据增强

实现原始图像(256*256)随机剪裁为224*224的图像;图像水平单转,随机增加光照

Dropout

每个隐藏层神经元的输入以0.5的概率输出为0,防止过拟合。

VGGNet

研究深度对卷积网络的影响。使用简单的3*3卷积核,不断重复卷积层,池化,最后经过全连接,softmax,得到输出类别概率。

小卷积核优于大卷积核

GoogLeNet

用更多的卷积更深的层次得到更好的结构,有好几个Inception结构

Inception结构

ResNet

残差结构

SENet:

子结构

第10章 循环神经网络

10.1 循环神经网络回顾

前馈神经网络的缺点

擅长处理序列数据:RNN

参数共享(w,u,v)

体现出一个神经元其实一直在处理同一个任务;(是RNN可以处理任意长度数据的关键);减少参数量

RNN的连接方式

标准的RNN:

问题:对长时间记忆的信息会衰减,存在梯度爆炸和梯度消失问题,并不能真正的处理好长距离的依赖。

10.2 RNN变种

长短期记忆网络:一种特殊的RNN类型,可以学习长期依赖信息

增加了一些门结构

LSTM-记忆单元:和标准RNN一样,负责记录之前的信息Ct-1


LSTM-遗忘门:遗忘门结构通过分析上一时刻的输出Ht-1和当前时刻的输入Xt,计算出输入系统数it和需要新记忆的内容Ct

LSTM-输入门

LSTM-信息更新

LSTM-输出门

LSTM全景

GRU门控循环单元,简化版的LSTM。

  • 实践案例:Resnet-经典卷积神经网络

1. 加载并处理数据集

import os
import sys
import moxing as mox

datasets_dir = '../datasets'
if not os.path.exists(datasets_dir):
    os.makedirs(datasets_dir)
    
if not os.path.exists(os.path.join(datasets_dir, 'MNIST_Data.zip')):
    mox.file.copy('obs://modelarts-labs-bj4-v2/course/hwc_edu/python_module_framework/datasets/mindspore_data/MNIST_Data.zip', 
                  os.path.join(datasets_dir, 'MNIST_Data.zip'))
    os.system('cd %s; unzip MNIST_Data.zip' % (datasets_dir))
    
sys.path.insert(0, os.path.join(os.getcwd(), '../datasets/MNIST_Data'))
from load_data_all import load_data_all
from process_dataset import process_dataset

mnist_ds_train, mnist_ds_test, train_len, test_len = load_data_all(datasets_dir)  # 加载数据集
mnist_ds_train = process_dataset(mnist_ds_train, batch_size= 64, resize= 28)  # 处理训练集,分批加载
mnist_ds_test = process_dataset(mnist_ds_test, batch_size= 32, resize= 28)  # 处理测试集, 分批加载

2. 下载构建好的resnet18网络源码文件

2.1. 下载网络源码文件

# 下载构建好的网络源文件,只需执行一次即可。
!wget -N https://modelarts-labs-bj4-v2.obs.cn-north-4.myhuaweicloud.com/course/mindspore/mnist_recognition/src/resnet.py --no-check-certificate

2.2.修改网络文件中通道数

# 此命令执行后将直接在原文件中修改,不会有任何输出
!sed -i '387s/3/1/g' ./resnet.py

3. 载入resnet18网络

from resnet import resnet18

network = resnet18(class_num=10)  

4. 定义损失函数和优化器

import mindspore
import mindspore.nn as nn

lr = 0.01
momentum = 0.9

net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')  # 损失函数
net_opt = nn.Momentum(network.trainable_params(), lr, momentum)  # 优化器

5. 配置运行信息

from mindspore import context
context.set_context(mode=context.GRAPH_MODE, device_target="GPU")

6. 调用Model高阶API进行训练和保存模型文件

mport os,time
from mindspore import Model
from mindspore import load_checkpoint, load_param_into_net
from mindspore.train.callback import ModelCheckpoint, CheckpointConfig, LossMonitor, TimeMonitor

model = Model(network, loss_fn=net_loss, optimizer=net_opt, metrics={'acc'})  # 完成Model初始化

# 训练参数
batch_num = mnist_ds_train.get_dataset_size()
max_epochs = 1

model_path = "./models/ckpt/"
os.system('rm -f {0}*.ckpt {0}*.meta {0}*.pb'.format(model_path))

# 定义回调函数
config_ck = CheckpointConfig(save_checkpoint_steps=batch_num, keep_checkpoint_max=35)
ckpoint_cb = ModelCheckpoint(prefix="train_resnet_mnist", directory=model_path, config=config_ck)

loss_cb = LossMonitor(batch_num)  # 用于输出损失
start_time = time.time()
model.train(max_epochs, mnist_ds_train, callbacks=[ckpoint_cb, loss_cb])  # 训练
res = model.eval(mnist_ds_test)  # 验证测试集
print("result: ", res)
cost_time = time.time() - start_time
print("训练总耗时: %.1f s" % cost_time)

!tree ./models/ckpt/

7. 批量图片的预测显示

import numpy as np
from PIL import Image
import mindspore
import mindspore.ops as ops
from mindspore import Tensor

dic_ds_test = mnist_ds_test.create_dict_iterator(output_numpy=True)
ds_test = next(dic_ds_test)
images_test = ds_test["image"]
labels_test = ds_test["label"]
output = model.predict(Tensor(images_test))
pred_labels = ops.Argmax(output_type=mindspore.int32)(output)
print("预测值 -- > ", pred_labels)  # 打印预测值
print("真实值 -- > ", labels_test)  # 打印真实值
batch_img = np.squeeze(images_test[0])
for i in range(1, len(labels_test)):
    batch_img = np.hstack((batch_img, np.squeeze(images_test[i])))  # 将一批图片水平拼接起来,方便下一步进行显示
Image.fromarray((batch_img*255).astype('uint8'), mode= "L")  # 显示真实值

运行截图:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。