利用 VS Code 搭建 Paddle Fluid 开发环境

下载vscode

在ubuntu环境下,登录vs code 的官⽹[https://code.visualstudio.com/],下载deb包,安装即可。

原文插图 1

查看系统python版本

$python  --version

原文插图 2

笔者使⽤的是ubuntu16.04, 系统的python的默认版本是2.7,但2.7版本即将停⽌维护,推荐使⽤python3.先安装

python3

$  sudo apt-get  install  python3

原文插图 3

检查是否安装成功

$python3  --version

原文插图 4

下载 paddle.fluid

对应python3 ,⽤pip3安装:pip3 install paddlepaddle[CPU版本],pip install paddlepaddle-gpu (GPU版本 最新)。(GPU版本先要安装好cuda 和cudnn)[注意直接安装最后会报权限不够的错误]

原文插图 5

这个问题可以通过sudo 安装的⽅式避免(需要输⼊ 密码):[或者通过su -切换到 root ⽤⼾下安装;或者加 --user选

项]

$sudo pip3  install  paddlepaddle

原文插图 6

由于系统默认的python是2.7版本的,如果直接导⼊paddle模块,就会报以下错误。

原文插图 7

所以需要将系统的默认python环境配置为python3,可以通过下⾯的命令修改python的默认版本

$  sudo update-alternatives  --install  /usr/bin/python  python  /usr/bin/python2  100
$  sudo update-alternatives  --install  /usr/bin/python  python  /usr/bin/python3  150

再查看python的默认版本,发现已经切换为Python3.

原文插图 8

注:今后如果想将Python命令指向默认的的版本,通过‘sudo update-alternatives --config python'命令即可实现切

换。

再次引⼊paddle模块,发现已经可以成功引⼊。

原文插图 9

⼈⼯智能知识⼊⻔,

本章由6篇文档组成,它们按照简单到难的顺序排列,将指导您如何使用PaddlePaddle完成基础的深度学习任务

本章文档涉及大量了深度学习基础知识,也介绍了如何使用PaddlePaddle实现这些内容,请参阅以下说明了解如何使用:

内容简介

使用方法

创建一个文件夹用来放源码

$mkdir mypaddle

将实例代码clone 到本地(需要安装 git)

$git clone https://github.com/PaddlePaddle/book.git

从vs code 中打开文件夹。

选择对应文件(比如:02.recongnize_digits中的train.py.)[建议先看一下readme文件,大致了解一下程序的原理] ,运行代码:CTRL + Alt + N (或者提前安装code Runner 插件,然后点右上角的三角形即可)

下面的是示例程序中要识别的数字:

最后程序运行结束后,我们可以看到程序给出的判断结果:

相关的代码解释在README.cn.md文件中:

大家可以结合代码和readme文件慢慢上手。

注:官方推荐是使用juypter运行的,其实使用vs code运行问题也不大

相关的理论知识推荐大家参考:

课程:斯坦福大学2014(吴恩达)机器学习

学霸笔记:吴恩达老师的机器学习课程个人笔记

深度学习:Coursera深度学习教程

学霸笔记:deeplearning.ai(吴恩达老师的深度学习课程笔记及资源)

还有一个paddle应用的实例代码包也推荐大家用来学习参考:我的PaddlePaddle学习之路

代码实例

至此,您已经对Fluid核心概念有了初步认识了,不妨尝试配置一个简单的网络吧。如果感兴趣的话可以跟随本部分,完成一个非常简单的数据预测。已经掌握这部分内容的话,可以跳过本节阅读What's next。

从逻辑层面明确了输入数据格式、模型结构、损失函数以及优化算法后,需要使用 PaddlePaddle 提供的 API 及算子来实现模型逻辑。一个典型的模型主要包含4个部分,分别是:输入数据格式定义,模型前向计算逻辑,损失函数以及优化算法。

问题描述

给定一组数据 <X,Y><X,Y>,求解出函数 ff,使得 y=f(x)y=f(x),其中XX,YY均为一维张量。最终网络可以依据输入xx,准确预测出y_predicty_predict。

定义数据

假设输入数据X=[1 2 3 4],Y=[2,4,6,8],在网络中定义:

#定义X数值
train_data=numpy.array([[1.0],[2.0],[3.0],[4.0]]).astype('float32')
#定义期望预测的真实值y_true
y_true = numpy.array([[2.0],[4.0],[6.0],[8.0]]).astype('float32')

搭建网络(定义前向计算逻辑)

接下来需要定义预测值与输入的关系,本次使用一个简单的线性回归函数进行预测:

#定义输入数据类型
x = fluid.layers.data(name="x",shape=[1],dtype='float32')
#搭建全连接网络
y_predict = fluid.layers.fc(input=x,size=1,act=None)

这样的网络就可以进行预测了,虽然输出结果只是一组随机数,离预期结果仍相差甚远:

#加载库
import paddle.fluid as fluid
import numpy
#定义数据
train_data=numpy.array([[1.0],[2.0],[3.0],[4.0]]).astype('float32')
y_true = numpy.array([[2.0],[4.0],[6.0],[8.0]]).astype('float32')
#定义预测函数
x = fluid.layers.data(name="x",shape=[1],dtype='float32')
y_predict = fluid.layers.fc(input=x,size=1,act=None)
#参数初始化
cpu = fluid.core.CPUPlace()
exe = fluid.Executor(cpu)
exe.run(fluid.default_startup_program())
#开始训练
outs = exe.run(
    feed={'x':train_data},
    fetch_list=[y_predict.name])
#观察结果
print(outs)

输出结果:

原文插图 10

注:有一个WARNING,初学时不必在意,不影响程序正常运行

添加损失函数

完成模型搭建后,如何评估预测结果的好坏呢?我们通常在设计的网络中添加损失函数,以计算真实值与预测值的差。

在本例中,损失函数采用均方差函数:

cost = fluid.layers.square_error_cost(input=y_predict, label=y)
avg_cost = fluid.layers.mean(cost)

输出一轮计算后的预测值和损失函数:

#加载库
import paddle.fluid as fluid
import numpy
#定义数据
train_data=numpy.array([[1.0],[2.0],[3.0],[4.0]]).astype('float32')
y_true = numpy.array([[2.0],[4.0],[6.0],[8.0]]).astype('float32')
#定义网络
x = fluid.layers.data(name="x",shape=[1],dtype='float32')
y = fluid.layers.data(name="y",shape=[1],dtype='float32')
y_predict = fluid.layers.fc(input=x,size=1,act=None)
#定义损失函数
cost = fluid.layers.square_error_cost(input=y_predict,label=y)
avg_cost = fluid.layers.mean(cost)
#参数初始化
cpu = fluid.core.CPUPlace()
exe = fluid.Executor(cpu)
exe.run(fluid.default_startup_program())
#开始训练
outs = exe.run(
    feed={'x':train_data,'y':y_true},
    fetch_list=[y_predict.name,avg_cost.name])
#观察结果
print(outs)

输出结果:

原文插图 11

可以看到第一轮计算后的损失函数为9.95,仍有很大的下降空间。由于并没有对损失函数优化,而且只迭代了一次,每个人运行得到的损失函数的值差异会很大。

网络优化

确定损失函数后,可以通过前向计算得到损失值,然后通过链式求导法则得到参数的梯度值。

获取梯度值后需要更新参数,最简单的算法是随机梯度下降法:w=w−η⋅g,由fluid.optimizer.SGD实现:

sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.01)

让我们的网络训练100次,查看结果:

#加载库
import paddle.fluid as fluid
import numpy
#定义数据
train_data=numpy.array([[1.0],[2.0],[3.0],[4.0]]).astype('float32')
y_true = numpy.array([[2.0],[4.0],[6.0],[8.0]]).astype('float32')
#定义网络
x = fluid.layers.data(name="x",shape=[1],dtype='float32')
y = fluid.layers.data(name="y",shape=[1],dtype='float32')
y_predict = fluid.layers.fc(input=x,size=1,act=None)
#定义损失函数
cost = fluid.layers.square_error_cost(input=y_predict,label=y)
avg_cost = fluid.layers.mean(cost)
#定义优化方法
sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.01)
sgd_optimizer.minimize(avg_cost)
#参数初始化
cpu = fluid.core.CPUPlace()
exe = fluid.Executor(cpu)
exe.run(fluid.default_startup_program())
##开始训练,迭代100次
for i in range(100):
    outs = exe.run(
        feed={'x':train_data,'y':y_true},
        fetch_list=[y_predict.name,avg_cost.name])
#观察结果
print(outs)

输出结果:

原文插图 12

可以看到100次迭代后,预测值已经非常接近真实值了,损失值也从初始值9.95下降到了0.01。

恭喜您!已经成功完成了第一个简单网络的搭建,想尝试线性回归的进阶版——房价预测模型,请阅读:线性回归。更多丰富的模型实例可以在模型库中找到。

What's next

如果您已经掌握了基本操作,可以进行下一阶段的学习了:

跟随这一教程将学习到如何对实际问题建模并使用fluid构建模型:配置简单的网络。

完成网络搭建后,可以开始在单机或多机上训练您的网络了,详细步骤请参考训练神经网络。

除此之外,使用文档模块根据开发者的不同背景划分了三个学习阶段:新手入门、使用指南和进阶使用。

如果您希望阅读更多场景下的应用案例,可以跟随导航栏进入快速入门和深度学习基础知识。已经具备深度学习基础知识的用户,可以从使用指南开始阅读。