记录精彩的程序人生
前言 在第一章介绍了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,这里说的新版本主要是说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训练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....
均值(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的DeepSpeech 项目开发的,做了较大的修改,方便训练中文自定义数据集,同时也方便测试和使用。DeepSpeech2是基于PaddlePaddle实现的端到端自动语音识别(ASR)引擎,其论文为《Baidu's Deep Speech 2 paper》 ,本项目同时还支持各种数据
前言 前一章我们已经介绍了常见的人脸数据集,在本章将要进行人脸识别的第二步人脸检测。在人脸识别任务中,首先是需要检查一张图片中是包含有人脸,然后把这个人脸裁剪出来,然后使用脸部的关键点进行人脸对齐,最后使用人脸对比方式完成人脸识别。 训练PNet 模型 MTCNN模型一共有三个模型。
前言 开发人脸识别系统,人脸数据集是必须的。所以在我们开发这套人脸识别系统的准备工作就是获取人脸数据集。本章将从公开的数据集到自制人脸数据集介绍,为我们之后开发人脸识别系统做好准备。 公开人脸数据集 公开的人脸数据集有很多,本中我们就介绍几个比较常用的人脸数据集。 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.......
前言 中央民族大学创业团队巨神人工智能科技在科赛网公开了一个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数据集已经在科赛网发布了,所以我们创建项目之前还需要在科赛网中把数据集下载下来.....
前言 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模型,另外一种就是使用其他....
前言 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.....
前言 在之前笔者有介绍过《在Android设备上使用PaddleMobile实现图像分类》,使用的框架是百度开源的PaddleMobile。在本章中,笔者将会介绍使用腾讯的开源手机深度学习框架ncnn来实现在Android手机实现图像分类,这个框架开源时间比较长,相对稳定很多。 ncnn的GitHub地址:https://github.com/Tencent/ncnn 使用Ubuntu编译ncnn库 1、首先要下载和解压NDK。 wget https://dl.google.com/android/repository/android-ndk-r17b-linux-x86_64.zip unzip android-ndk-r17b-linux-x86_64.zip 2、设置NDK环境变量,目录是NDK的解压目录。 export NDK_ROOT="/home/test/paddlepaddle/android-ndk-r17b" 设置好之后,可以使用以下的命令查看配置情况。 root@test:/home/test/paddlepaddle# echo $NDK_ROOT /hom......
前言 在之前笔者有介绍过《在Android设备上使用PaddleMobile实现图像分类》,使用的框架是百度开源的PaddleMobile。在本章中,笔者将会介绍使用小米的开源手机深度学习框架MACE来实现在Android手机实现图像分类。 MACE的GitHub地址:https://github.com/XiaoMi/mace 编译MACE库和模型 编译MACE库和模型有两种方式,一种是在Ubuntu本地上编译,另一种是使用docker编译。下面就介绍使用这两种编译方式。 使用Ubuntu编译 使用Ubuntu编译源码比较麻烦的是就要自己配置环境,所以下面我们就来配置一下环境。以下是官方给出的环境依赖: 所需依赖 SoftwareInstallation commandTested version Python 2.7 Bazelbazel installation guide0.13.0 CMakeapt-get install cmake>= 3.11.3 Jinja2pip install -I jinja2==2.102.10 PyYamlpip install....
前言 有不少开发者在学习深度学习框架的时候会开源一些训练好的模型,我们可以使用这些模型来运用到我们自己的项目中。如果使用的是同一个深度学习框架,那就很方便,可以直接使用,但是如果时不同深度学习框架,我们就要对模型转换一下。下面我们就介绍如何把Caffe的模型转换成PaddlePaddle的Fluid模型。 环境准备 在线安装最新发布的PaddlePaddle,可以使用pip命令直接在线安装PaddlePaddle。 pip install paddlepaddle 下在安装最新的PaddlePaddle,可以在下面选择适合自己PaddlePaddle的版本,这里下载的是最新编译得到的,然后使用pip命令安装。 http://www.paddlepaddle.org/documentation/docs/zh/0.14.0/new_docs/beginners_guide/install/install_doc.html#id26 克隆PaddlePaddle下的models源码。 git clone https://github.com/PaddlePaddle/mod....
前言 本文章我们来学习一下使用PaddlePaddle实现人脸对比和人脸识别,使用的训练数据集是CASIA-WebFace。 数据集介绍 我们使用的是CASIA-WebFace数据集,该人脸数据集是目前最大的公开人脸数据集。该人脸数据集一共有包含10,575个人,494,414张图像,包含彩色图和灰图。各大人脸数据集情况如下表。 DatasetSubjectsImagesAvailability LFW [1]5,74913,233Public WDRef [2]2,99599,773Public (feature only) CelebFaces [3]10,177202,599Private SFC [4]4,0304,400,000Private CACD [5]2,000163,446Public (partial annotated) CASIA-WebFace10,575494,414Public 训练模型 为了方便读取数据集,我们要生成一个图像列表,用于训练时读取数据,这个列表的作用具体可以阅读笔者之前的文章《我的PaddlePaddle学习之路》笔记四——自....
前言 现在越来越多的手机要使用到深度学习了,比如一些图像分类,目标检测,风格迁移等等,之前都是把数据提交给服务器完成的。但是提交给服务器有几点不好,首先是速度问题,图片上传到服务器需要时间,客户端接收结果也需要时间,这一来回就占用了一大半的时间,会使得整体的预测速度都变慢了,再且现在手机的性能不断提高,足以做深度学习的预测。其二是隐私问题,如果只是在本地预测,那么用户根本就不用上传图片,安全性也大大提高了。现在的手机深度学习会计有很多,比如百度的paddle-mobile、小米的MACNE、腾讯的NCNN、谷歌的TensorFlow lite,而我们在本章使用的是百度的paddle-mobile。 PaddleMobile的GitHub地址:https://github.com/PaddlePaddle/paddle-mobile 编译paddle-mobile库 想要使用paddle-mobile,就要编译Android能够使用的CPP库,在这一部分中,我们介绍两种编译Android的paddle-mobile库,分别是使用Docker编译paddle-mobile库、使用Ubunt....
前言 在本篇文章中,我们将会介绍TensorFlow的安装,TensorFlow是Google公司在2015年11月9日开源的一个深度学习框架。 官网文档地址为:https://www.tensorflow.org/ 官方GitHub仓库:https://github.com/tensorflow/tensorflow TensorFlow目前支持4种开发语言,分别是Python(包括Python2和Python3)、Java、Go、C。笔者使用的环境如下: 开发语言:Python 3.6 使用操作系统:Ubuntu 16.04、Windows 10 硬件环境:CPU 基于这些环境,我们来安装TensorFlow吧,笔者将会通过两种操作系统来安装,分别是Ubuntu 16.04和Windows 10。 Ubuntu下安装TensorFlow 在Ubuntu上我们准备两种安装方式,分别是原生pip、Virtualenv 环境 和 Docker容器,下面我们就在三个环境下安装。 原生pip安装TensorFlow 使用原生的pip安装时最简单的,直接安装使用一条命令就可以安装完成了....
前言 在本章中,我们一起来学习下TensorFlow。我们将会学习到TensorFlow的一些基本库。通过计算一个线性函数来熟悉这些库。最后还学习使用TensorFlow搭建一个神经网络来识别手势。本章用到的一些库在这里下载。 TensorFlow的基本库 首先是导入所需的库,其中最重要的库就是tensorflow的,我们给它一个别名tf。 import math import numpy as np import h5py import tensorflow as tf from tensorflow.python.framework import ops from tf_utils import load_dataset, random_mini_batches, convert_to_one_hot, predict 下面我们使用TensorFlow计算一个损失函数,损失函数公式如下: $$ loss = \mathcal{L}(\hat{y}, y) = (\hat y^{(i)} - y^{(i)})^2 \tag{1} $$ 首先定义两个变量,对应是公式的y帽和y,如下,.....
前言 反向传播计算梯度$\frac{\partial J}{\partial \theta}$, $\theta$表示模型的参数。 $J$是使用正向传播和损失函数来计算的。 计算公式如下: $$ \frac{\partial J}{\partial \theta} = \lim_{\varepsilon \to 0} \frac{J(\theta + \varepsilon) - J(\theta - \varepsilon)}{2 \varepsilon} \tag{1} $$ 因为向前传播相对容易实现,所以比较容易获得正确的结果,确定要计算成本$J$ 正确。因此,可以通过计算$J$ 验证计算$\frac{\partial J}{\partial \theta}$ 。 一维梯度检查 一维线性函数$J(\theta) = \theta x$。该模型只包含一个实值参数$\theta$,并采取x作为输入。 一维线性模型 上图显示了关键的计算步骤:首先从开始$x$,然后评估该功能 $J(x)$(“前向传播”)。然后计算导数 $\frac{\partial J}{\partial \thet.....
前言 如果训练数据集不够大,由于深度学习模型具有非常大的灵活性和容量,以至于过度拟合可能是一个严重的问题,为了解决这个问题,引入了正则化的这个方法。要在神经网络中加入正则化,除了在激活层中加入正则函数,应该dropout也是可以起到正则的效果。我们来试试吧。 前提工作 在使用之前,我们还要先导入所需的依赖包,和加载数据,其中有些依赖包可以在这里下载。 # coding=utf-8 import matplotlib.pyplot as plt from reg_utils import compute_cost, predict, forward_propagation, backward_propagation, update_parameters from reg_utils import sigmoid, relu, initialize_parameters, load_2D_dataset from testCases import * # 加载数据 train_X, train_Y, test_X, test_Y = load_2D_dataset() 以下就是我们使用到.....
前言 良好的初始化权重有以下的好处: 加快梯度下降的收敛速度 增加梯度下降收敛到较低训练(和泛化)错误的几率 所以一个良好的初始化也是非常重要的,这里尝试三种初始化化方式: 零初始化,将权重参数初始化为零。 随机初始化,使用随机的方式,初始化权重参数。 He初始化,这个公式的初始化方式。 我们来尝试这个三种方法吧。 模型函数 编写一个 model函数,使用这个函数可以测试各种初始化权重参数的效果。 在编写 model函数之前,我们先要导入对于依赖包,其中有些依赖包可以在这里下载。 # coding=utf-8 import numpy as np from init_utils import compute_loss, forward_propagation, backward_propagation from init_utils import update_parameters, predict, load_dataset # 加载图像数据集:蓝色/红点在圆圈中 train_X, train_Y, test_X, test_Y = load_dataset() 其中使用的....