《PaddlePaddle从入门到炼丹》一——新版本PaddlePaddle的安装
文章目录
前言
这一章我们介绍如何安装新版本的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环境,然后再使用命令安装PaddlePaddle。
安装Python
1、本系列使用的是Python 3.5,官方在Windows上支持Python2.7.15,Python3.5.x,Python3.6.x,Python3.7.x。读者根据自己的实际情况安装自己喜欢的版本。官网下载页面:https://www.python.org/downloads/windows/ ,官网下载地址:https://www.python.org/ftp/python/3.5.4/python-3.5.4-amd64.exe
2、双击运行Python 3.5安装包开始安装,记住要选上添加环境变量,这很重要,之后使用命令都要依赖这个环境变量,要不每次都要进入到pip
的目录比较麻烦。然后点击Install Now
开始安装。
3、安装完成之后,测试安装是否成功,打开Windows PowerShell
或者cmd
,笔者的系统是Windows 10,可以使用Windows PowerShell
,如果读者是其他系统,可以使用cmd
。用命令python -V
查看是否安装成功。正常安装之后可以显示安装Python的版本。
安装PaddlePaddle
PaddlePaddle支持Windows之后,安装起来非常简单,只需要一条命令就可以完成安装。
- 安装CPU版本,打开
Windows PowerShell
,输入以下命令。可以使用==
指定安装PaddlePaddle的版本,如没有指定版本,默认安装是最新版本。-i
后面是镜像源地址,使用国内镜像源可以大大提高下载速度:
pip3 install paddlepaddle==1.4.1 -i https://mirrors.aliyun.com/pypi/simple/
- 1
- 安装GPU版本,目前支持Windows的CUDA 8.0 cuDNN v7的GPU版本
pip3 install paddlepaddle-gpu==1.4.1 -i https://mirrors.aliyun.com/pypi/simple/
- 1
- 测试安装是否成功,在
Windows PowerShell
中输入命令python
,进入到Python 编辑环境,并输入以下代码,导没有保存证明安装成功:
import paddle.fluid
- 1
Ubuntu下安装
下面介绍在Ubuntu系统下安装PaddlePaddle,PaddlePaddle支持64位的Ubuntu 14.04 /16.04 /18.04系统,Python支持Python2.7.15,Python3.5.x,Python3.6.x,Python3.7.x。
- 安装Python 3.5(通常不需要执行)。通常情况下Ubuntu 16.04自带的就是Python 3.5,其他Ubuntu的版本自带的可能是其他版本,不过没有关系,PaddlePaddle基本都支持,所以不必专门安装Python3.5。
sudo apt install python3.5
sudo apt install python3.5-dev
- 1
- 2
- 安装CPU版本,打开Ubuntu的终端,快捷键是
Ctrl+Alt+T
,输入以下命令。可以使用==
指定安装PaddlePaddle的版本,如没有指定版本,默认安装是最新版本。-i
后面是镜像源地址,使用国内镜像源可以大大提高下载速度:
pip3 install paddlepaddle==1.4.1 -i https://mirrors.aliyun.com/pypi/simple/
- 1
- 安装GPU版本,安装GPU版本之前,要先安装CUDA,可以查看笔者之前的文章《Ubuntu安装和卸载CUDA和CUDNN》,安装完成 CUDA 9 和 CUDNN 7 之后,再安装PaddlePaddle的GPU版本,安装命令如下。可以使用
==
指定安装PaddlePaddle的版本和CUDA、CUDNN的版本,这必须要跟读者系统本身安装的CUDA版本对应,比如以下命令就是安装支持CUDA 9.0和CUDNN 7的PaddlePaddle版本。-i
后面是镜像源地址,使用国内镜像源可以大大提高下载速度:
pip3 install paddlepaddle-gpu==1.4.1.post97 -i https://mirrors.aliyun.com/pypi/simple/
- 1
- 测试安装是否成功,在终端中输入命令
python3
,进入到Python 编辑环境,并输入以下代码,正确情况下如图所示:
import paddle.fluid
- 1
源码编译
这部分我们将介绍使用源码编译PaddlePaddle,可以通过这种方式安装符合读者需求的PaddlePaddle,比如笔者的电脑安装的是CUDA 10 和 CUDNN 7,而目前官方提供的没有支持CUDA 10 和 CUDNN 7的PaddlePaddle版本,所以笔者就可以通过源码编译的方式编译PaddlePaddle安装包,当然也要PaddlePaddle支持才行。
Windows下源码编译
下面我们将介绍在Windows系统下进行源码编译PaddlePaddle。目前支持使用的系统是64位的Windows 10 家庭版/专业版/企业版。
-
安装
Visual Studio 2015 Update3
。下载地址:https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/ ,因为是旧版本,还有加入免费的 Dev Essentials 计划
才能正常下载。 -
安装
cmake 3.13
,下载cmake的安装包,下载地址:https://cmake.org/download/ ,一路默认,只需要在添加环境变量的时候注意添加环境变量就可以了。如何存在环境变量问题,可以重启系统。 -
安装Python的依赖库,只要执行以下命令。关于Windows安装Python,在“Windows下安装”部分已经介绍过,这里就不介绍了。
pip3 install numpy
pip3 install protobuf
pip3 install wheel
- 1
- 2
- 3
-
安装 git 工具。git的下载地址:https://git-scm.com/downloads ,下载git的安装包,安装的时候一路默认就可以了。
-
右键打开
Git Bash Here
,执行以下两条命令。将PaddlePaddle的源码clone在当下目录下的Paddle的文件夹中,并进入Padde目录下,操作如下图所示,之后的命令也是在这个终端操作:
git clone https://github.com/PaddlePaddle/Paddle.git
cd Paddle
- 1
- 2
- 切换到较稳定release分支下进行编译,入笔者选择1.2版本的代码:
git checkout release/1.2
- 1
- 创建名为build的目录并进入:
mkdir build
cd build
- 1
- 2
-
执行编译
- 编译CPU版本命令如下:
cmake .. -G "Visual Studio 14 2015 Win64" -DPY_VERSION=3.5 -DPYTHON_INCLUDE_DIR=${PYTHON_INCLUDE_DIRS} -DPYTHON_LIBRARY=${PYTHON_LIBRARY} -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release
- 1
- 编译GPU版本,目前Windows还不支持GPU,支持后会更新。
9. 下载第三方依赖包(openblas,snappystream),下载地址:https://github.com/wopeizl/Paddle_deps ,将整个third_party
文件夹放到上面第7步创建的build
目录下。
10. 使用Blend for Visual Studio 2015
打开paddle.sln
文件,选择平台为x64
,配置为Release
,开始编译
11. 编译成功后进入\paddle\build\python\dist
目录下找到生成的.whl
包
12. 执行以下命令安装编译好的PaddlePaddle包:
pip3 install (whl包的名字)
- 1
Ubuntu本地下源码编译
下面介绍的是使用Ubuntu编译PaddlePaddle源码,笔者的系统是64位的Ubuntu 16.04,Python环境是Python 3.5。
安装openCV
- 更新apt的源,命令如下:
sudo apt update
- 1
-
下载openCV源码,官方地址:https://opencv.org/releases.html , 笔者下载的是3.4.5版本,选择的是
Sources
点击下载。 -
解压openCV源码,命令如下:
unzip opencv-3.4.5.zip
- 1
- 安装可能需要的依赖库,命令如下:
sudo apt-get install cmake
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev
- 1
- 2
- 开始执行cmake。
cd opencv-3.4.5/
mkdir my_build_dir
cd my_build_dir
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
- 1
- 2
- 3
- 4
- 开始执行编译
make -j$(nproc)
- 1
- 执行安装命令
sudo make install
- 1
安装依赖环境
编译PaddlePaddle源码之前,还需要安装以下的一些依赖环境。
sudo apt install python3.5-dev
sudo apt-get udpate
sudo apt-get install -y software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt install curl
sudo curl https://bootstrap.pypa.io/get-pip.py -o - | python3.5
sudo easy_install pip
sudo apt install swig
sudo apt install wget
sudo pip install numpy==1.14.0
sudo pip install protobuf==3.1.0
sudo pip install wheel
sudo apt install patchelf
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
编译PaddlePaddle
- 将PaddlePaddle的源码clone在当下目录下的Paddle的文件夹中,并进入Padde目录下,命令如下:
git clone https://github.com/PaddlePaddle/Paddle.git
cd Paddle
- 1
- 2
- 切换到较稳定release分支下进行编译,比如笔者使用的是1.2版本,读者可以根据自己的情况选择其他版本:
git checkout release/1.4
- 1
- 创建并进入一个叫build的目录下:
mkdir build && cd build
- 1
-
执行cmake,这里分为CPU版本和GPU版本。
- 编译CPU版本,命令如下。使用参数
-DPY_VERSION
指定编译的PaddlePaddle支持的Python版本,笔者这里选择的是Python 3.5。并且使用参数-DWITH_FLUID_ONLY
指定不编译V2版本的PaddlePaddle代码。使用参数-DWITH_GPU
指定不使用GPU,也就是只编译CPU版本:
cmake .. -DPY_VERSION=3.5 -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release
- 1
- 编译GPU版本,还要安装一下依赖环境,如下:
- 安装 CUDA 和 CUDNN,可以查看笔者之前的文章《Ubuntu安装和卸载CUDA和CUDNN》
- 安装nccl2,命令如下
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb dpkg -i nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb sudo apt-get install -y libnccl2=2.2.13-1+cuda9.0 libnccl-dev=2.2.13-1+cuda9.0
- 1
- 2
- 3
- 执行cmake。使用参数
-DPY_VERSION
指定编译的PaddlePaddle支持的Python版本,笔者这里选择的是Python 3.5。并且使用参数-DWITH_FLUID_ONLY
指定不编译V2版本的PaddlePaddle代码。使用参数-DWITH_GPU
指定使用GPU,同时编译支持CPU和GPU版本的PaddlePaddle。
cmake .. -DPY_VERSION=3.5 -DWITH_FLUID_ONLY=ON -DWITH_GPU=ON -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release
- 1
- 编译CPU版本,命令如下。使用参数
-
使用以下命令正式编译,编译时间比较长:
make -j$(nproc)
- 1
- 编译成功后进入
/paddle/build/python/dist
目录下找到生成的PaddlePaddle.whl
包,可以使用这个命令进入到指定目录。
cd /paddle/build/python/dist
- 1
- 在当前机器或目标机器安装编译好的
.whl
包:
pip3 install (whl包的名字)
- 1
Ubuntu使用Docker源码编译
使用docker编译的安装包只能支持Ubuntu的PaddlePaddle,因为下载docker镜像也是Ubuntu系统的。通过使用docker编译PaddlePaddle得到的安装包,可以在docker本身使用,之后可以使用docker执行PaddlePaddle。也可以本地的Ubuntu上安装使用,不过要注意的是docker中的系统是Ubuntu 16.04。
安装Docker
- 安装前准备
# 卸载系统原有docker
sudo apt-get remove docker docker-engine docker.io containerd runc
# 更新apt-get源
sudo apt-get update
# 安装docker的依赖
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# 添加Docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 验证拥有指纹
sudo apt-key fingerprint 0EBFCD88
# 设置稳定存储库
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 安装Docker,编译CPU版本使用。
# 再次更新apt-get源
sudo apt-get update
# 开始安装docker
sudo apt-get install docker-ce
# 加载docker
sudo apt-cache madison docker-ce
# 验证docker是否安装成功
sudo docker run hello-world
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
正常情况下输出如下图所示。
- 安装nvidia-docker,编译GPU版本使用(根据情况安装)。安装之前要确认本地有独立显卡并安装的显卡驱动。
wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb
sudo dpkg -i /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb
- 1
- 2
编译PaddlePaddle
- 克隆PaddlePaddle源码:
git clone https://github.com/PaddlePaddle/Paddle.git
- 1
- 进入Paddle目录下:
cd Paddle
- 1
-
启动docker镜像
- 编译CPU版本,使用命令
sudo docker run --name paddle-test -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bash
- 1
- 编译GPU版本,使用命令
sudo nvidia-docker run --name paddle-test -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bash
- 1
-
进入Docker后进入paddle目录下:
cd paddle
- 1
- 切换到较稳定release分支下进行编译,读者可以根据自己的情况选择其他版本:
git checkout release/1.4
- 1
- 创建并进入
/paddle/build
路径下:
mkdir -p /paddle/build && cd /paddle/build
- 1
- 使用以下命令安装相关依赖:
pip3 install protobuf==3.1.0
apt install patchelf
- 1
- 2
-
执行cmake:
- 编译CPU版本PaddlePaddle的命令。使用参数
-DPY_VERSION
指定编译的PaddlePaddle支持的Python版本,笔者这里选择的是Python 3.5。并且使用参数-DWITH_FLUID_ONLY
指定不编译V2版本的PaddlePaddle代码。使用参数-DWITH_GPU
指定不使用GPU,只编译支持CPU的PaddlePaddle:
cmake .. -DPY_VERSION=3.5 -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release
- 1
- 编译GPU版本PaddlePaddle的命令。使用参数
-DPY_VERSION
指定编译的PaddlePaddle支持的Python版本,笔者这里选择的是Python 3.5。并且使用参数-DWITH_FLUID_ONLY
指定不编译V2版本的PaddlePaddle代码。使用参数-DWITH_GPU
指定使用GPU,同时编译支持CPU和GPU版本的PaddlePaddle。这里要注意一下,我们拉取的这个镜像是CUDA 8.0的,不一定跟读者本地的CUDA版本对应,这可能导致编译的安装包在本地不可用:
cmake .. -DPY_VERSION=3.5 -DWITH_FLUID_ONLY=ON -DWITH_GPU=ON -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release
- 1
- 编译CPU版本PaddlePaddle的命令。使用参数
-
执行编译:
make -j$(nproc)
- 1
- 编译成功后,生成的安装包存放在
/paddle/build/python/dist
目录下,如果是想在docker中安装PaddlePaddle,可以直接在docker中打开这个目录。如果要在本地安装的话,还有先退出docker,并进入到这个目录:
# 在docker镜像中安装
cd /paddle/build/python/dist
# 在Ubuntu本地安装
exit
cd build/python/dist
- 1
- 2
- 3
- 4
- 5
- 安装PaddlePaddle,执行以下命令:
pip3.5 install (whl包的名字)
- 1
测试环境
下面介绍在Windows测试PaddlePaddle的安装情况,Ubuntu环境类似。
-
开发工具笔者喜欢使用PyCharm,下载地址:https://www.jetbrains.com/pycharm/download/#section=windows , 笔者使用的是社区版本的PyCharm,因为这个是免费的[坏笑]。
-
创建一个新项目,并选择系统的Python环境,第一个是创建一个Python的虚拟环境,这里选择第二个外部的Python环境,点击
...
选择外部Python环境。 -
这里选择系统的Python环境,选择的路径是之前安装Python的路径。
-
创建一个Python程序文件,并命名为
test_paddle.py
,编写并执行以下测试代码,现在看不懂没有关系,跟着这个系列教程来学,我们会熟悉使用PaddlePaddle的:
# Include libraries.
import paddle
import paddle.fluid as fluid
import numpy
import six
# Configure the neural network.
def net(x, y):
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)
return y_predict, avg_cost
# Define train function.
def train(save_dirname):
x = fluid.layers.data(name=‘x’, shape=[13], dtype=‘float32’)
y = fluid.layers.data(name=‘y’, shape=[1], dtype=‘float32’)
y_predict, avg_cost = net(x, y)
sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001)
sgd_optimizer.minimize(avg_cost)
train_reader = paddle.batch(
paddle.reader.shuffle(paddle.dataset.uci_housing.train(), buf_size=500),
batch_size=20)
place = fluid.CPUPlace()
exe = fluid.Executor(place)
def train_loop(main_program):
feeder = fluid.DataFeeder(place=place, feed_list=[x, y])
exe.run(fluid.default_startup_program())
PASS_NUM <span class="token operator">=</span> <span class="token number">1000</span>
<span class="token keyword">for</span> pass_id <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span>PASS_NUM<span class="token punctuation">)</span><span class="token punctuation">:</span>
total_loss_pass <span class="token operator">=</span> <span class="token number">0</span>
<span class="token keyword">for</span> data <span class="token keyword">in</span> train_reader<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
avg_loss_value<span class="token punctuation">,</span> <span class="token operator">=</span> exe<span class="token punctuation">.</span>run<span class="token punctuation">(</span>
main_program<span class="token punctuation">,</span> feed<span class="token operator">=</span>feeder<span class="token punctuation">.</span>feed<span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">,</span> fetch_list<span class="token operator">=</span><span class="token punctuation">[</span>avg_cost<span class="token punctuation">]</span><span class="token punctuation">)</span>
total_loss_pass <span class="token operator">+=</span> avg_loss_value
<span class="token keyword">if</span> avg_loss_value <span class="token operator"><</span> <span class="token number">5.0</span><span class="token punctuation">:</span>
<span class="token keyword">if</span> save_dirname <span class="token keyword">is</span> <span class="token operator">not</span> <span class="token boolean">None</span><span class="token punctuation">:</span>
fluid<span class="token punctuation">.</span>io<span class="token punctuation">.</span>save_inference_model<span class="token punctuation">(</span>
save_dirname<span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'x'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span>y_predict<span class="token punctuation">]</span><span class="token punctuation">,</span> exe<span class="token punctuation">)</span>
<span class="token keyword">return</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Pass %d, total avg cost = %f"</span> <span class="token operator">%</span> <span class="token punctuation">(</span>pass_id<span class="token punctuation">,</span> total_loss_pass<span class="token punctuation">)</span><span class="token punctuation">)</span>
train_loop<span class="token punctuation">(</span>fluid<span class="token punctuation">.</span>default_main_program<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
# Infer by using provided test data.
def infer(save_dirname=None):
place = fluid.CPUPlace()
exe = fluid.Executor(place)
inference_scope = fluid.core.Scope()
with fluid.scope_guard(inference_scope):
[inference_program, feed_target_names, fetch_targets] = (
fluid.io.load_inference_model(save_dirname, exe))
test_reader = paddle.batch(paddle.dataset.uci_housing.test(), batch_size=20)
test_data <span class="token operator">=</span> six<span class="token punctuation">.</span><span class="token builtin">next</span><span class="token punctuation">(</span>test_reader<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
test_feat <span class="token operator">=</span> numpy<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token builtin">list</span><span class="token punctuation">(</span><span class="token builtin">map</span><span class="token punctuation">(</span><span class="token keyword">lambda</span> x<span class="token punctuation">:</span> x<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> test_data<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span>astype<span class="token punctuation">(</span><span class="token string">"float32"</span><span class="token punctuation">)</span>
test_label <span class="token operator">=</span> numpy<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token builtin">list</span><span class="token punctuation">(</span><span class="token builtin">map</span><span class="token punctuation">(</span><span class="token keyword">lambda</span> x<span class="token punctuation">:</span> x<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> test_data<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span>astype<span class="token punctuation">(</span><span class="token string">"float32"</span><span class="token punctuation">)</span>
results <span class="token operator">=</span> exe<span class="token punctuation">.</span>run<span class="token punctuation">(</span>inference_program<span class="token punctuation">,</span>
feed<span class="token operator">=</span><span class="token punctuation">{</span>feed_target_names<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">:</span> numpy<span class="token punctuation">.</span>array<span class="token punctuation">(</span>test_feat<span class="token punctuation">)</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
fetch_list<span class="token operator">=</span>fetch_targets<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"infer results: "</span><span class="token punctuation">,</span> results<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"ground truth: "</span><span class="token punctuation">,</span> test_label<span class="token punctuation">)</span>
# Run train and infer.
if name == “main”:
save_dirname = “fit_a_line.inference.model”
train(save_dirname)
infer(save_dirname)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
正常情况下会输出:
Pass 0, total avg cost = 13527.760742
Pass 1, total avg cost = 12497.969727
Pass 2, total avg cost = 11737.727539
Pass 3, total avg cost = 11017.893555
Pass 4, total avg cost = 9801.554688
Pass 5, total avg cost = 9150.510742
Pass 6, total avg cost = 8611.593750
Pass 7, total avg cost = 7924.654297
......
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
PaddlePaddle的安装已经介绍完成,那我们开始进入深度学习的大门吧。本系列教程将会一步步介绍如何使用PaddlePaddle,并使用PaddlePaddle应用到实际项目中。
项目代码GitHub地址:https://github.com/yeyupiaoling/LearnPaddle2/tree/master/note1
注意: 最新代码以GitHub上的为准
参考资料
- http://www.paddlepaddle.org/documentation/docs/zh/1.2/beginners_guide/install/install_Ubuntu.html
- http://www.paddlepaddle.org/documentation/docs/zh/1.2/beginners_guide/install/install_Windows.html
- https://blog.csdn.net/cocoaqin/article/details/78163171
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" | “Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
创建一个自定义列表
-
Markdown
- Text-to- HTML conversion tool Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎