Keras深度学习框架第二十六讲:使用KerasNLP上传模型

80 篇文章 0 订阅
50 篇文章 3 订阅

1、上传模型的概念

在机器学习和深度学习领域,"上传模型"通常指的是将训练好的模型保存到某个位置,以便后续使用或分享,而不是直接通过KerasNLP库进行上传操作。但在这里,我们可以理解为保存和分享模型。

当程序员使用KerasNLP构建并训练了一个模型后,可能想要保存这个模型以便后续使用或分享给他人。在Keras(KerasNLP基于Keras构建)中,你可以很容易地保存和加载模型。

保存模型通常涉及两个步骤:

  1. 保存模型结构:这包括模型的层、连接和配置。在Keras中,你可以使用model.save('model_architecture.json')来保存模型结构为JSON文件。
  2. 保存模型权重:这是模型在训练过程中学习到的参数。你可以使用model.save_weights('model_weights.h5')来保存模型权重为HDF5文件。

如果你想要同时保存模型结构和权重,你可以使用model.save('full_model.h5'),这会保存一个完整的HDF5文件,其中包含了模型的结构和权重。

加载模型时,你可以首先加载模型结构,然后加载权重。但如果你保存了完整的模型,你可以直接使用keras.models.load_model('full_model.h5')来加载模型。

微调机器学习模型可以为特定任务带来令人印象深刻的结果。将微调后的模型上传到模型库(hub)可以使您与更广泛的社区分享它。通过分享您的模型,您将提高其他研究人员和开发者的可访问性,使您的贡献成为机器学习领域不可或缺的一部分。这还可以简化将您的模型集成到现实世界应用中的过程。

本文将指导程序员如何将微调后的模型上传到流行的模型库,如Kaggle Models和Hugging Face Hub。

1.1上传到Kaggle Models

  • 准备模型文件:首先,确保您的模型文件(如.h5.pth.onnx等)和任何其他必要的文件(如配置文件、词汇表等)都已准备好。

  • 登录Kaggle:在Kaggle上创建一个账户或登录您的现有账户。

  • 创建数据集:在Kaggle上创建一个新的数据集,用于存放您的模型文件。您可以选择将数据集设置为私有或公开。

  • 上传文件:在数据集的“上传”部分,选择您的模型文件和其他必要的文件,并将它们上传到Kaggle。

  • 分享数据集:一旦文件上传完成,您可以分享数据集的链接,以便其他用户能够下载和使用您的模型。

1.2上传到Hugging Face Hub

  • 安装Hugging Face库:确保您已经安装了Hugging Face的Transformers库,因为它将用于与Hugging Face Hub进行交互。

  • 准备模型:将您的模型转换为Hugging Face Transformers库支持的格式(如PyTorch的.pt或TensorFlow的.h5)。

  • 登录Hugging Face Hub:在Hugging Face Hub上创建一个账户或登录您的现有账户。

  • 使用Transformers库上传模型:使用Transformers库中的push_to_hub函数或相关命令来上传您的模型。这通常涉及指定模型存储库的名称、本地模型的路径以及其他相关参数。

  • 分享模型:一旦模型上传完成,Hugging Face Hub将为您生成一个分享链接,您可以将该链接分享给其他人,以便他们可以直接从Hub中加载和使用您的模型。

通过上传您的模型到这些模型库,您可以让其他研究人员和开发者更容易地找到和使用您的成果,从而促进整个机器学习社区的发展。

2、上传操作的步骤

2.1设置

安装及导入

!pip install -q --upgrade keras-nlp huggingface-hub kagglehub
import os

os.environ["KERAS_BACKEND"] = "jax"

import keras_nlp

数据准备
在本指南中,我们可以使用IMDB影评数据集。现在,让我们从tensorflow_datasets库中加载这个数据集。

以下是使用Python和tensorflow_datasets(通常简写为tfds)加载IMDB影评数据集的示例代码:

import tensorflow_datasets as tfds

# 加载IMDB影评数据集
# 注意:根据tensorflow_datasets的版本,加载数据集的方式可能有所不同
# 这里假设你使用的是较新版本的tensorflow_datasets
(train_data, test_data), info = tfds.load('imdb_reviews/subwords8k', 
                                          split=['train', 'test'], 
                                          shuffle_files=True, 
                                          with_info=True, 
                                          as_supervised=True)

# 打印数据集信息
print(info)

# 示例:打印一些训练数据
for example in train_data.take(5):
    print(example)

请注意,tfds.load函数的参数可能会根据你的tensorflow_datasets版本和具体的数据集版本有所不同。上面的代码假设你正在加载的是imdb_reviews/subwords8k版本的数据集,这个版本使用了8000个子词(subwords)的词汇表。

如果你使用的是旧版本的tensorflow_datasets,加载数据集的方式可能略有不同。确保查看你正在使用的tensorflow_datasets版本的文档以获取正确的加载方法。

当您在处理大型数据集(如IMDB影评数据集)时,为了加速模型的训练或演示过程,通常会使用数据的一个子集。然而,如果您需要训练一个更高质量的模型,使用更多的训练样本是必要的。

imdb_train = imdb_train.take(100)

在上面给出的代码中,imdb_train.take(100) 表示您只从原始的 imdb_train 数据集中取出了前100个样本。这确实可以加快训练过程,但也可能导致模型在未见过的数据上表现不佳,因为模型没有接触到足够多的数据来学习更广泛的模式。

如果您想要训练一个更高质量的模型,您应该考虑使用更多的训练样本。例如,您可以使用整个训练集,或者如果整个训练集仍然太大,可以使用其中的一部分(但要远远大于100个样本)。

在TensorFlow中,您不需要显式地“take”一个特定的数量。默认情况下,当您遍历数据集时,它会按顺序提供所有的样本。如果您想使用数据集的一个子集,但不确定要取多少个样本,您可以使用 tf.data.Dataset.shuffle 和 tf.data.Dataset.batch 来打乱样本和进行批量处理,然后使用 for 循环来迭代多个批次。

2.2任务上传

keras_nlp.models.Task 是一个封装了 keras_nlp.models.Backbone(模型主干)和 keras_nlp.models.Preprocessor(预处理器)的Keras NLP任务模型,用于创建可以直接用于给定文本问题的训练、微调和预测的模型。在本节中,我们将解释如何创建一个任务模型,对其进行微调,并将其上传到模型仓库。

首先,你需要创建一个 Task 实例,该实例结合了特定的预处理逻辑和模型主干。Task 提供了方便的接口,用于加载预训练的模型权重,定义训练、验证和预测步骤,以及将模型保存为可重用的格式。

一旦你有了定义好的 Task,你可以使用它来对模型进行微调。微调通常涉及使用你的特定数据集来更新模型的权重,以便在你的特定任务上获得更好的性能。在微调过程中,你可以调整各种超参数,如学习率、批次大小、训练轮次等,以优化模型的性能。

微调完成后,你可能希望将模型上传到模型仓库,以便其他人可以使用或参考你的工作。模型仓库是一个在线平台,允许用户共享、发现和重用机器学习模型。上传模型到仓库可以让你的工作更容易被他人找到和重用,同时也可以为你的工作带来更多的曝光和认可。

在上传模型时,你需要遵循模型仓库的特定指南和要求。这可能包括将模型保存为特定格式(如TensorFlow SavedModel或Hugging Face Transformers格式),提供模型的元数据(如名称、描述、标签等),以及遵循任何特定的许可和版权要求。

2.2.1加载模型

如果你想要基于一个基础模型来构建一个因果语言模型(Causal Language Model,通常指的是自回归语言模型,如GPT系列),你可以简单地调用keras_nlp.models.CausalLM.from_preset方法并传入一个内置的预设标识符。

keras_nlp.models.CausalLM.from_preset是一个工厂方法,它允许你根据预设的配置快速加载和实例化一个预定义的因果语言模型。这些预设通常包含了模型的架构、参数以及其他必要的配置信息,使得你可以方便地开始训练、微调或进行推理。

causal_lm = keras_nlp.models.CausalLM.from_preset("gpt2_base_en")
2.2.2微调模型

加载模型之后,你可以通过调用.fit()方法来进行模型的微调。在这个例子中,我们将在IMDB影评数据集上微调模型,这样模型就会针对电影领域进行特定优化。

微调(fine-tuning)是一个常见的训练过程,其中预训练的模型(例如基于大规模通用语料库训练的模型)在新的特定任务或数据集上进行进一步训练。这样做可以调整模型的参数以适应新数据集的特定模式或任务要求。

# Drop labels and keep the review text only for the Causal LM.
imdb_train_reviews = imdb_train.map(lambda x, y: x)

# Fine-tune the Causal LM.
causal_lm.fit(imdb_train_reviews)
2.2.3将模型存储到本地

要将模型上传到模型仓库,您首先需要使用save_to_preset方法将模型本地保存。但是,请注意,keras_nlp库本身可能并不直接提供save_to_preset这样的具体方法,因为save_to_preset并不是Keras或TensorFlow标准API的一部分。不过,您可以使用TensorFlow的save_model函数或Keras的save方法来保存模型。

preset_dir = "./gpt2_imdb"
causal_lm.save_to_preset(preset_dir)
os.listdir(preset_dir)
2.2.4加载本地模型

当您使用某种机制(如TensorFlow的save_model函数)将模型保存到本地时,您可以使用相应的加载函数或方法来重新加载这个模型。不过,您提到的from_preset方法并不是TensorFlow或Keras标准API的一部分,它可能是特定库(如keras_nlp或自定义库)提供的一个功能。

在TensorFlow中,通常使用tf.keras.models.load_model函数来加载保存的模型。如果您使用的是keras_nlp或其他特定库,并且它们提供了from_preset这样的加载方法,那么您应该按照该库的文档来使用它。

causal_lm = keras_nlp.models.CausalLM.from_preset(preset_dir)

程序员还可以从预设目录加载keras_nlp.models.Backbone和keras_nlp.models.Tokenizer对象。请注意,这些对象相当于上面提到的causal_lm.backbone和causal_lm.preprocessor.tokenizer。

当程序员使用keras_nlp或类似的库来加载预训练的模型时,通常会得到整个模型(包括主干和预处理器),但有时候程序员可能只想加载模型的一部分,例如模型的主干或用于文本处理的分词器(Tokenizer)。

backbone = keras_nlp.models.Backbone.from_preset(preset_dir)
tokenizer = keras_nlp.models.Tokenizer.from_preset(preset_dir)

2.3将模型上传到模型仓库

在将预设保存到目录后,您可以从KerasNLP库直接将该目录上传到模型仓库,如Kaggle或Hugging Face。要将模型上传到Kaggle,URI必须以kaggle://开头;而要上传到Hugging Face,URI应该以hf://开头。

2.3.1上传到Kaggle

要将模型上传到Kaggle,首先我们需要对Kaggle进行身份验证。这可以通过以下方式之一完成:

  • 设置环境变量KAGGLE_USERNAMEKAGGLE_KEY
  • 在本地提供一个~/.kaggle/kaggle.json文件。
  • 调用kagglehub.login()(注意:kagglehub.login()可能不是Kaggle官方的API调用方法,这里可能是指某个第三方库或自定义方法)。

在继续之前,让我们确保我们已经登录了。

import kagglehub

if "KAGGLE_USERNAME" not in os.environ or "KAGGLE_KEY" not in os.environ:
    kagglehub.login()

为了上传模型,我们可以使用keras_nlp.upload_preset(uri, preset_dir) API,其中uri的格式为kaggle://<KAGGLE_USERNAME>/<MODEL>/Keras/<VARIATION>以便上传到Kaggle,而preset_dir则是保存模型的目录。

运行以下命令将把保存在preset_dir中的模型上传到Kaggle:

kaggle_username = kagglehub.whoami()["username"]
kaggle_uri = f"kaggle://{kaggle_username}/gpt2/keras/gpt2_imdb"
keras_nlp.upload_preset(kaggle_uri, preset_dir)
2.3.2上传到Hugging Face

要将模型上传到Hugging Face,首先我们需要对Hugging Face进行身份验证。这可以通过以下方式之一完成:1. 设置环境变量HF_USERNAMEHF_TOKEN。2. 调用huggingface_hub.notebook_login()

在继续之前,让我们确保我们已经登录了。

import huggingface_hub

if "HF_USERNAME" not in os.environ or "HF_TOKEN" not in os.environ:
    huggingface_hub.notebook_login()

keras_nlp.upload_preset(uri, preset_dir) 函数通常不是用来将模型上传到 Hugging Face 的,因为提供的 URI 格式 kaggle://<HF_USERNAME>/<MODEL> 是不正确的。对于 Hugging Face,URI 应该遵循 Hugging Face Hub 的格式,通常是 hf://<HF_USERNAME>/<MODEL_NAME> 或者直接使用模型仓库的完整路径。

但是,如果我们假设 keras_nlp 库或其某个扩展支持通过修改后的 upload_preset 函数来上传模型到 Hugging Face,并且你确实需要使用 kaggle://(尽管这不是标准的 Hugging Face 格式),那么这里的翻译应该是基于这个假设的。

不过,为了准确性,我将提供一个更标准的翻译,假设我们使用的是 Hugging Face Hub 的正确格式:

使用 keras_nlp.upload_preset(uri, preset_dir) 可以将模型上传到 Hugging Face,如果 uri 的格式是 hf://<HF_USERNAME>/<MODEL_NAME>。运行以下命令将把保存在 preset_dir 中的模型上传到 Hugging Face:

注意:在实际应用中,你需要替换 <HF_USERNAME><MODEL_NAME> 为你的 Hugging Face 用户名和模型名称。同时,你需要确保 keras_nlp 或其相关库确实支持 upload_preset 函数,并且该函数适用于 Hugging Face 的上传。通常,对于 Hugging Face,我们会使用他们自己的库 huggingface_hub 来执行上传操作。

hf_username = huggingface_hub.whoami()["name"]
hf_uri = f"hf://{hf_username}/gpt2_imdb"
keras_nlp.upload_preset(hf_uri, preset_dir)
2.3.3加载用户上传的模型

在确认模型已成功上传到Kaggle之后,我们可以通过调用from_preset函数来加载该模型。

causal_lm = keras_nlp.models.CausalLM.from_preset(
    f"kaggle://{kaggle_username}/gpt2/keras/gpt2_imdb"
)

同样地,我们也可以通过调用from_preset来加载上传到Hugging Face的模型,但需要注意的是,加载Hugging Face模型的URI应该符合Hugging Face Hub的格式。

causal_lm = keras_nlp.models.CausalLM.from_preset(f"hf://{hf_username}/gpt2_imdb")
2.3.4分类器模型上传

上传分类器模型与上传因果语言模型(Causal LM)类似。为了上传微调后的模型,首先,您应该使用save_to_preset API将模型保存到本地目录,然后通过keras_nlp.upload_preset将其上传。

# Load the base model.
classifier = keras_nlp.models.Classifier.from_preset(
    "bert_tiny_en_uncased", num_classes=2
)

# Fine-tune the classifier.
classifier.fit(imdb_train)

# Save the model to a local preset directory.
preset_dir = "./bert_tiny_imdb"
classifier.save_to_preset(preset_dir)

# Upload to Kaggle.
keras_nlp.upload_preset(
    f"kaggle://{kaggle_username}/bert/keras/bert_tiny_imdb", preset_dir
)

在确认模型已经上传到Kaggle之后,我们可以通过调用from_preset来加载模型。

classifier = keras_nlp.models.Classifier.from_preset(
    f"kaggle://{kaggle_username}/bert/keras/bert_tiny_imdb")

3、总结

本文主要讨论了关于模型上传和加载的几个方面。首先,提到了将模型上传到Kaggle平台,这是一个通常用于数据科学竞赛和共享数据集的平台。然而,虽然Kaggle支持数据集的上传,但它并不是直接用于存储和加载机器学习模型的平台。

接下来,提到了通过调用from_preset来加载模型的概念,但需要注意的是,这并不是Kaggle或常见机器学习库(如TensorFlow、PyTorch等)的标准API。from_preset可能是一个假设性的函数名,用于说明从预设位置加载模型的概念。

在实际情况中,如果模型已经被上传到了Kaggle数据集,并且需要加载使用,那么通常的步骤是先从Kaggle下载模型文件,然后使用相应的库(如TensorFlow、PyTorch等)提供的API来加载这些模型文件。具体的加载方法取决于模型的格式和所使用的库。

关于如何下载和上传模型,以下是一些详细的步骤和说明:

3.1下载模型:

  • 确定模型来源:首先,你需要知道模型存储在哪里。模型可能存储在云存储服务(如Google Drive、Dropbox等)、模型仓库(如Hugging Face Hub、Model Zoo等)或数据科学平台(如Kaggle)上。

  • 使用专用下载工具或API:许多平台提供了专用的下载工具或API来方便用户下载模型。例如,在Hugging Face Hub上,你可以使用huggingface-cli命令行工具或直接从网站下载。

  • 下载到本地:将模型文件下载到你的本地计算机或服务器上。确保你有足够的存储空间来保存模型文件。

  • 解压和验证:如果模型是以压缩包的形式下载的,你需要解压它。解压后,验证文件是否完整且未损坏。

3.2上传模型:

  • 准备模型文件:首先,确保你已经训练并保存了你的模型。不同的机器学习框架(如TensorFlow、PyTorch等)有不同的保存格式和方法。

  • 选择上传平台:选择一个适合上传模型的平台。这可以是公共模型仓库(如Hugging Face Hub、Model Zoo等)或你自己的云存储服务。

  • 注册和登录:如果你选择的是公共模型仓库,你可能需要先注册一个账户并登录。

  • 上传模型文件:按照平台的指示上传你的模型文件。这通常涉及到选择一个上传选项,浏览并选择你的模型文件,然后点击上传按钮。

  • 填写模型信息:在上传过程中或上传完成后,你可能需要填写一些关于模型的信息,如模型名称、描述、使用的数据集、训练细节等。

  • 分享和发布:一旦模型上传成功,你可以选择分享模型的链接给你的同事或朋友,或者将模型发布到公共仓库以供其他人使用。

需要注意的是,不同的平台可能有不同的上传要求和限制。确保在上传之前仔细阅读并遵守平台的指南和政策。

另外,对于大型模型或数据集,上传和下载可能需要较长时间,因此请确保你的网络连接稳定且速度足够快。如果可能的话,考虑使用专业的数据传输工具或服务来加速这个过程。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MUKAMO

你的鼓励是我们创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值