Pzg%ddlZddlZddlmZmZmZmZddlm Z m Z ddl m cm ZGddejZGddejZdS)N)Accuracy PrecisionRecallF1Score) Wav2Vec2Model!Wav2Vec2ForSequenceClassificationc@eZdZd fd Zd dZdZdZdZd ZxZ S) Wav2Vec2ClassifierAdamctt||t jd|_|jD] }d|_ tj |jj j ||_td||_t#d||_t'd||_t+d||_||_||j}|j}|j}|dkr;tj||||_dS|dkr;tj||||_dSt?d|d|_dS) Nzfacebook/wav2vec2-large-xlsr-53F multiclasstask num_classesr lr weight_decaySGDUnsupported optimizer: ) superr __init__save_hyperparametersrfrom_pretrainedwav2vec2 parameters requires_gradtorchnnLinearconfig hidden_size classifierraccuracyr precisionrrecallrf1 l1_lambdanamerroptimr optimizerr ValueError) selfr optimizer_cfgr(paramoptimizer_name optimizer_lroptimizer_weight_decay __class__s ,D:\emotion-detection\encoders\transformer.pyrzWav2Vec2Classifier.__init__ s  $''00222 !!###&56WXX ]--// ( (E"'E  (//$-*>*JKXX!l LLL " +NNN,KHHH |EEE"  "*/N(+L%2%? "' M!&!1!1$//2C2C cy!1!z!z5( M!&1B1B|bx!y!y !K>!K!KLLL!DNNNNc|dkr|d}|||}|j}t j|d}||}|S)Nattention_maskdim)r=squeezerlast_hidden_statermeanr#)r-xr:outputlogitss r4forwardzWav2Vec2Classifier.forward,sr 5577Q;  " Aq@@  $ Jqa ## r5c|\}}}|||}tj||}td|D}||j|zz }|d|dd|S)Nr9c3bK|]*}|V+dSN)abssum).0r/s r4 z3Wav2Vec2Classifier.training_step..Gs4GGEeiikkoo''GGGGGGr5 train_lossTprog_barlogger)F cross_entropyrIrr(log) r-batch batch_idxrAr:yrClossl1_norms r4 training_stepz Wav2Vec2Classifier.training_step=s$>1a777vq))GGT__5F5FGGGGG (( td4@@@ r5c,|\}}}|||}tj||}tj|d}|||} |||} |||} |||} |d|dd|d| dd|d| dd|d | dd|d | dd|S Nr9r;r<val_lossTrMval_acc val_precision val_recallval_f1 rPrQrargmaxr$r%r&r'rR r-rSrTrAr:rUrCrVpredsr$r%r&r's r4validation_stepz"Wav2Vec2Classifier.validation_stepNs $>1a777vq)) V+++==**NN5!,, UA&& WWUA   TD>>> HtDAAA )d4HHH vTBBB 2T::: r5c2|\}}}|||}tj||}tj|d}|||} |||} |||} |||} |d|dd|d| dd|d| dd|d | dd|d | dd|| d S Nr9r;r< test_lossTrMtest_acctest_precision test_recalltest_f1)rg test_accuracyr`rbs r4 test_stepzWav2Vec2Classifier.test_stepes*$>1a777vq)) V+++==**NN5!,, UA&& WWUA   dT$??? XTBBB !9tDIII dCCC Bd;;;!H===r5cn|j}tjj|dddd}||ddSNming?g-C6 ?)modefactorpatiencemin_lrr[)r+ lr_schedulermonitorr+rr*rvReduceLROnPlateaur-r+ schedulers r4configure_optimizersz'Wav2Vec2Classifier.configure_optimizers}?N K,>>yu]`kmvz>{{ & jYYYr5)r r rG __name__ __module__ __qualname__rrDrXrdrmr| __classcell__r3s@r4r r s!"!"!"!"!"!"F"".>>>0ZZZZZZZr5r c@eZdZd fd Zd dZdZdZd Zd ZxZ S) Wav2Vec2EmotionClassifier-C6?FAdamWctt||t jd||_|r(|jjD] }d|_ td||_ td||_ td||_t!d||_||_||d}|d}|d}|d kr;t&j||| |_dS|d kr;t&j||| |_dS|d kr;t&j||| |_dSt3d |d|_dS)Nz5audeering/wav2vec2-large-robust-12-ft-emotion-msp-dim) num_labelsFrrr)rrr rrrr)rrrrrrmodelrrrrr$rr%rr&rr' learning_raterr*r r+rrr,) r-rr freeze_baser.r/r0r1r2r3s r4rz"Wav2Vec2EmotionClassifier.__init__s '..77999 !!###7F C"     ,,7799 , ,&+##!l LLL " +NNN,KHHH |EEE*  "*62N(.L%2>%B "' M!&!1!1$//2C2C cy!1!z!z5( M!&1B1B|bx!y!y7* M!&!2!24??3D3Ddz!2!{!{ !K>!K!KLLL!DNNNr5Nc:|||jS)Nr9)rrC)r-rAr:s r4rDz!Wav2Vec2EmotionClassifier.forwardszz!Nz;;BBr5c|\}}}|||}tj||}|d|dd|S)Nr9rLTrM)rPrQrR)r-rSrTrAr:rUrCrVs r4rXz'Wav2Vec2EmotionClassifier.training_stepsX$>1a777vq)) td4@@@ r5c,|\}}}|||}tj||}tj|d}|||} |||} |||} |||} |d|dd|d| dd|d| dd|d | dd|d | dd|SrZr`rbs r4rdz)Wav2Vec2EmotionClassifier.validation_steps $>1a777vq)) V+++==**NN5!,, UA&& WWUA   TD>>> HtDAAA )d4HHH vTBBB 2T::: r5c2|\}}}|||}tj||}tj|d}|||} |||} |||} |||} |d|dd|d| dd|d| dd|d | dd|d | dd|| d Srfr`rbs r4rmz#Wav2Vec2EmotionClassifier.test_steps*$>1a777vq)) V+++==**NN5!,, UA&& WWUA   dT$??? XTBBB !9tDIII dCCC Bd;;;!H===r5cn|j}tjj|dddd}||ddSrorxrzs r4r|z.Wav2Vec2EmotionClassifier.configure_optimizersr}r5)rFrrGr~rs@r4rrs#"#"#"#"#"#"JCCCC   .>>>,ZZZZZZZr5r)pytorch_lightningplr torchmetricsrrrr transformersrrtorch.nn.functionalr functionalrPLightningModuler rr5r4rs ============IIIIIIIIxZxZxZxZxZ+xZxZxZvfZfZfZfZfZ 2fZfZfZfZfZr5