随笔之Tensorflow2.0学习笔记

文章是个人学习Tensorflow2.0的过程中,个人认为需要记下并需要重点学习的,不做任何商业使用,希望个人学习记录的同时,能够给他人带来帮助。

  • 回调

    1. 回调的功能

      • 在培训期间的不同时间点进行验证(超出内置的每个时期验证)
      • 定期检查模型或超过某个精度的阈值
      • 在训练似乎平稳时改变模型的学习率
      • 在训练似乎平稳时对顶层进行微调
      • 在训练结束或超出某个性能阈值时发生电子邮件或即时消息通知等等
    2. 可使用的内置回调

      • ModelCheckpoint:定期保存模型
      • EarlyStopping:当训练不再改进验证指标时停止训练
      • TensorBoard:定期编写可在TensorBoard中显示的模型日志
      • CSVLogger:将丢失和指标数据流式传输到CSV文件
      • 等等
    3. 回调的使用

      此处简单的列举两个回调的例子,具体参数设置见下方代码

      callbacks = keras.callbacks.EarlyStopping(
        # 是否有提升关注的指标
        monitor='loss',
        # 不再提升的阈值
        min_delta=1e-2,
        # 2个epoch没有提升就停止
        patience=2,
        verbose=1)
      
      check_callbacks = keras.callbacks.ModelCheckpoint(
      	# 保存路径及名称
        filepath='model_{epoch}.h5',
        # 保存最优
        save_best_only=True,
        monitor='loss',
        verbose=1
      )
      
  • 动态调整学习率

    ```python
    initial_learning_rate = 0.1
    lr_schedule = keras.optimizers.schedules.ExponentialDecay(
      initial_learning_rate,
      decay_steps=10000,
      decay_rate=0.96,
      staircase=True
    )
    # 此优化方法采用RMSprop,您可以随意更换合适的
    optimizer = keras.optimizers.RMSprop(learning_rate=lr_schedule)
    ```
    
  • 模型保存与加载

    子类模型的结构无法保存和序列化,只能保持参数

    1. 保存全模型

      对整个模型进行保存,保存的内容包括:

      • 该模型的架构
      • 模型的权重
      • 模型的训练配置
      • 优化器及其状态
      # 保存模型
      model.save("model.h5")
      
      # 加载模型
      new_model = tf.keras.models.load_model("model.h5")
      
    2. 保存为SavedModel文件

      # 保存模型
      tf.keras.experimental.export_saved_model(model, "save_model")
      
      # 加载模型
      new_model = tf.keras.experimental.load_from_saved_model("save_model")
      
    3. 仅保存网络结构(不包含训练好的参数)

      # 模型结构导出,有两种方式,一种是config,一种是json
      config = model.get_config()
      with open('model_config', 'w') as config_file:
        config_file.write(config)
      
      json = model.to_json()
      with open('model_json.json', 'w') as json_file:
        json_file.write(json)
      
      # 模型结构加载,有两种方式,一种是config,一种是json
      config_model = tf.keras.Model.from_config(config)
      
      json_model = tf.keras.Model.model_from_json(json)
      
    4. 仅保存网络参数

      # 导出网络参数
      weights = model.get_weights()
      
      # 保存网络参数
      model.save_weights('weight_tf_savedmodel')
      model.save_weights('weight_tf_savedmodel_h5', save_format='h5')
      
      # 加载设置网络参数
      model.set_weights(weights)
      
  • tf.function装饰器

    使用tf.function装饰器注释函数时,可以像调用任何其他函数一样调用它,它将被编译成图。这意味着可以获得更快执行,更换地在GPU或TPU上运行或导出。

    @tf.function
    def simple_layer(x, y):
      return tf.nn.relu(tf.matmul(x, y))
    
    x = tf.random.uniform((3, 3))
    y = tf.random.uniform((3, 3))
    
    simple_layer(x, y)
    <tf.Tensor: id=23, shape=(3, 3), dtype=float32, numpy=
    array([[0.9118548 , 0.6416799 , 1.079305  ],
         [0.22249877, 0.47654846, 0.38788092],
         [0.5215728 , 0.619033  , 0.79503316]], dtype=float32)>
    

    tf.function注释具有传递性,当带有此注释的函数调用其它函数时,其它函数也将以图形模式运行。

  • 参考学习网站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值