今天的目标是安装TensorFlow GPU版本,安装TensorFlow GPU版本需要成功配置好CUDA。不过在安装TensorFlow GPU之前,有一些机器学习必须用到的安装包也需要来安装一下。

  1. 安装pip

  因为Jetson Nano中已经安装了Python3.6版本,所以安装pip还是比较简单的

  sudo apt-get install python3-pip python3-dev

  安装后pip是9.01版本,需要把它升级到最新版,升级后pip版本为19.0.3。这里面升级后会有一个小Bug,需要手动改一下

  python3 -m pip install --upgrade pip #升级pip

  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成功后显示

  beckhans@Jetson:~$ pip3 -V

  pip 19.0.3 from /home/beckhans/.local/lib/python3.6/site-packages/pip (python 3.6)

  2. 安装那些机器学习领域如雷贯耳的包

  sudo apt-get install python3-scipy

  sudo apt-get install python3-pandas

  sudo apt-get install python3-sklearn

  这里面没有numpy和matplotlib,不是说他俩不重要,而是安装其它包时,这两个也会被自动安装。

  3. 安装TensorFlow GPU版

  (1)确认CUDA已经被正常安装

  nvcc -V

  如果能看到CUDA版本号,即为正确安装

  (2)安装所需要的包

  sudo apt-get install python3-pip libhdf5-serial-dev hdf5-tools

  (3)安装TensorFlow GPU版本

  pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu==1.13.1+nv19.3 --user

  经历了漫长的等待,下载过程中好几次断网了几次,不过终于安装成功了,没出什么异常。

  最近有很多朋友反应NViada网站的TensorFlow下载太慢,我把官网上的下载下来放百度网盘了,大家下载前先点赞,不点不给用,哈哈哈哈!链接:https://pan.baidu.com/s/17Iq4XXfSR4CDDiQS6NAlOA 提取码:2fy3

  4. 安装Keras

  既然有了TensorFlow,那就把Keras也安装上。我自己很喜欢keras,让TensorFlow变得更加简单

  sudo pip3 install keras

  安装完成后,进入python3,检查一下安装成果,import keras时,下方提示using TensorFlow backend,就证明Keras安装成功并使用TensorFlow作为backend。

  beckhans@Jetson:~$ python3

  Python 3.6.7 (default, Oct 22 2018, 11:32:17)

  [GCC 8.2.0] on linux

  Type "help", "copyright", "credits" or "license" for more information.

  >>> import keras

  Using TensorFlow backend.

  >>>

  5. 测试TensorFlow

  跑一段自己写的非线性回归代码,速度还是挺快的

  import tensorflow as tf

  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)

  # 第二层无锡×××医院×××:http://www.bhnfk.com/

  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()