• tensorflow_知识点



    1. tensorflow动态图和静态图切换

      动态图是Tensorflow1.3版本之后出现的,到1.11版本时,已经比较完善。在2.0之后版本为默认工作方式。
            tensorflow2.X 关闭动态图的函数 

    tf.compat.v1.disable_v2_behavior 

            启用动态图的函数:

    tf.compat.v1.enable_v2_behavior 

    2.tensor和numpy互转

      静态图中,tensor和numpy不能互转。动态图 可以转化

    data_tensor= tf.convert_to_tensor(data_numpy) # numpy转tensor 显式转换。大多数情况tensor接收到numpy会自动转化

      data_numpy = data_tensor.numpy() # tensor转numpy

    3.声明函数为静态图

      在函数前面加上 "@tf.function"  。函数将以张量运算图运行。自东土中,如果在被修饰的函数有多个返回分支,则必须确保所有的分支都返回相同类型的张量,否则会报错

    4.在静态图中使用动态图

      tensorflow2.X提供 在静态图使用动态图操作方式的封装关键字"tf.py_function"

      

    tf.compat.v1.disable_v2_behavior # 使用静态图方式
    
    def my_py_func(X,Y):
        ……
        return z
    
    
    z=tf.py_function(my_py_func,[X,Y] ,tf.float32)
    #后续接静态图调用过程代码
    ……
    
    
    #程序执行时,my_py_func内 的tensor都是 “EaderTensro”动态tensor类型,因此可以numpy等数据类型相互转换调用

    5.静态图和动态图性能差异

      2021-9月份,数据集3万张,8个类。分别在批次=20,128下测试

      测试以下三种方式:tf.kreas静态图方式, 2.X全部动态图方式,2.X部分动态图方式(train_step 使用 @tf.function 修饰,其余动态图) 。取三次情况做平均。测试结果如下

          20批次(显卡6G显存): 以静态图为基准, 全动态图耗时是 140% , 部分动态图 100%

          128批次(显卡24显存): 以静态图为基准,全部动态图耗时100% , 部分动态图 115% 

      似乎动态图性能都能找到方式和静态图一样的执行效率

    6.冻结网络层

      tensorflow只需要更改模型的"trainable" 属性即可完成更改。更改完,需要调用 模型的"compile"函数,完成关联项更改

      trainable 的优先级,高级覆盖低级

      

    model.trainable = False
    model.layers[0].trainable = False
    model.layers[1].trainable = True
    model.compile(……)
    
    此时,整个模型都不可训练
    
    model.trainable = True
    model.layers[0].trainable = False
    model.layers[1].trainable = True
    model.compile(……)
    此时, 模型的layers层中设置使能性能的,进行巡礼。 比如训练过程 层0将不会进行参数更新。 层1将进行参数。
    如果要详细查看 可以设定动态图,然后调试过程中 查看“self.model.trainable_weights”的值

    7.迁移学习中,只训练输出层

      参考“冻结网络层”, 将其余层的训练使能设为“False”,输出层的训练使能启用。

  • 相关阅读:
    MySQL max_allowed_packet设置及问题
    centos 7 编译安装mysql 详细过程
    如何快速查看mysql数据文件存放路径?
    centos yum 库更新
    centos 7 ifconfig 命令找不到
    http协议
    前端那些事儿
    C++接口的定义与实现的详细过程
    List转为字符串
    spring cloud spring boot JPA 克隆对象修改属性后 无法正常的执行save方法进行保存或者更新
  • 原文地址:https://www.cnblogs.com/PiaoLingJiLu/p/13620251.html
Copyright © 2020-2023  润新知