这是学习 TF 1 系列的第一篇内容, 本文介绍为什么要学习 TF 1, 以及环境配置的选取, 系列文章的目录, 以及重要的参考资料.
为什么学习 TF 1, 而不是 TF 2, 或者 PyTorch
TensorFlow 是一个使用数据流图进行数值计算的开源软件库。图的节点表示数学运算,节点之间的边表示流动的多维数据数组(张量)。这种灵活的架构使你能在无需重写代码的情况下,将计算在桌面端、服务端或移动端部署到一个或多个 CPU 和 GPU 中。TensorFlow 还包含 TensorBoard,它是一个数据可视化工具包。
TensorFlow 最初由 Google 机器智能研究机构内的 Google Brain 团队的研究人员和工程师开发,用于进行机器学习和深度神经网络研究。此系统一般足以适用于各种其他领域。
TensorFlow 提供了稳定的 Python API 和 C 语言 API,以及没有向后兼容性保证的如 C++、Go、Java、JavaScript 和 Swift 等 API。
- 学习 TF 1, 对于我个人而言, 算是一个情节吧! 接触深度学习的第一个框架, 很想系统全面地掌握它. 更重要的是, 在项目实践过程中, 发现 TF1 在生产环境更稳定, 推理效率更高.
- 掌握了 TF 1, 学习 TF 2, 会很容易.
环境选择及搭建
学习 TF 1, 最佳 (没有冲突, 没有 Deprecated 警告) 的组合是
- Python 3.6.5
- TensorFlow 1.12.3
- Numpy 1.16.6
为了使用 Python 新特性 dataclass
, 一种带有默认值的可变的 namedtuple, 用这种方式定义上下文 (Context) 的参数, 至少需要使用 Python 3.7 版本, 而这种情况下, 不再兼容 TF 1.12. 最终选择的组合是
- Python 3.17.11
- TensorFlow 1.14.0
- Numpy 1.16.6
- Pandas 1.2.5
接下来, 介绍在 macOS Big Sur 11.3.1 中如何搭建环境. 先决条件, 安装 brew, 通过 brew 安装 Python 3.7, 命令如下:
$ brew install python@3.7
$ /usr/local/opt/python@3.7/bin/python3 -V
Python 3.7.11
建议通过 venv 环境来运行 python 代码, 这样方便在同一台电脑中, 共存多个 python 运行环境, 我把所有的虚拟环境都放在 /usr/local/lib/python3
目录下, 创建方式如下
$ cd /usr/local/lib/python3
$ /usr/local/opt/python@3.7/bin/python3 -m venv venv-py37-tf14
$ source venv-py37-tf14/bin/activate
$ python -V
Python 3.7.11
安装 TensorFlow 包之前, 需要先升级一下 pip 工具, 安装命令如下:
pip3 install -U pip setuptools wheel
pip3 install 'numpy<1.17'
pip3 install 'tensorflow<1.15'
项目创建
创建一个用于学习的项目 caesar-next
, 先创建目录 ~/workspace/caesar-next
, 并用 PyCharm 打开, 配置 Project Interpreter
, 选择 venv-py37-tf14
虚拟环境, 第一次使用需要先新增, 如下图所示
最终效果如下
写一个测试脚本 main.py
, 代码如下
import platform
import numpy as np
import tensorflow as tf
print(f'Python Version: {platform.python_version()}')
print(f'Numpy Version: {np.__version__}')
print(f'TensorFlow Version: {tf.__version__}')
执行输出如下:
$ python -m main
Python Version: 3.7.11
Numpy Version: 1.16.6
TensorFlow Version: 1.14.0
我的第一个 TensorFlow 程序
新建脚本 get_started/first.py
, 代码如下
import tensorflow as tf
a = tf.add(1, 2)
print(a)
b = tf.constant('Hello, TensorFlow!')
print(b)
sess = tf.Session()
print(sess.run([a, b]))
执行输出如下:
$ python -m get_started.first
Tensor("Add:0", shape=(), dtype=int32)
Tensor("Const:0", shape=(), dtype=string)
[3, b'Hello, TensorFlow!']
可以看到, 直接输出的是 Tensor, 如果需要输出具体的值, 需要在 Session 中执行. 更简单的方式如下
import tensorflow as tf
tf.enable_eager_execution()
a = tf.add(1, 2)
print(a)
print(a.numpy())
b = tf.constant('Hello, TensorFlow!')
print(b)
print(b.numpy())
执行输出如下:
$ python -m get_started.first
tf.Tensor(3, shape=(), dtype=int32)
3
tf.Tensor(b'Hello, TensorFlow!', shape=(), dtype=string)
b'Hello, TensorFlow!'