在 TensorFlow.org 上查看 |
在 Google Colab 中运行 |
在 GitHub 上查看源代码 |
下载笔记本 |
设置
import numpy as np
import tensorflow as tf
from tensorflow import keras
2022-12-14 21:38:40.956796: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory 2022-12-14 21:38:40.956898: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory 2022-12-14 21:38:40.956908: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.
简介
迁移学习包括获取从迁移学习包括获取从一个问题中学习到的特征,然后将这些特征用于新的类似问题。例如,来自已学会识别浣熊的模型的特征可能对建立旨在识别狸猫的模型十分有用。
对于数据集中的数据太少而无法从头开始训练完整模型的任务,通常会执行迁移学习。
在深度学习情境中,迁移学习最常见的形式是以下工作流:
- 从之前训练的模型中获取层。
- 冻结这些层,以避免在后续训练轮次中破坏它们包含的任何信息。
- 在已冻结层的顶部添加一些新的可训练层。这些层会学习将旧特征转换为对新数据集的预测。
- 在您的数据集上训练新层。
最后一个可选步骤是微调,包括解冻上面获得的整个模型(或模型的一部分),然后在新数据上以极低的学习率对该模型进行重新训练。以增量方式使预训练特征适应新数据,有可能实现有意义的改进。
首先,我们将详细介绍 Keras trainable API,它是大多数迁移学习和微调工作流的基础。
随后,我们将演示一个典型工作流:先获得一个在 ImageNet 数据集上预训练的模型,然后在 Kaggle Dogs vs. Cats 分类数据集上对该模型进行重新训练。
此工作流改编自 Python 深度学习 和 2016 年的博文“使用极少的数据构建强大的图像分类模型”
冻结层:了解 trainable 特性
层和模型具有三个权重特性:
weights是层的所有权重变量的列表。trainable_weights是需要进行更新(通过梯度下降)以尽可能减少训练过程中损失的权重列表。non_trainable_weights是不适合训练的权重列表。它们通常在正向传递过程中由模型更新。
示例:Dense 层具有 2 个可训练权重(内核与偏差)
layer = keras.layers.Dense(3)
layer.build((None, 4
在 TensorFlow.org 上查看
在 Google Colab 中运行
在 GitHub 上查看源代码
下载笔记本