KerasHub: 预训练模型 / API 文档 / 模型架构 / Gemma3 / Gemma3Backbone 模型

Gemma3Backbone 模型

[源代码]

Gemma3Backbone

keras_hub.models.Gemma3Backbone(
    vocabulary_size,
    image_size,
    num_layers,
    num_query_heads,
    num_key_value_heads,
    hidden_dim,
    intermediate_dim,
    head_dim,
    query_head_dim_normalize=True,
    use_query_key_norm=True,
    use_post_ffw_norm=False,
    use_post_attention_norm=False,
    attention_logit_soft_cap=None,
    final_logit_soft_cap=None,
    use_sliding_window_attention=False,
    sliding_window_size=1024,
    local_rope_scaling_factor=1.0,
    global_rope_scaling_factor=1.0,
    vision_encoder=None,
    layer_norm_epsilon=1e-06,
    dropout=0,
    dtype=None,
    **kwargs
)

具有超参数的 Gemma3 核心网络。

此骨干网络实现了 Gemma3 模型架构。Gemma3 是一种视觉语言模型(输入图像和文本,输出文本)。文本输入通过嵌入层编码;图像通过视觉 Transformer (ViT) 编码。对这两种模态进行编码后,图像嵌入被放置在文本嵌入序列中的正确位置。然后,混合的嵌入序列通过 Transformer 解码器层。

有关更高级的文本生成对象,请参阅 keras_hub.models.Gemma3CausalLM

默认构造函数提供了一个完全可定制的、随机初始化的 Gemma3 模型,支持任何视觉编码器、头数、嵌入维度以及解码器层的等效配置。要加载预设架构和权重,请使用 from_preset 构造函数。

参数

  • vocabulary_size:整数。词元词汇表的大小。
  • image_size: int。图像在宽度和高度上的分辨率。输入图像必须是正方形。
  • num_layers: int。Transformer 混合解码器层的数量。
  • num_query_heads: int。混合解码器注意力层中查询投影的头数。
  • num_key_value_heads: int。混合解码器注意力层中键和值投影的头数。
  • hidden_dim: int。每个混合 Transformer 层结束时 Transformer 隐藏状态的大小。
  • intermediate_dim: int。每个 Transformer 解码器块中两层前馈网络中第一个密集层的输出维度。
  • head_dim: int。混合解码器中每个注意力头的大小。
  • query_head_dim_normalize: 布尔值。如果为 True,则在注意力之前使用 head_dim 对查询进行归一化。如果为 False,则使用 hidden_dim / num_query_heads 对查询进行归一化。默认为 True
  • use_query_key_norm: bool。如果为 True,则在投影查询和键之前对其应用 RMS Norm 层。默认为 True
  • use_post_ffw_norm: 布尔值。是否在前馈块之后进行归一化。默认为 False
  • use_post_attention_norm: 布尔值。是否在注意力块之后进行归一化。默认为 False
  • attention_logit_soft_cap: None 或 int。注意力 logits 的软上限。默认为 None
  • final_logit_soft_cap: None 或 int。最终 logits 的软上限。默认为 None
  • use_sliding_window_attention: 布尔值。是否使用滑动局部窗口注意力。默认为 False
  • sliding_window_size: int。滑动局部窗口的大小。默认为 4096
  • vision_encoder: Gemma3VisionEncoder 实例。call() 接收图像并返回相应的嵌入序列。如果为 None,则模型为纯文本模型。
  • layer_norm_epsilon: float。所有 Transformer 块中每个层归一化使用的 epsilon 值。默认为 1e-6
  • dropout: float。Transformer 解码器块的 dropout 概率。默认为 0
  • dtype: 字符串或 keras.mixed_precision.DTypePolicy。用于模型计算和权重的 dtype。请注意,某些计算(例如 softmax 和层归一化)将始终以 float32 精度完成,无论 dtype 如何。默认为 bfloat16

示例

# === Language Gemma3 model ===
input_data = {}
input_data["token_ids"] = np.ones(shape=(1, 300), dtype="int32")
input_data["padding_mask"] = (
    np.expand_dims(np.array([1] * 280 + [0] * (300 - 280)), axis=0)
    .astype(bool)
)

# Pretrained Gemma3 decoder.
model = keras_hub.models.Gemma3Backbone.from_preset(
    "gemma3_instruct_4b_text"
)
model(input_data)

# Randomly initialized Gemma3 decoder with a custom config.
model = keras_hub.models.Gemma3Backbone(
    vocabulary_size=262144,
    image_size=896,
    num_layers=34,
    num_query_heads=8,
    num_key_value_heads=4,
    hidden_dim=2560,
    intermediate_dim=10240,
    head_dim=256,
    query_head_dim_normalize=True,
    use_post_ffw_norm=True,
    use_post_attention_norm=True,
    final_logit_soft_cap=None,
    attention_logit_soft_cap=None,
    sliding_window_size=1024,
    use_sliding_window_attention=True,
    vision_encoder=None,
    layer_norm_epsilon=1e-06,
    dtype="bfloat16",
)
model(input_data)

# === Vision + Language Gemma3 model ===
input_data = {}
input_data["images"] = np.ones(shape=(1, 1, 896, 896, 3))
input_data["token_ids"] = np.ones(shape=(1, 300), dtype="int32")
# images after the text part of the sequence.
input_data["vision_mask"] = np.expand_dims(
    np.array([0] * 30 + [1] * 256 + [0] * 14),
    axis=0,
).astype(bool)
input_data["vision_indices"] = (
    np.expand_dims(np.arange(30, 286), axis=0)
)
input_data["padding_mask"] = (
    np.expand_dims(np.array([1] * 286 + [0] * (300 - 286)), axis=0)
    .astype(bool)
)

# Pretrained Gemma3 decoder.
model = keras_hub.models.Gemma3Backbone.from_preset("gemma3_instruct_4b")
model(input_data)

# Randomly initialized Gemma3 decoder with a custom config.
vision_encoder = Gemma3VisionEncoder(
    image_size=896,
    patch_size=14,
    num_heads=16,
    hidden_dim=1152,
    num_layers=27,
    intermediate_dim=4304,
    output_dim=2560,
    pool_size=4,
    layer_norm_epsilon=1e-6,
    dtype="float32",
)

model = keras_hub.models.Gemma3Backbone(
    vocabulary_size=262144,
    image_size=896,
    num_layers=34,
    num_query_heads=8,
    num_key_value_heads=4,
    hidden_dim=2560,
    intermediate_dim=10240,
    head_dim=256,
    query_head_dim_normalize=True,
    use_post_ffw_norm=True,
    use_post_attention_norm=True,
    final_logit_soft_cap=None,
    attention_logit_soft_cap=None,
    sliding_window_size=1024,
    use_sliding_window_attention=True,
    vision_encoder=vision_encoder,
    layer_norm_epsilon=1e-06,
    dtype="bfloat16"
)
model(input_data)

[源代码]

from_preset 方法

Gemma3Backbone.from_preset(preset, load_weights=True, **kwargs)

从模型预设实例化一个 keras_hub.models.Backbone

预设是一个包含配置、权重和其他文件资源的目录,用于保存和加载预训练模型。preset 可以作为以下之一传递:

  1. 一个内置的预设标识符,如 'bert_base_en'
  2. 一个 Kaggle Models 句柄,如 'kaggle://user/bert/keras/bert_base_en'
  3. 一个 Hugging Face 句柄,如 'hf://user/bert_base_en'
  4. 一个本地预设目录的路径,如 './bert_base_en'

此构造函数可以通过两种方式调用。可以从基类(如 keras_hub.models.Backbone.from_preset())调用,也可以从模型类(如 keras_hub.models.GemmaBackbone.from_preset())调用。如果从基类调用,返回对象的子类将根据预设目录中的配置推断。

对于任何 Backbone 子类,您可以运行 cls.presets.keys() 来列出该类上所有可用的内置预设。

参数

  • preset:字符串。一个内置预设标识符、一个 Kaggle Models 句柄、一个 Hugging Face 句柄或一个本地目录的路径。
  • load_weights:布尔值。如果为 `True`,权重将被加载到模型架构中。如果为 `False`,权重将被随机初始化。

示例

# Load a Gemma backbone with pre-trained weights.
model = keras_hub.models.Backbone.from_preset(
    "gemma_2b_en",
)

# Load a Bert backbone with a pre-trained config and random weights.
model = keras_hub.models.Backbone.from_preset(
    "bert_base_en",
    load_weights=False,
)
预设 参数 描述
gemma3_1b 9.9989亿 10 亿参数,26 层,仅文本预训练 Gemma3 模型。
gemma3_instruct_1b 9.9989亿 10 亿参数,26 层,仅文本指令微调 Gemma3 模型。
gemma3_4b_text 38.8亿 40 亿参数,34 层,仅文本预训练 Gemma3 模型。
gemma3_instruct_4b_text 38.8亿 40 亿参数,34 层,仅文本指令微调 Gemma3 模型。
gemma3_4b 43.0亿 40 亿参数,34 层,视觉+文本预训练 Gemma3 模型。
gemma3_instruct_4b 43.0亿 40 亿参数,34 层,视觉+文本指令微调 Gemma3 模型。
gemma3_12b_text 117.7亿 120 亿参数,48 层,仅文本预训练 Gemma3 模型。
gemma3_instruct_12b_text 117.7亿 120 亿参数,48 层,仅文本指令微调 Gemma3 模型。
gemma3_12b 121.9亿 120 亿参数,48 层,视觉+文本预训练 Gemma3 模型。
gemma3_instruct_12b 121.9亿 120 亿参数,48 层,视觉+文本指令微调 Gemma3 模型。
gemma3_27b_text 270.1亿 270 亿参数,62 层,仅文本预训练 Gemma3 模型。
gemma3_instruct_27b_text 270.1亿 270 亿参数,62 层,仅文本指令微调 Gemma3 模型。
gemma3_27b 274.3亿 270 亿参数,62 层,视觉+文本预训练 Gemma3 模型。
gemma3_instruct_27b 274.3亿 270 亿参数,62 层,视觉+文本指令微调 Gemma3 模型。

token_embedding 属性

keras_hub.models.Gemma3Backbone.token_embedding

一个用于嵌入词元 ID 的 keras.layers.Embedding 实例。

该层将整数词元 ID 嵌入到模型的隐藏维度。


[源代码]

enable_lora 方法

Gemma3Backbone.enable_lora(rank, target_names=None)

在骨干网络上启用 LoRA。

调用此方法将冻结骨干网络上的所有权重,同时在注意力层的查询和值 EinsumDense 层上启用 LoRA。