Arquitectura, estadísticas de parámetros y análisis de valor de retorno de BertModel en transformadores

 Arquitectura de BertModel:

Tome bert-base-chino como ejemplo:

model = BertModel.from_pretrained("../model/bert-base-chinese")

Parámetros del modelo estadístico:

# 参数量的统计
total_params = 0 # 模型总的参数量
total_learnable_params = 0 # 可学习的参数量
total_embedding_params = 0 # embeddings 层的参数量
total_encoder_params = 0 # Encoder编码器部分的参数量
total_pooler_params = 0

for name , param  in model.named_parameters():
    print(name , "->" , param.shape)
    if param.requires_grad:
        total_learnable_params += param.numel()
    if "embedding" in name :
        total_embedding_params += param.numel()
    if "encoder" in name :
        total_encoder_params += param.numel()
    if "pooler" in name :
        total_pooler_params += param.numel()
        
    total_params += param.numel()

De lo anterior se puede ver que:

La proporción de la capa de incrustación es 0.16254008305735163

Parte del codificador del codificador contabilizada 0.8316849528014959

Capa de pooler contabilizada 0.005774964141152439

Parámetros totales: 102267648

Análisis del valor de retorno:

La documentación sobre BertModel es la siguiente:

BERT Estamos en un viaje para avanzar y democratizar la inteligencia artificial a través del código abierto y la ciencia abierta. icono-predeterminado.png?t=N6B9https://huggingface.co/docs/transformers/main/en/model_doc/bert#transformers.BertModel explica en detalle el progreso aquí:

 Se deben devolver last_hidden_state y pooler_output, y hidden_state se devuelve cuando se establece el modelo output_hidden_states=True o config.output_hidden_states=True .

 Déjame explicarte aquí:

La longitud de las salidas es 3:

# salidas[0] == último_estado_oculto: (tamaño_de_lote, longitud_de_secuencia, tamaño_oculto)

# salidas[1] == pooler_output : (batch_size, hidden_size)

# salidas[2] == estado_oculto: (tamaño_de_lote, longitud_de_secuencia, tamaño_oculto)

 Como se puede ver en la figura anterior:

modelo.incrustaciones(entrada_tensor) == salidas[2][0]

Supongo que te gusta

Origin blog.csdn.net/wtl1992/article/details/132048038
Recomendado
Clasificación