tensorflow学习过程中记录的笔记
1. 安装
cuda的安装过程略,参考pytorch的那篇笔记。
一个稳定版本的tensorflow2.5版本匹配:
conda create -n hi_hand_det python=3.7.0
conda install cudatoolkit=11.3.1
conda install cudnn=8.2.1
pip install tensorflow-gpu==2.5.0
2. 验证GPU是否可用
import tensorflow as tf
print(tf.test.is_gpu_available())
如果返回为True,说明GPU已经可用。
3. 静态图说明
参考:tensorflow静态图原理
笔记:在模型训练初始化init阶段的最后,需要用任意数值的指定矩阵形状让模型先运行一次,从而生成静态图,这样后续就会直接运行静态图。
4. CPU和多GPU选择
在代码开头设置仅有需要的GPU可见
# 设置仅1号gpu可见
os.environ["CUDA_VISIBLE_DEVICES"] = "1"
# 设置-1则为cpu运行
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
5. 设置显存动态分配
如果不设置动态分配,默认会占据全部显存,导致一张显卡不能跑多个训练文章来源:https://www.toymoban.com/news/detail-644581.html
动态分配内存
# 配置gpu设备
os.environ["CUDA_VISIBLE_DEVICES"] = "1"
print(tf.config.list_physical_devices("GPU"))
gpus = tf.config.experimental.list_physical_devices(device_type="GPU")
for gpu in gpus:
tf.config.experimental.set_memory_growth(gpu, True)
6. 模型权重融合
注:融合后的模型在PC上测试结果符合预期,但是在量化后却出现了性能的明显下降文章来源地址https://www.toymoban.com/news/detail-644581.html
# 收集所有权重
weights = [model.get_weights() for model in [model_1, model_2]]
# 创建一个新的平均权重
new_weights = list()
for weights_list_tuple in zip(*weights):
new_weights.append(
np.array([np.array(weights_).mean(axis=0)\
for weights_ in zip(*weights_list_tuple)]))
# 在模型中覆盖平均得到的权重
model_1.set_weights(new_weights)
# 保存权重
model_1.save_weights(Config.model_output)
7. 调整tensorflow输出日志信息等级
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3"
8. 模型整体架构
import tensorflow as tf
from tensorflow.keras import layers
import tensorflow_addons as tfa
class MyModel(tf.keras.Model):
def __init__(self, load_path=""):
super().__init__()
# 添加各种类初始化参数
# 构建网络结构
self.__build()
# 模拟图像的输入尺寸,输入1次0构成的矩阵,让tensorflow完成初次运行的初始化
self(tf.ones([1, self.img_size[1], self.img_size[0], 1]))
# 加载.h5格式的预训练模型
if load_path.split(".")[-1] == "h5":
self.load_weights(load_path, by_name=True, skip_mismatch=True)
# 构建网络结构
def __build(self):
# 构建网络层layer的细节
self.backbone = self.make_backbone()
# 构建具体运算路线
def call(self, x):
# 具体运算路线
return x
# 预处理
@staticmethod
def preprocess(self, image):
return image
# 后处理
@staticmethod
def postprocess(self, data):
return data
# 计算loss
@tf.function
def loss(self, data):
return data
到了这里,关于tensorflow学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!