Download models/configuration_audio_encoder_decoder.py from babaTEEpe/Toun: direct link, hf CLI and curl.
- Browser
- Download file 5.57 kB
-
https://huggingface.co/spaces/babaTEEpe/Toun/resolve/main/models/configuration_audio_encoder_decoder.py
- Command line
-
hf download hf://spaces/babaTEEpe/Toun/models/configuration_audio_encoder_decoder.py
-
curl -L -o configuration_audio_encoder_decoder.py https://huggingface.co/spaces/babaTEEpe/Toun/resolve/main/models/configuration_audio_encoder_decoder.py
5.57 kB
| #!/usr/bin/env python3 | |
| # coding: utf-8 | |
| # @Author : Xinhao Mei @CVSSP, University of Surrey | |
| # @E-mail : x.mei@surrey.ac.uk | |
| # coding=utf-8 | |
| # Copyright 2021 The HuggingFace Inc. team. | |
| # Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| import copy | |
| from transformers import PretrainedConfig, AutoConfig, BertConfig | |
| from models.audio_encoder_config import AudioEncoderConfig | |
| from models.audio_encoder import AudioEncoderModel | |
| class AudioEncoderDecoderConfig(PretrainedConfig): | |
| r""" | |
| [`VisionEncoderDecoderConfig`] is the configuration class to store the configuration of a | |
| [`VisionEncoderDecoderModel`]. It is used to instantiate a Vision-Encoder-Text-Decoder model according to the | |
| specified arguments, defining the encoder and decoder configs. | |
| Configuration objects inherit from [`PretrainedConfig`] and can be used to control the model outputs. Read the | |
| documentation from [`PretrainedConfig`] for more information. | |
| Args: | |
| kwargs (*optional*): | |
| Dictionary of keyword arguments. Notably: | |
| - **encoder** ([`PretrainedConfig`], *optional*) -- An instance of a configuration object that defines | |
| the encoder config. | |
| - **decoder** ([`PretrainedConfig`], *optional*) -- An instance of a configuration object that defines | |
| the decoder config. | |
| Examples: | |
| ```python | |
| >>> from transformers import BertConfig, ViTConfig, VisionEncoderDecoderConfig, VisionEncoderDecoderModel | |
| >>> # Initializing a ViT & BERT style configuration | |
| >>> config_encoder = ViTConfig() | |
| >>> config_decoder = BertConfig() | |
| >>> config = VisionEncoderDecoderConfig.from_encoder_decoder_configs(config_encoder, config_decoder) | |
| >>> # Initializing a ViTBert model from a ViT & bert-base-uncased style configurations | |
| >>> model = VisionEncoderDecoderModel(config=config) | |
| >>> # Accessing the model configuration | |
| >>> config_encoder = model.config.encoder | |
| >>> config_decoder = model.config.decoder | |
| >>> # set decoder config to causal lm | |
| >>> config_decoder.is_decoder = True | |
| >>> config_decoder.add_cross_attention = True | |
| >>> # Saving the model, including its configuration | |
| >>> model.save_pretrained("my-model") | |
| >>> # loading model and config from pretrained folder | |
| >>> encoder_decoder_config = VisionEncoderDecoderConfig.from_pretrained("my-model") | |
| >>> model = VisionEncoderDecoderModel.from_pretrained("my-model", config=encoder_decoder_config) | |
| ```""" | |
| model_type = "audio-encoder-decoder" | |
| is_composition = True | |
| def __init__(self, **kwargs): | |
| super().__init__(**kwargs) | |
| if "encoder" not in kwargs or "decoder" not in kwargs: | |
| raise ValueError( | |
| f"A configuraton of type {self.model_type} cannot be instantiated because " | |
| f"not both `encoder` and `decoder` sub-configurations are passed, but only {kwargs}" | |
| ) | |
| encoder_config = kwargs.pop("encoder") | |
| # encoder_model_type = encoder_config.pop("model_type") | |
| decoder_config = kwargs.pop("decoder") | |
| decoder_model_type = decoder_config.pop("model_type") | |
| self.encoder = AudioEncoderConfig(**encoder_config) | |
| # self.encoder = AudioEncoderModel(encoder_config) | |
| self.decoder = AutoConfig.for_model(decoder_model_type, **decoder_config) | |
| self.is_encoder_decoder = True | |
| # self.num_labels = 0 | |
| def from_encoder_decoder_configs( | |
| cls, encoder_config: PretrainedConfig, decoder_config: PretrainedConfig, **kwargs | |
| ) -> PretrainedConfig: | |
| r""" | |
| Instantiate a [`VisionEncoderDecoderConfig`] (or a derived class) from a pre-trained encoder model | |
| configuration and decoder model configuration. | |
| Returns: | |
| [`VisionEncoderDecoderConfig`]: An instance of a configuration object | |
| """ | |
| decoder_config.is_decoder = True | |
| decoder_config.add_cross_attention = True | |
| return cls(encoder=encoder_config.to_dict(), decoder=decoder_config.to_dict(), **kwargs) | |
| def to_dict(self): | |
| """ | |
| Serializes this instance to a Python dictionary. Override the default *to_dict()* from *PretrainedConfig*. | |
| Returns: | |
| `Dict[str, any]`: Dictionary of all the attributes that make up this configuration instance, | |
| """ | |
| output = copy.deepcopy(self.__dict__) | |
| output["encoder"] = self.encoder.to_dict() | |
| output["decoder"] = self.decoder.to_dict() | |
| output["model_type"] = self.__class__.model_type | |
| return output | |
| if __name__ == '__main__': | |
| import os | |
| import ruamel.yaml as yaml | |
| os.chdir("../") | |
| with open("settings/settings.yaml", "r") as f: | |
| config = yaml.safe_load(f) | |
| encoder_config = AudioEncoderConfig(**config["audio_encoder_args"]) | |
| config_decoder = BertConfig() | |
| config = AudioEncoderDecoderConfig.from_encoder_decoder_configs(encoder_config, config_decoder) | |
| print(config) | |