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: int. 令牌词汇表的大小。
  • 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 解码器块的两层前馈网络中第一个 Dense 层的输出维度。
  • head_dim: int. 混合解码器中每个注意力头的大小。
  • query_head_dim_normalize: boolean. 如果为 True,则在使用 head_dim 进行注意力计算之前对查询进行归一化。如果为 False,则使用 hidden_dim / num_query_heads 对查询进行归一化。默认为 True
  • use_query_key_norm: bool. 如果为 True,则在投影查询和键之前应用 RMS Norm 层。默认为 True
  • use_post_ffw_norm: boolean. 是否在前馈块之后进行归一化。默认为 False
  • use_post_attention_norm: boolean. 是否在注意力块之后进行归一化。默认为 False
  • attention_logit_soft_cap: None 或 int. 注意力 logits 的软上限。默认为 None
  • final_logit_soft_cap: None 或 int. 最终 logits 的软上限。默认为 None
  • use_sliding_window_attention: boolean. 是否使用滑动局部窗口注意力。默认为 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: string 或 keras.mixed_precision.DTypePolicy. 用于模型计算和权重的 dtype。请注意,某些计算(如 softmax 和层归一化)无论 dtype 如何,都将始终以 float32 精度完成。默认为 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 模型句柄,例如 '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: string. 内置预设标识符、Kaggle 模型句柄、Hugging Face 句柄或本地目录的路径。
  • load_weights: bool. 如果为 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 999.89M 10 亿参数、26 层、仅文本的预训练 Gemma3 模型。
gemma3_instruct_1b 999.89M 10 亿参数、26 层、仅文本的指令微调 Gemma3 模型。
gemma3_4b_text 3.88B 40 亿参数、34 层、仅文本的预训练 Gemma3 模型。
gemma3_instruct_4b_text 3.88B 40 亿参数、34 层、仅文本的指令微调 Gemma3 模型。
gemma3_4b 4.30B 40 亿参数、34 层、视觉+文本的预训练 Gemma3 模型。
gemma3_instruct_4b 4.30B 40 亿参数、34 层、视觉+文本的指令微调 Gemma3 模型。
gemma3_12b_text 11.77B 120 亿参数、48 层、仅文本的预训练 Gemma3 模型。
gemma3_instruct_12b_text 11.77B 120 亿参数、48 层、仅文本的指令微调 Gemma3 模型。
gemma3_12b 12.19B 120 亿参数、48 层、视觉+文本的预训练 Gemma3 模型。
gemma3_instruct_12b 12.19B 120 亿参数、48 层、视觉+文本的指令微调 Gemma3 模型。
gemma3_27b_text 27.01B 270 亿参数、62 层、仅文本的预训练 Gemma3 模型。
gemma3_instruct_27b_text 27.01B 270 亿参数、62 层、仅文本的指令微调 Gemma3 模型。
gemma3_27b 27.43B 270 亿参数、62 层、视觉+文本的预训练 Gemma3 模型。
gemma3_instruct_27b 27.43B 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。