上学期钻研了下Python3和人工神经网络,如多层感知器、卷积神经网络等算法原理,这学期要在此基础上使用深度学习研究运动状态识别的问题。这两天看了下TensorFlow这个框架,官网的文档写的非常详细,Google大法好啊!在这里记录下遇到的小问题,以及参考官网的说明写的使用CNN训练MNIST的Python代码。
TensorFlow安装
TensorFlow是一个使用数据流图进行数值计算的开源软件库。图中的节点代表数学运算, 而图中的边则代表在这些节点之间传递的多维数组(张量)。这种灵活的架构可让您使用一个 API 将计算工作部署到桌面设备、服务器或者移动设备中的一个或多个 CPU 或 GPU。
按照官网的说明,安装Tensorflow(GPU版,Windows平台)需要安装以下软件:
- NVIDIA一块计算能力大于3的显卡
- CUDA® Toolkit 8.0
- cuDNN v6.1
- Python 3.5
我台式机显卡是GeForce GTX 750,对应的计算能力为5.0,就凑合着先用。上述环境安装好后可以直接使用Python自带的pip3工具安装Tensorflow:
pip3 install --upgrade tensorflow-gpu
完毕后运行下面的Python脚本已测试是否安装成功:
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
如果能顺利运行并且输出 Hello, TensorFlow! ,那么就安装完成了。
安装的时候要注意添加环境变量(官网上也提示了)。但最终,我的代码并没有输出 Hello, TensorFlow! ,而是提示了什么DLL错误,网上也有很多人遇到了这种错误,解决办法就是 将cuDNN安装文件夹下的 bin/cudnn64_6.dll文件拷贝到CUDA® Toolkit 8.0安装目录的CUDA/v8.0/bin目录下。
在看官网文档的时候刚开始没弄明白Tensor Ranks, Shapes是啥回事,后来看了几段代码才整明白。张量的Ranks有点像矩阵的维度,指表示一个值的位置时所需要的坐标数量,而shape我的理解是度量了张量各个rank方向上的长度。
比如张量[[1,2],[3,4]]的rank等于2,shape为[2,2];张量[[1,2],[3,4],[5,6]]的rank等于2,shape为[3,2]。
使用CNN训练MNIST
Tensorflow官网给了一个训练MNIST的详细步骤:[Deep MNIST for Experts](https://www.tensorflow.org/get_started/mnist/pros)
我在此基础上将其封装成了一个类,就当是在熟悉Tensorflow和Python3 :
from __future__ import absolute_import
from __future__ import