训练使用 AutoConfig 定义的拥抱脸 AutoModel

Posted

技术标签:

【中文标题】训练使用 AutoConfig 定义的拥抱脸 AutoModel【英文标题】:Train Hugging face AutoModel defined using AutoConfig 【发布时间】:2021-12-06 02:33:27 【问题描述】:

我在transformers 中定义了模型的配置。后来,我使用这个配置来初始化分类器如下

from transformers import AutoConfig, AutoModel

config = AutoConfig.from_pretrained('bert-base-uncased')
classifier = AutoModel.from_config(config)

我已经检查了该类可用的函数列表

>>> dir(classifier)

>>>
['add_memory_hooks',
 'add_module',
 'adjust_logits_during_generation',
 'apply',
 'base_model',
 'base_model_prefix',
 'beam_sample',
 'beam_search',
 'bfloat16',
 'buffers',
 'children',
 'config',
 'config_class',
 'cpu',
 'cuda',
 'device',
 'double',
 'dtype',
 'dummy_inputs',
 'dump_patches',
 'embeddings',
 'encoder',
 'estimate_tokens',
 'eval',
 'extra_repr',
 'float',
 'floating_point_ops',
 'forward',
 'from_pretrained',
 'generate',
 'get_buffer',
 'get_extended_attention_mask',
 'get_head_mask',
 'get_input_embeddings',
 'get_output_embeddings',
 'get_parameter',
 'get_position_embeddings',
 'get_submodule',
 'gradient_checkpointing_disable',
 'gradient_checkpointing_enable',
 'greedy_search',
 'group_beam_search',
 'half',
 'init_weights',
 'invert_attention_mask',
 'is_parallelizable',
 'load_state_dict',
 'load_tf_weights',
 'modules',
 'name_or_path',
 'named_buffers',
 'named_children',
 'named_modules',
 'named_parameters',
 'num_parameters',
 'parameters',
 'pooler',
 'prepare_inputs_for_generation',
 'prune_heads',
 'push_to_hub',
 'register_backward_hook',
 'register_buffer',
 'register_forward_hook',
 'register_forward_pre_hook',
 'register_full_backward_hook',
 'register_parameter',
 'requires_grad_',
 'reset_memory_hooks_state',
 'resize_position_embeddings',
 'resize_token_embeddings',
 'retrieve_modules_from_names',
 'sample',
 'save_pretrained',
 'set_input_embeddings',
 'share_memory',
 'state_dict',
 'supports_gradient_checkpointing',
 'tie_weights',
 'to',
 'to_empty',
 'train',
 'training',
 'type',
 'xpu',
 'zero_grad']

除此之外,只有train 方法似乎相关。但是,在检查该函数的文档字符串后,我得到了

>>> print(classifier.train.__doc__)
>>> Sets the module in training mode.

        This has any effect only on certain modules. See documentations of
        particular modules for details of their behaviors in training/evaluation
        mode, if they are affected, e.g. :class:`Dropout`, :class:`BatchNorm`,
        etc.

        Args:
            mode (bool): whether to set training mode (``True``) or evaluation
                         mode (``False``). Default: ``True``.

        Returns:
            Module: self

如何在自定义数据集上训练这个分类器(最好在transformerstensorflow 中)?

【问题讨论】:

【参考方案1】:

以上代码中需要TFAutoModel

from transformers import AutoConfig, TFAutoModel

config = AutoConfig.from_pretrained('bert-base-uncased')

model = TFAutoModel.from_config(config)

model.compile(
    loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
    optimizer=tf.keras.optimizers.RMSprop(),
    metrics=["accuracy"],
)

然后,我们调用model.fitmodel.predict 函数在自定义数据集上进行训练

【讨论】:

以上是关于训练使用 AutoConfig 定义的拥抱脸 AutoModel的主要内容,如果未能解决你的问题,请参考以下文章

如何使用拥抱脸变压器批量制作训练器垫输入?

训练后如何查看拥抱脸模型的变化?

如何从拥抱脸应用预训练的变压器模型?

拥抱脸:NameError:未定义名称“句子”

了解拥抱脸变形金刚

Huggingface 微调 - 如何在预训练的基础上构建自定义模型