记录精彩的程序人生
前言 Caffe是目前比较常用的深度学习框架,这个框架安装没有其他一下主流框架那么简单,直接使用pip命令安装,它更常用的是使用编译的方式安装。所以写下这个文章记录一下。 在Ubuntu上安装Caffe 如果Ubuntu版本是>= 17.04的,就可以使用以下的方式安装Caffe,注意安装的是Python 3的版本。 apt install caffe-cpu 如果是低于这版本,就要使用源码编译了,笔者的系统是64位的Ubuntu 16.04,下面就介绍安装步骤,使用的Python 2。 安装依赖环境 首先我们要安装依赖环境,依赖环境有点多,需要保证都安装了,以免在编译的时候出错。如果之前安装过了,重复执行命令也没有问题的。 apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler apt-get install --no-install-recommends libboost-all-dev apt-get in.....
前言 TensorFlow Lite是一款专门针对移动设备的深度学习框架,移动设备深度学习框架是部署在手机或者树莓派等小型移动设备上的深度学习框架,可以使用训练好的模型在手机等设备上完成推理任务。这一类框架的出现,可以使得一些推理的任务可以在本地执行,不需要再调用服务器的网络接口,大大减少了预测时间。在前几篇文章中已经介绍了百度的paddle-mobile,小米的mace,还有腾讯的ncnn。这在本章中我们将介绍谷歌的TensorFlow Lite。 Tensorflow Lite的GitHub地址:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite Tensorflow的版本为:Tensorflow 1.14.0 转换模型 手机上执行预测,首先需要一个训练好的模型,这个模型不能是TensorFlow原来格式的模型,TensorFlow Lite使用的模型格式是另一种格式的模型。下面就介绍如何使用这个格式的模型。 获取模型主要有三种方法,第一种是在训练的时候就保存tflite模型,另外一种就是使用其他....
前言 中央民族大学创业团队巨神人工智能科技在科赛网公开了一个TibetanMNIST正是形体藏文中的数字数据集,TibetanMNIST数据集的原图片中,图片的大小是350*350的黑白图片,图片文件名称的第一个数字就是图片的标签,如0_10_398.jpg这张图片代表的就是藏文的数字0。在本项目中我们结合第四章所学的卷积神经网络,来完成TibetanMNIST数据集的分类识别。 导入所需的包 主要是使用到PaddlePaddle的fluid和paddle依赖库,cpu_count库是获取当前CPU的数量的,matplotlib用于展示图片。 import paddle.fluid as fluid import paddle import numpy as np from PIL import Image import os from multiprocessing import cpu_count import matplotlib.pyplot as plt 生成图像列表 因为TibetanMNIST数据集已经在科赛网发布了,所以我们创建项目之前还需要在科赛网中把数据集下载下来.....
前言 开发人脸识别系统,人脸数据集是必须的。所以在我们开发这套人脸识别系统的准备工作就是获取人脸数据集。本章将从公开的数据集到自制人脸数据集介绍,为我们之后开发人脸识别系统做好准备。 公开人脸数据集 公开的人脸数据集有很多,本中我们就介绍几个比较常用的人脸数据集。 CelebA人脸数据集 官方提供的下载地址:https://pan.baidu.com/s/1eSNpdRG#list/path=%2F 该数据集下载后有3个文件夹,Anno文件夹是存放标注文件的,Eval文件夹是存放评估列表文件的,Img文件是存放图片文件的。 Img中有3中类型的图像文件,其中 img_align_celeba.zip是经过对人脸居中,裁剪,并统一大小为178*178的jpg图片; img_align_celeba_png.7z中的图片跟img_align_celeba.zip中的图片一样,唯一不同的是这些图片是png格式的,所以这些图片要大得多。 img_celeba.7z这个是人脸图片的原始图片,没有经过居中裁剪等处理的图片。 Anno文件夹中有5个标注文件,其中 identity_CelebA.......
前言 前一章我们已经介绍了常见的人脸数据集,在本章将要进行人脸识别的第二步人脸检测。在人脸识别任务中,首先是需要检查一张图片中是包含有人脸,然后把这个人脸裁剪出来,然后使用脸部的关键点进行人脸对齐,最后使用人脸对比方式完成人脸识别。 训练PNet 模型 MTCNN模型一共有三个模型。
本项目是基于PaddlePaddle的DeepSpeech 项目开发的,做了较大的修改,方便训练中文自定义数据集,同时也方便测试和使用。DeepSpeech2是基于PaddlePaddle实现的端到端自动语音识别(ASR)引擎,其论文为《Baidu's Deep Speech 2 paper》 ,本项目同时还支持各种数据
均值(mean,average) 代表一组数据在分布上的集中趋势和总体上的平均水平。 常说的中心化(Zero-Centered)或者零均值化(Mean-subtraction),就是把每个数值都减去均值。 $$ \mu=\frac{1}{N}\sum_{i=1}^Nx_i\left(x:x_1,x_2,...,x_N\right) $$ import numpy as np # 一维数组 x = np.array([-0.02964322, -0.11363636, 0.39417967, -0.06916996, 0.14260276]) print('数据:', x) # 求均值 avg = np.mean(x) print('均值:', avg) 输出: 数据: [-0.02964322 -0.11363636 0.39417967 -0.06916996 0.14260276] 均值: 0.064866578 标准差(Standard Deviation) 代表一组数据在分布上第离散程度。 方差是标准差的平方。 $$ \sigma=\sqrt{\frac{1}{N}....
说明 这个是使用PaddlePaddle训练cifar10数据集的一个例子 问题1:网络结构 问题:计算每层网络结构和输入输出尺寸和参数个数。不加BN?更深?每层的尺寸变化?更多结构? def convolutional_neural_network(img): print('输入层的shape:', img.shape) conv_pool_1 = fluid.nets.simple_img_conv_pool( input=img, filter_size=5, num_filters=20, pool_size=2, pool_stride=2, act="relu") print('第一层卷积池化层输出shape:', conv_pool_1.shape) conv_pool_1 = fluid.layers.batch_norm(conv_pool_1) conv_pool_2 = fluid.nets.simple_img_conv_pool( input=conv_pool_1, filter_size=5, num_filters=50, pool_size=2, po....
前言 这一章我们介绍如何安装新版本的PaddlePaddle,这里说的新版本主要是说Fluid版本。Fluid 是设计用来让用户像Pytorch和Tensorflow Eager Execution一样执行程序。在这些系统中,不再有模型这个概念,应用也不再包含一个用于描述Operator图或者一系列层的符号描述,而是像通用程序那样描述训练或者预测的过程。也就是说PaddlePaddle从Fluid版本开始使用动态图机制,所以我们这个系列也是使用Fluid版本编写的教程。 环境 系统:64位Windows 10专业版,64位Ubuntu 16.04 Python环境:Python 3.5 内存:8G Windows下安装 PaddlePaddle在1.2版本之后开始支持Windows,也就是说使用Windows的用户不需要再安装Docker容器,或者使用Windows的Liunx子系统,直接可以在Windows系统本身安装PaddlePaddle。下面我们就介绍如何在Windows安装PaddlePaddle,分为两个部分介绍,首先安装Python 3.5环境,然后再使用命令安装Pa......
前言 在第一章介绍了PaddlePaddle的安装,接下来我们将介绍如何使用PaddlePaddle。PaddlePaddle是百度在2016年9月27日开源的一个深度学习框架,也是目前国内唯一一个开源的深度学习框架。PaddlePaddle在0.11.0版本之后,开始推出Fluid版本,Fluid版本相对之前的V2版本,Fluid的代码结构更加清晰,使用起来更加方便。这本章中我们将会介绍如何使用PaddlePaddle来计算1+1,选择这个简单的例子主要是为了让读者了解PaddlePaddle的Fluid版本的使用,掌握PaddlePaddle的使用流程。我们讲过介绍如何使用PaddlePaddle定义一个张量和如何对张量进行计算。 计算常量的1+1 PaddlePaddle类似一个科学计算库,比如Python下我们使用的numpy,提供的大量的计算操作,但是PaddlePaddle的计算对象是张量。我们下面就编写一个constant_sum.pyPython文件,使用PaddlePaddle计算一个[[1, 1], [1, 1]] * [[1, 1], [1, 1]]。 首先导入P....
前言 在第二章,我们已经学习了如何使用PaddlePaddle来进行加法计算,从这个小小的例子中,我们掌握了PaddlePaddle的使用方式。在本章中,我们将介绍使用PaddlePaddle完成一个深度学习非常常见的入门例子——线性回归,我们将分别使用自定义数据集和使用PaddlePaddle提供的数据集接口来训练一个线性回归模型。 使用自定义数据 在这一部分,我们将介绍整个线性回归从定义网络到使用自定义的数据进行训练,最后验证我们网络的预测能力。 首先导入PaddlePaddle库和一些工具类库。 import paddle.fluid as fluid import paddle import numpy as np 定义一个简单的线性网络,这个网络非常简单,结构是:输出层-->>隐层-->>输出层,这个网络一共有2层,因为输入层不算网络的层数。更具体的就是一个大小为100,激活函数是ReLU的全连接层和一个输出大小为1的全连接层,就这样构建了一个非常简单的网络。这里使用输入fluid.layers.data()定义的输入层类似fluid.layers......
前言 上一章我们通过学习线性回归例子入门了深度学习,同时也熟悉了PaddlePaddle的使用方式,那么我们在本章学习更有趣的知识点卷积神经网络。深度学习之所以那么流行,很大程度上是得益于它在计算机视觉上得到非常好的效果,而在深度学习上几乎是使用卷积神经网络来提取图像的特征的。在PaddlePaddle上如何定义一个卷积神经网络,并使用它来完成一个图像识别的任务呢。在本章我们通过学习MNIST图像数据集的分类例子,来掌握卷积神经网络的使用。 训练模型 创建一个mnist_classification.py文件,首先导入所需得包,这次使用到了MNIST数据集接口,也使用了处理图像得工具包。 import numpy as np import paddle as paddle import paddle.dataset.mnist as mnist import paddle.fluid as fluid from PIL import Image import matplotlib.pyplot as plt 在图像识别上,使用得算法也经过了多次的迭代更新,比如多层感知器,在卷积神经网.....
前言 除了卷积神经网络,深度学习中还有循环神经网络也是很常用的,循环神经网络更常用于自然语言处理任务上。我们在这一章中,我们就来学习如何使用PaddlePaddle来实现一个循环神经网络,并使用该网络完成情感分析的模型训练。 训练模型 创建一个text_classification.py的Python文件。首先导入Python库,fluid和numpy库我们在前几章都有使用过,这里就不重复了。这里主要结束是imdb库,这个是一个数据集的库,这个是数据集是一个英文的电影评论数据集,每一条数据都会有两个分类,分别是正面和负面。 import paddle import paddle.dataset.imdb as imdb import paddle.fluid as fluid import numpy as np 循环神经网络发展到现在,已经有不少性能很好的升级版的循环神经网络,比如长短期记忆网络等。一下的代码片段是一个比较简单的循环神经网络,首先是经过一个fluid.layers.embedding(),这个是接口是接受数据的ID输入,因为输入数据时一个句子,但是在训练的时候我们是.....
@[TOC] 前言 我们上一章使用MNIST数据集进行训练,获得一个可以分类手写字体的模型。如果我们数据集的数量不够,不足于让模型收敛,最直接的是增加数据集。但是我们收集数据并进行标注是非常消耗时间了,而最近非常火的生成对抗网络就非常方便我们数据的收集。对抗生成网络可以根据之前的图片训练生成更多的图像,已达到以假乱真的目的。 训练并预测 创建一个GAN.py文件。首先导入所需要的Python包,其中matplotlib包是之后用于展示出生成的图片。 import numpy as np import paddle import paddle.fluid as fluid import matplotlib.pyplot as plt 定义网络 生成对抗网络由生成器和判别器组合,下面的代码片段就是一个生成器,生成器的作用是尽可能生成满足判别器条件的图像。随着以上训练的进行,判别器不断增强自身的判别能力,而生成器也不断生成越来越逼真的图片,以欺骗判别器。生成器主要由两组全连接和BN层、两组转置卷积运算组成,其中最后一层的卷积层的卷积核数量是1,因为输出的图像是一个灰度图的手写字体图片。 .....
前言 本章介绍使用PaddlePaddle实现强化学习,通过自我学习,完成一个经典控制类的游戏,相关游戏介绍可以在Gym官网上了解。我们这次玩的是一个CartPole-v1游戏,操作就是通过控制滑块的左右移动,不让竖着的柱子掉下来。利用强化学习的方法,不断自我学习,通过在玩游戏的过程中获取到奖励或者惩罚,学习到一个模型。在王者荣耀中的超强人机使用的AI技术也类似这样。 PaddlePaddle程序 创建一个DQN.py的Python文件。导入项目所需的依赖库,如果还没安装gym的话,可以通过命令pip3 install gym安装。 import numpy as np import paddle.fluid as fluid import random import gym from collections import deque from paddle.fluid.param_attr import ParamAttr 定义一个简单的网络,这个网络只是由4个全连接层组成,并为每个全连接层指定参数的名称。指定参数的作用是为了之后更新模型参数使用的,因为之后会通过这个网络生成两个......
前言 本系列教程中,前面介绍的都没有保存模型,训练之后也就结束了。那么本章就介绍如果在训练过程中保存模型,用于之后预测或者恢复训练,又或者由于其他数据集的预训练模型。本章会介绍三种保存模型和使用模型的方式。 训练模型 在训练模型的过程中我们可以随时保存模型,当时也可以在训练开始之前加载之前训练过程的模型。为了介绍这三个保存模型的方式,一共编写了三个Python程序进行介绍,分别是save_infer_model.py、 save_use_params_model.py、save_use_persistables_model.py。 导入相关的依赖库 import os import shutil import paddle as paddle import paddle.dataset.cifar as cifar import paddle.fluid as fluid 定义一个残差神经网络,这个是目前比较常用的一个网络。该神经模型可以通过增加网络的深度达到提高识别率,而不会像其他过去的神经模型那样,当网络继续加深时,反而会损失精度。 # 定义残差神经网络(ResNet) def .....
前言 在深度学习训练中,例如图像识别训练,每次从零开始训练都要消耗大量的时间和资源。而且当数据集比较少时,模型也难以拟合的情况。基于这种情况下,就出现了迁移学习,通过使用已经训练好的模型来初始化即将训练的网络,可以加快模型的收敛速度,而且还能提高模型的准确率。这个用于初始化训练网络的模型是使用大型数据集训练得到的一个模型,而且模型已经完全收敛。最好训练的模型和预训练的模型是同一个网络,这样可以最大限度地初始化全部层。 初步训练模型 本章使用的预训练模型是PaddlePaddle官方提供的ResNet50网络模型,训练的数据集是ImageNet,它的下载地址为:http://paddle-imagenet-models-name.bj.bcebos.com/ResNet50_pretrained.zip ,读者可以下载其他更多的模型,可以在这里下载。下载之后解压到models目录下。 编写一个pretrain_model.py的Python程序,用于初步训练模型。首先导入相关的依赖包。 import os import shutil import paddle as paddle imp....
前言 VisualDL是一个面向深度学习任务设计的可视化工具,包含了scalar、参数分布、模型结构、图像可视化等功能。可以这样说:“所见即所得”。我们可以借助VisualDL来观察我们训练的情况,方便我们对训练的模型进行分析,改善模型的收敛情况。 scalar,趋势图,可用于训练测试误差的展示 image, 图片的可视化,可用于卷积层或者其他参数的图形化展示 histogram, 用于参数分布及变化趋势的展示 graph,用于训练模型结构的可视化 以上的图像来自VisualDL的Github 既然那么方便,那么我们就来尝试一下吧。VisualDL底层采用C++编写,但是它在提供C++ SDK的同时,也支持Python SDK,我们主要是使用Python的SDK。顺便说一下,VisualDL除了支持PaddlePaddle,之外,还支持pytorch, mxnet在内的大部分主流DNN平台。 VisualDL的安装 本章只讲述在Ubuntu系统上的安装和使用,Mac的操作应该也差不多。 使用pip安装 使用pip安装非常简单,只要一条命令就够了,如下: pip3 insta....
GitHub地址:https://github.com/yeyupiaoling/LearnPaddle2/tree/master/note11 前言 本章将介绍如何使用PaddlePaddle训练自己的图片数据集,在之前的图像数据集中,我们都是使用PaddlePaddle自带的数据集,本章我们就来学习如何让PaddlePaddle训练我们自己的图片数据集。 爬取图像 在本章中,我们使用的是自己的图片数据集,所以我们需要弄一堆图像来制作训练的数据集。下面我们就编写一个爬虫程序,让其帮我们从百度图片中爬取相应类别的图片。 创建一个download_image.py文件用于编写爬取图片程序。首先导入所需的依赖包。 import re import uuid import requests import os import numpy import imghdr from PIL import Image 然后编写一个下载图片的函数,这个是程序核心代码。参数是下载图片的关键、保存的名字、下载图片的数量。关键字是百度搜索图片的关键。 # 获取百度图片下载图片 def download_ima.....
前言 我们在第五章学习了循环神经网络,在第五章中我们使用循环神经网络实现了一个文本分类的模型,不过使用的数据集是PaddlePaddle自带的一个数据集,我们并没有了解到PaddlePaddle是如何使用读取文本数据集的,那么本章我们就来学习一下如何使用PaddlePaddle训练自己的文本数据集。我们将会从中文文本数据集的制作开始介绍,一步步讲解如何使用训练一个中文文本分类神经网络模型。 GitHub地址:https://github.com/yeyupiaoling/LearnPaddle2/tree/master/note12 爬取文本数据集 网络上一些高质量的中文文本分类数据集相当少,经过充分考虑之后,绝对自己从网络中爬取自己的中文文本数据集。在GitHub中有一个开源的爬取今日头条中文新闻标题的代码,链接地址请查看最后的参考资料。我们在这个开源代码上做一些简单修改后,就使用他来爬取数据。 创建一个download_text_data.py文件,这个就是爬取数据集的程序。首先导入相应的依赖包。 import os import random import requests im....