我使用的是基于ubuntu 20.04 的优麒麟系统(所以deepin linuxmint …都可参考)
最近参加了AI Studio上的课程,写写本地运行飞桨PaddlePaddle + Pycharm 安装运行的初体验,并附带了mnist手写识别案例。



目录

  • 安装 python
  • 安装 pip
  • 安装 Pycharm
  • PyCharm 创建 Paddle 项目
  • 下载 paddlepaddle包
  • 案例:MNIST手写数字识别
  • 完整代码+保存模型
  • 结果说明
  • 再次优化


安装 python

系统自带python,可以终端中用下面命令查看版本:

$ python --version

优麒麟自带python2.7 和 python3.8 两个版本,
如果找不到python命令,直接建立一个链接即可:

ln -s /usr/bin/python3 /user/bin/python

输入这个命令可以查看安装了哪些python

$ ls /usr/bin/python*

安卓平板电脑可以安装python吗 安卓平板可以运行python_python


最后测试一下

$ python --version

安卓平板电脑可以安装python吗 安卓平板可以运行python_paddlepaddle_02

安装 pip

测试是否安了 pip

$ pip --version

如果没有安装,用一下命令,下载安装脚本并安装pip

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py  
$ sudo python get-pip.py

安装 Pycharm

官方下载地址:https://www.jetbrains.com/pycharm/download/#section=linux
我下载的是社区版本:pycharm-community-2020.3.3.tar.gz
在下载好的文件夹中,打开终端:

$ tar -zxvf pycharm-community-2020.3.3.tar.gz

解压出来的文件pycharm文件夹相当于绿色便携版本,直接可以运行的。
但是一般移动到 /usr/ 中,例如我直接把解压好的pycharm文件夹放到/usr/中

$ sudo mv pycharm/ /usr/

然后创建应用快捷方式:

$ sudo touch /usr/share/applications/pycharm.desktop

利用gedit 、vim编辑快捷方式

$ sudo gedit /usr/share/applications/pycharm.desktop

复制下面的内容,然后保存退出

[Desktop Entry]
 Version= 2020.3.3
 Type=Application
 Name=PyCharm
 Icon=/usr/pycharm-community-2020.3.3/bin/pycharm.png
 Exec="/usr/pycharm-community-2020.3.3/bin/pycharm.sh" %f
 Comment=The Drive to Develop
 Categories=Development;IDE;
 Terminal=false
 StartupWMClass=jetbrains-pycharm

其中Icon是应用图标的位置,可以在网上下一个
然后就安装成功了。

PyCharm 创建 Paddle 项目

打开pycharm,New Project

安卓平板电脑可以安装python吗 安卓平板可以运行python_paddlepaddle_03

  • Location:中输入项目地址
  • New environment using Virtualenv:建议创建虚拟的Python运行环境,这样不会对系统中python有任何修改
  • Base interpreter:python解释器来源于/usr/bin/python3.8

点 Create

安卓平板电脑可以安装python吗 安卓平板可以运行python_paddle_04

下载 paddlepaddle包

File - Settings - Project: paddle - 点击Python Interpreter

安卓平板电脑可以安装python吗 安卓平板可以运行python_paddlepaddle_05

点击左下角的 “+” 号

安卓平板电脑可以安装python吗 安卓平板可以运行python_paddle_06


点击Mange Repositories - 点击+

添加国内源

清华:https://pypi.tuna.tsinghua.edu.cn/simple

阿里云:http://mirrors.aliyun.com/pypi/simple/

安卓平板电脑可以安装python吗 安卓平板可以运行python_paddle_07


OK - 搜索 paddlepaddle - 安装即可

安卓平板电脑可以安装python吗 安卓平板可以运行python_paddlepaddle_08

案例:MNIST手写数字识别

创建一个python脚本

File - New - Python File - 取名

安卓平板电脑可以安装python吗 安卓平板可以运行python_深度学习_09

完整代码+保存模型

复制粘贴以下代码,然后点击 Run - Run 'mnist’

import paddle
import numpy as np
import matplotlib.pyplot as plt

import paddle.vision.transforms as T

# 数据的加载和预处理
transform = T.Normalize(mean=[127.5], std=[127.5])

# 训练数据集
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)

# 评估数据集
eval_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)

print('训练集样本量: {},验证集样本量: {}'.format(len(train_dataset), len(eval_dataset)))

print('图片:')
print(type(train_dataset[0][0]))
print(train_dataset[0][0])
print('标签:')
print(type(train_dataset[0][1]))
print(train_dataset[0][1])

# 可视化展示
plt.figure()
plt.imshow(train_dataset[0][0].reshape([28,28]), cmap=plt.cm.binary)
plt.show()

# 模型网络结构搭建
network = paddle.nn.Sequential(
    paddle.nn.Flatten(),           # 拉平,将 (28, 28) => (784)
    paddle.nn.Linear(784, 512),    # 隐层:线性变换层
    paddle.nn.ReLU(),              # 激活函数
    paddle.nn.Linear(512, 10)      # 输出层
)
# 模型封装
model = paddle.Model(network)

# 模型可视化
model.summary((1, 28, 28))

# 配置优化器、损失函数、评估指标
model.prepare(paddle.optimizer.Adam(learning_rate=0.001, parameters=network.parameters()),
              paddle.nn.CrossEntropyLoss(),
              paddle.metric.Accuracy())

# 启动模型全流程训练
model.fit(train_dataset,  # 训练数据集
          eval_dataset,  # 评估数据集
          epochs=5,  # 训练的总轮次
          batch_size=64,  # 训练使用的批大小
          verbose=1)  # 日志展示形式

# 模型评估,根据prepare接口配置的loss和metric进行返回
result = model.evaluate(eval_dataset, verbose=1)

print(result)

# 进行预测操作
result = model.predict(eval_dataset)

# 定义画图方法
def show_img(img, predict):
    plt.figure()
    plt.title('predict: {}'.format(predict))
    plt.imshow(img.reshape([28, 28]), cmap=plt.cm.binary)
    plt.show()

# 抽样展示
indexs = [2, 15, 38, 211]

for idx in indexs:
    show_img(eval_dataset[idx][0], np.argmax(result[0][idx]))

# 保存用于后续继续调优训练的模型
model.save('finetuning/mnist')

结果说明

安卓平板电脑可以安装python吗 安卓平板可以运行python_paddle_10


下载数据集后,显示一张标签为5的图片model.summary() 显示网络结构

安卓平板电脑可以安装python吗 安卓平板可以运行python_paddle_11


训练5次epoch

安卓平板电脑可以安装python吗 安卓平板可以运行python_python_12


验证数据集:

安卓平板电脑可以安装python吗 安卓平板可以运行python_paddle_13


效果相当不错

然后会弹出几个预测的结果

安卓平板电脑可以安装python吗 安卓平板可以运行python_paddle_14


最后模型保存在了finetuning中

再次优化

from paddle.static import InputSpec


# 模型封装,为了后面保存预测模型,这里传入了inputs参数
model_2 = paddle.Model(network, inputs=[InputSpec(shape=[-1, 28, 28], dtype='float32', name='image')])

# 加载之前保存的阶段训练模型
model_2.load('finetuning/mnist')

# 模型配置
model_2.prepare(paddle.optimizer.Adam(learning_rate=0.001, parameters=network.parameters()),
                paddle.nn.CrossEntropyLoss(),
                paddle.metric.Accuracy())

# 模型全流程训练
model_2.fit(train_dataset, 
            eval_dataset,
            epochs=2,
            batch_size=64,
            verbose=1)
# 再次保存
model_2.save('infer/mnist', training=False)

你学会了吗?