Jetson Nano 安装TensorFlow GPU教程
您当前位置: 首页 > JETSON NANO 4GB(B01公版/SUB版) > AI入门教程
4、Jetson Nano 安装TensorFlow GPU教程
今天的目标是安装TensorFlow GPU版本,安装TensorFlow GPU版本需要成功配置好CUDA,没有配制好的请看教程1。不过在安装TensorFlow GPU之前,有一些机器学习必须用到的安装包也需要来安装一下。注意配置好的镜像已安装好tensorflow,无需安装。
- 安装pip
因为Jetson Nano中已经安装了Python3.6版本,所以安装pip还是比较简单的
sudo apt-get install python3-pip python3-dev
安装后pip是9.01版本,需要把它升级到最新版,升级后pip版本为19.3.1。这里面升级后会有一个小Bug,需要手动改一下
python3 -m pip install --upgrade pip #升级pip
image.png
sudo vim /usr/bin/pip3 #打开pip3文件
将原来的
from pip import main
if name == ‘main’:
sys.exit(main())
改成
from pip import main
if name == ‘main’:
sys.exit(__main__._main())
修改结束后保存。运行pip3 -V成功后显示
yahboom@yahboom-desktop: ~$ pip3 -V
image.png
- 安装那些机器学习领域非常重要的包
sudo apt-get install python3-numpy
(是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。)
sudo apt-get install python3-scipy
(Scipy是一个用于数学、科学、工程领域的常用软件包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。)
sudo apt-get install python3-pandas
(pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。)
sudo apt-get install python3-matplotlib
(Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形)
sudo apt-get install python3-sklearn
(简单高效的数据挖掘和数据分析工具)
- 安装TensorFlow GPU版
(1)确认CUDA已经被正常安装
nvcc -V
如果能看到CUDA版本号,即为正确安装
image.png
安装所需要的包
sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortran
安装python的依赖项
sudo pip3 install -U numpy1.16.1 future0.18.2 mock3.0.5 h5py2.10.0 keras_preprocessing1.1.1 keras_applications1.0.8 gast==0.2.2 futures protobuf pybind11
(3)安装TensorFlow GPU版本(在线安装经常中断,建议使用离线安装)
(3.1)在线安装
sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v44 tensorflow
以下是官网的tensorflow安装说明。https://docs.nvidia.com/deeplearning/frameworks/install-tf-jetson-platform/index.html#install
(3.2)离线安装
因为在线安装下载太慢了,所以我们可以选择离线包安装,安装包需要去网上下载。需要根据当前系统的JetPack版本安装对应的TensorFlow。资料5、常见的库和模型也有存放一个离线包,但是需要看是否与您当前的系统的jetpack版本匹配。
https://docs.nvidia.com/deeplearning/frameworks/install-tf-jetson-platform-release-notes/tf-jetson-rel.html#tf-jetson-rel
image.png
1)将WHL文件直接通过winSCP软件上传到jeston nano 上的/home/nano文件夹。
2)上传完成之后,输入指令(pip3 install +您对应的版本安装包)
pip3 install xxx.whl
下载途中可能也会需要在线安装一些软件包 直接Y(YES)通过。
3)完成安装,输入以下指令检测tensorflow是否成功安装。
python3
import tensorflow as tf
tf.version
查询tensorflow安装路径为:
tf.path
查询结果如下:
image.png
- 安装Keras
Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。
中文学习网站:https://keras.io/zh/
既然有了TensorFlow,那就把Keras也安装上。我自己很喜欢keras,让TensorFlow变得更加简单
sudo pip3 install keras
安装完成后,进入python3,检查一下安装成果,import keras
image.png
如上可能会出现以下问题,需要更新numpy的版本。
image.png
- 测试TensorFlow
跑一段自己写的非线性回归代码,速度还是挺快的,使用vi新建python文件命名:tensorflowDemo.py 然后复制以下代码进去。保存后使用 python3 tensorflowDemo.py运行,这段必须在图形化界面下运行,因为会出现一张图表。由于是TensorFlow2所以把import tensorflow as tf改成了import tensorflow.compat.v1 as tf和tf.disable_v2_behavior(),即代码的前两句,如果是TensorFlow1则为import tensorflow as tf。
-- coding: utf-8 --
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
import numpy as np
import matplotlib.pyplot as plt
x_data = np.linspace(-0.5, 0.5, 200)[:, np.newaxis]
noise = np.random.normal(0, 0.02, x_data.shape)
y_data = np.square(x_data) + noise
x = tf.placeholder(tf.float32, [None, 1])
y = tf.placeholder(tf.float32, [None, 1])
输入层一个神经元,输出层一个神经元,中间10个
第一层
Weights_L1 = tf.Variable(tf.random.normal([1, 10]))
Biases_L1 = tf.Variable(tf.zeros([1, 10]))
Wx_plus_b_L1 = tf.matmul(x, Weights_L1) + Biases_L1
L1 = tf.nn.tanh(Wx_plus_b_L1)
第二层
Weights_L2 = tf.Variable(tf.random.normal([10, 1]))
Biases_L2 = tf.Variable(tf.zeros([1, 1]))
Wx_plus_b_L2 = tf.matmul(L1, Weights_L2) + Biases_L2
pred = tf.nn.tanh(Wx_plus_b_L2)
损失函数
loss = tf.reduce_mean(tf.square(y - pred))
训练
train = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(2000):
sess.run(train, feed_dict={x: x_data, y: y_data})
print("第{0}次,loss = {1}".format(i, sess.run(loss,feed_dict={x: x_data, y: y_data})))
pred_vaule = sess.run(pred, feed_dict={x: x_data})
plt.figure()
plt.scatter(x_data, y_data)
plt.plot(x_data, pred_vaule, 'r-', lw=5)
plt.show()
image.png
image.png