TensorFlow踩坑实录:从张量到神经网络的实战经验
折腾TensorFlow的时候踩了不少坑,记录一下核心概念和代码实现,主要是张量操作、Session管理和神经网络搭建这几个部分。
张量到底是什么
TensorFlow用数据流图做计算,节点是数学操作,边是张量(多维数组)。名字就是这么来的——张量在节点间流动。
| 维度 | 实际对应 | 例子 |
|---|---|---|
| 0阶 | 单个数字 | 1 |
| 1阶 | 数组 | [1, 2, 3] |
| 2阶 | 矩阵 | [[1,2,3],[4,5,6]] |
| 3阶+ | 高维数组 | 图像数据等 |
1 | import tensorflow.compat.v1 as tf |
线性回归示例
用TensorFlow实现个简单的线性回归,拟合 y = 0.1x + 0.3:
1 | import tensorflow.compat.v1 as tf |
Session的两种写法
执行计算图必须用Session,有两种写法:
1 | import tensorflow as tf |
Variable变量
Variable用来存模型参数,训练时会自动更新:
1 | import tensorflow.compat.v1 as tf |
Placeholder占位符
Placeholder用于从外部传入数据:
1 | import tensorflow.compat.v1 as tf |
神经网络搭建
自己封装个add_layer函数,搭个简单的神经网络:
1 | import os |
踩过的坑
libiomp5md.dll错误
用PyTorch或TensorFlow时可能遇到:
1 | Initializing libiomp5md.dll, but found libiomp5md.dll already initialized |
临时解决(代码里加):
1 | import os |
彻底解决:
保留 site-packages\torch\lib 下的 libiomp5md.dll,删掉其他路径的同名文件。
版本对应关系
| TensorFlow | Python | CUDA |
|---|---|---|
| 2.x | 3.6-3.9 | 11.2+ |
| 1.15 | 3.6-3.7 | 10.0 |
| 1.14 | 3.5-3.7 | 10.0 |
环境配置
1 | # Anaconda创建环境 |
一点优化建议
- GPU加速要装对应的CUDA驱动
- 数据预处理用
tf.dataAPI效率更高 - 记得定期保存检查点,防止训练中断白跑
- batch size根据显存调整,别设太大
核心就这些:张量、Session、Variable、Placeholder,再加上神经网络搭建。代码都是实际跑过的,有问题的部分已经标出来了。