[e72cf6]: / __pycache__ / train.cpython-37.pyc

Download this file

246 lines (246 with data), 18.5 kB

B

k¯èaLeã@sªddlZddlmmZddlZddlmZddl	Z	ddl
mZddlm
Z
dd„ZGdd„deƒZGd	d
„d
eƒZGdd„deƒZd
d„Zdd„Zdd„Zdd„ZdS)éN)ÚVariable)Úcalc_weight)ÚevaluatecCs x| ¡D]}| |¡q
WdS)N)Ú
parametersÚrequires_grad_)ÚmodelÚ
requires_gradÚp©r
ú1C:\Users\Xin\Desktop\mscETM\Demo code_BS\train.pyÚtoogle_grad
src@sPeZdZdd„Zdd„Zdd„Zdd„Zd	d
„Zdd„Zddd„Z	ddd„Z
dS)Ú
Trainer_moETMcCs||_||_||_||_dS)N)Úencoder_mod1Úencoder_mod2ÚdecoderÚ	optimizer)Úselfrrrrr
r
rÚ__init__szTrainer_moETM.__init__cCsºt|jdƒt|jdƒt|jdƒ|j ¡|j ¡|j ¡|j ¡| |¡\}}| |¡\}}|jd|jd|jdfdd\}	}
t	j
|	| d¡| d¡fdd}t	j
|
| d¡| d¡fdd}| ||¡\}
}t
j| |
|¡dd}| ||¡\}}|| d¡ ¡}|| d¡ ¡}| |
|¡ ¡}||||}| ¡t	jj |j ¡d¡t	jj |j ¡d¡t	jj |j ¡d¡|j ¡| ¡| ¡| ¡| ¡fS)NTér)Úuse_cuda)Údiméÿÿÿÿé2)rrrrÚtrainrÚ	zero_gradÚprior_expertÚshapeÚtorchÚcatÚ	unsqueezeÚexpertsÚFÚsoftmaxÚreparameterizeÚsumÚmeanÚget_klÚbackwardÚnnÚutilsÚclip_grad_norm_rÚstepÚitem)rÚx_mod1Úx_mod2Ú
batch_indicesÚ	KL_weightÚmu_mod1Úlog_sigma_mod1Úmu_mod2Úlog_sigma_mod2Úmu_priorÚlogsigma_priorÚMuÚ	Log_sigmaÚmuÚ	log_sigmaÚThetaÚrecon_log_mod1Úrecon_log_mod2Únll_mod1Únll_mod2ÚKLÚLossr
r
rrs2



$  
zTrainer_moETM.traincCs t |¡}t |¡}|||S)N)rÚexpÚ
randn_like)rr9r:ÚstdÚepsr
r
rr#@s

zTrainer_moETM.reparameterizecCs,d|}dd|| d¡| ¡ d¡S)a0Calculate KL(q||p) where q = Normal(mu, sigma and p = Normal(0, I).
        Args:
            mu: the mean of the q distribution.
            logsigma: the log of the standard deviation of the q distribution.
        Returns:
            KL(q||p) where q = Normal(mu, sigma and p = Normal(0, I).
        égà¿rr)ÚpowrBr$)rr9Úlogsigmar
r
rr&Fs	zTrainer_moETM.get_klc	CsÞ|j ¡|j ¡|j ¡t ¡–| |¡\}}| |¡\}}|jd|jd|jdfdd\}}tj|| 	d¡| 	d¡fdd}	tj|| 	d¡| 	d¡fdd}
| 
|	|
¡\}}WdQRXi}
t | 
d¡¡|
d<|
S)NrrT)r)rÚcpuÚdelta)rÚevalrrrÚno_gradrrrrr ÚnpÚarrayÚto)rr-r.r1r2r3r4r5r6r7r8r9r:Úoutr
r
rÚ	get_embedRs



$  zTrainer_moETM.get_embedc	Cs |j ¡|j ¡|j ¡t ¡ä| |¡\}}| |¡\}}|jd|jd|jdfdd\}}	tj|| 	d¡| 	d¡fdd}
tj|	| 	d¡| 	d¡fdd}| 
|
|¡\}}
tj| 
||
¡dd}| ||¡\}}|| d¡ ¡}|| d¡ ¡}WdQRX| ¡| ¡fS)NrrT)r)rr)rrKrrrrLrrrrr r!r"r#r$r%r,)rr-r.r/r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r
r
rÚget_NLLes



$  zTrainer_moETM.get_NLLFcCs:tt |¡ƒ}tt |¡ƒ}|r2| ¡| ¡}}||fS)aUniversal prior expert. Here we use a spherical
        Gaussian: N(0, 1).
        @param size: integer
                     dimensionality of Gaussian
        @param use_cuda: boolean [default: False]
                         cast CUDA on variables
        )rrÚzerosÚcuda)rÚsizerr9Úlogvarr
r
rr~s
zTrainer_moETM.prior_expertç:Œ0âŽyE>c	Csjt d|¡|}d||}tj||ddtj|dd}dtj|dd}dt ||¡}||fS)NrFgð?r)rgà?)rrBr$Úlog)	rr9rHrEÚvarÚTÚpd_muÚpd_varÚpd_logsigmar
r
rr Œs zTrainer_moETM.expertsN)F)rW)Ú__name__Ú
__module__Ú__qualname__rrr#r&rQrRrr r
r
r
rr
s)
r
c@s`eZdZdd„Zdd„Zdd„Zdd„Zd	d
„Zdd„Zd
d„Z	dd„Z
ddd„Zddd„ZdS)ÚTrainer_moETM_OTcCs"||_||_||_||_||_dS)N)rrrÚ
classifierr)rrrrrbrr
r
rr–s
zTrainer_moETM_OT.__init__cCs0t|jdƒt|jdƒt|jdƒt|jdƒ|j ¡|j ¡|j ¡|j ¡|j ¡| |¡\}}| |¡\}}	|jd|j	d|j	dfdd\}
}t
j|
| d¡| d¡fdd}t
j|| d¡|	 d¡fdd}
| 
||
¡\}}tj| ||¡dd}| |¡\}}|| d¡ ¡}|| d¡ ¡}| ||¡ ¡}| |¡}t ||¡}|jjjj ¡}| |||¡}|||d|||}| ¡t
jj |j ¡d¡t
jj |j ¡d¡t
jj |j ¡d¡t
jj |j ¡d¡|j ¡| ¡| ¡| ¡| ¡| ¡| ¡fS)	NTrr)r)rrgš™™™™™¹?r) rrrrrbrrrrrrrrr r!r"r#r$r%r&Ú
cross_entropyÚweightÚdataÚcloneÚdomain_lossr'r(r)r*rr+r,)rr-r.ZcelltypeÚ
celltype_propr0r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r@ÚlogitsÚcls_lossÚprotocolrgrAr
r
rržs@




$  

zTrainer_moETM_OT.trainc
Cs’t ||j¡}t |¡}|d|}tj|dd}tj|ddd}| ||¡}	d|	| d¡ ¡}
d|	| d¡| 	d¡ ¡}|
|}|S)Nrr)rgà?)
rÚmatmulrZrXr!r"Úpairwise_cosine_distr$r%Úsqueeze)
rrkÚfeaturerhZsim_matZ	log_priorZ
new_logitsZs_distZt_distZcost_matZsource_lossZtarget_lossÚlossr
r
rrgÒs
 zTrainer_moETM_OT.domain_losscCs2tj|ddd}tj|ddd}dt ||j¡S)NrFr)r	r)r!Ú	normalizerrlrZ)ZselfselfÚxÚyr
r
rrmãsz%Trainer_moETM_OT.pairwise_cosine_distcCs t |¡}t |¡}|||S)N)rrBrC)rr9r:rDrEr
r
rr#és

zTrainer_moETM_OT.reparameterizecCs,d|}dd|| d¡| ¡ d¡S)a0Calculate KL(q||p) where q = Normal(mu, sigma and p = Normal(0, I).
        Args:
            mu: the mean of the q distribution.
            logsigma: the log of the standard deviation of the q distribution.
        Returns:
            KL(q||p) where q = Normal(mu, sigma and p = Normal(0, I).
        rFgà¿rr)rGrBr$)rr9rHr
r
rr&ïs	zTrainer_moETM_OT.get_klc	CsÞ|j ¡|j ¡|j ¡t ¡–| |¡\}}| |¡\}}|jd|jd|jdfdd\}}tj|| 	d¡| 	d¡fdd}	tj|| 	d¡| 	d¡fdd}
| 
|	|
¡\}}WdQRXi}
t | 
d¡¡|
d<|
S)NrrT)r)rrIrJ)rrKrrrrLrrrrr rMrNrO)rr-r.r1r2r3r4r5r6r7r8r9r:rPr
r
rrQûs



$  zTrainer_moETM_OT.get_embedc	Cs|j ¡|j ¡|j ¡t ¡â| |¡\}}| |¡\}}|jd|jd|jdfdd\}}tj|| 	d¡| 	d¡fdd}	tj|| 	d¡| 	d¡fdd}
| 
|	|
¡\}}tj| 
||¡dd}
| |
¡\}}|| d¡ ¡}|| d¡ ¡}WdQRX| ¡| ¡fS)NrrT)r)rr)rrKrrrrLrrrrr r!r"r#r$r%r,)rr-r.r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r
r
rrRs



$  zTrainer_moETM_OT.get_NLLFcCs:tt |¡ƒ}tt |¡ƒ}|r2| ¡| ¡}}||fS)aUniversal prior expert. Here we use a spherical
        Gaussian: N(0, 1).
        @param size: integer
                     dimensionality of Gaussian
        @param use_cuda: boolean [default: False]
                         cast CUDA on variables
        )rrrSrT)rrUrr9rVr
r
rr's
zTrainer_moETM_OT.prior_expertç:Œ0âŽyE>c	Csjt d|¡|}d||}tj||ddtj|dd}dtj|dd}dt ||¡}||fS)NrFgð?r)rgà?)rrBr$rX)	rr9rHrErYrZr[r\r]r
r
rr 5s zTrainer_moETM_OT.expertsN)F)rt)
r^r_r`rrrgrmr#r&rQrRrr r
r
r
rra•s4
rac@sPeZdZdd„Zdd„Zdd„Zdd„Zd	d
„Zdd„Zddd„Z	ddd„Z
dS)ÚTrainer_coboltcCs||_||_||_||_dS)N)rrrr)rrrrrr
r
rr?szTrainer_cobolt.__init__cCs¸t|jdƒt|jdƒt|jdƒ|j ¡|j ¡|j ¡|j ¡| |¡\}}| |¡\}}|jd|jd|jdfdd\}}	t	j
|| d¡| d¡fdd}
t	j
|	| d¡| d¡fdd}| |
|¡\}}
t
j| ||
¡dd}| |¡\}}|| d¡ ¡}|| d¡ ¡}| ||
¡ ¡}||||}| ¡t	jj |j ¡d¡t	jj |j ¡d¡t	jj |j ¡d¡|j ¡| ¡| ¡| ¡| ¡fS)NTrr)r)rrr)rrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*rr+r,)rr-r.r0r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r@rAr
r
rrFs2



$  
zTrainer_cobolt.traincCs t |¡}t |¡}|||S)N)rrBrC)rr9r:rDrEr
r
rr#os

zTrainer_cobolt.reparameterizecCs,d|}dd|| d¡| ¡ d¡S)a0Calculate KL(q||p) where q = Normal(mu, sigma and p = Normal(0, I).
        Args:
            mu: the mean of the q distribution.
            logsigma: the log of the standard deviation of the q distribution.
        Returns:
            KL(q||p) where q = Normal(mu, sigma and p = Normal(0, I).
        rFgà¿rr)rGrBr$)rr9rHr
r
rr&us	zTrainer_cobolt.get_klc	CsÞ|j ¡|j ¡|j ¡t ¡–| |¡\}}| |¡\}}|jd|jd|jdfdd\}}tj|| 	d¡| 	d¡fdd}	tj|| 	d¡| 	d¡fdd}
| 
|	|
¡\}}WdQRXi}
t | 
d¡¡|
d<|
S)NrrT)r)rrIrJ)rrKrrrrLrrrrr rMrNrO)rr-r.r1r2r3r4r5r6r7r8r9r:rPr
r
rrQs



$  zTrainer_cobolt.get_embedc	Cs|j ¡|j ¡|j ¡t ¡â| |¡\}}| |¡\}}|jd|jd|jdfdd\}}tj|| 	d¡| 	d¡fdd}	tj|| 	d¡| 	d¡fdd}
| 
|	|
¡\}}tj| 
||¡dd}
| |
¡\}}|| d¡ ¡}|| d¡ ¡}WdQRX| ¡| ¡fS)NrrT)r)rr)rrKrrrrLrrrrr r!r"r#r$r%r,)rr-r.r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r
r
rrR”s



$  zTrainer_cobolt.get_NLLFcCs:tt |¡ƒ}tt |¡ƒ}|r2| ¡| ¡}}||fS)aUniversal prior expert. Here we use a spherical
        Gaussian: N(0, 1).
        @param size: integer
                     dimensionality of Gaussian
        @param use_cuda: boolean [default: False]
                         cast CUDA on variables
        )rrrSrT)rrUrr9rVr
r
rr­s
zTrainer_cobolt.prior_expertç:Œ0âŽyE>c	Csjt d|¡|}d||}tj||ddtj|dd}dtj|dd}dt ||¡}||fS)NrFgð?r)rgà?)rrBr$rX)	rr9rHrErYrZr[r\r]r
r
rr »s zTrainer_cobolt.expertsN)F)rv)r^r_r`rrr#r&rQrRrr r
r
r
rru>s)
ruc#Csðtt d|¡ƒ}|\}}	}
|\}}}
}xžt|ƒD]}d}d}d}d}t ¡}tj |¡t||ddddƒ}x°t||ƒD] }|||||d|…dd…f}|	||||d|…dd…f}|
||||d|…}| ||||¡\}}}}||7}||7}||7}||7}q|Wt ¡}|ddkr2| 	||¡}| 
|||
¡\} }!|j |¡t
f||ddœ|—Ž}"td|||||||| |!fƒtd	|"d
|"d|"d|"d
|"d|"dfƒq2W| 	||¡}| 
|||
¡\} }!|| |!fS)NrgUUUUUUÕ?gü©ñÒMbP?rédT)ÚadataÚn_epochÚ
return_figzk[epoch %0d finished time %4f], Loss=%.4f, NLL_mod1=%.4f, NLL_adt=%.4f, KL=%.4f, NLL_mod1=%.4f, NLL_adt=%.4fzZCell_ARI=%.4f, Cell_NMI=%.4f, Cell_ASW=%.4f, Cell_KBET=%.4f, Batch_ASW=%.4f, Batch_GC=%.4fÚariÚnmiÚaswÚk_betÚ	batch_aswÚbatch_graph_score)ÚlistrMÚarangeÚrangeÚtimeÚrandomÚshufflerrrQrRÚobsmÚupdaterÚprint)#ÚtrainerÚTotal_epochÚ	train_numÚ
batch_sizeÚ	Train_setÚTest_setÚEval_kwargsÚLISTÚX_mod1ÚX_mod2Úbatch_indexÚtest_X_mod1Útest_X_mod2Úbatch_index_testÚ
test_adateÚepochÚLoss_allÚNLL_all_mod1ÚNLL_all_mod2ÚKL_allÚtstartr0Ú	iterationÚx_minibatch_mod1_TÚx_minibatch_mod2_TÚbatch_minibatch_Trpr>r?ÚklÚtendÚembedÚ
nll_mod1_testÚ
nll_mod2_testÚresultr
r
rÚTrain_moETMÄs>
$$ 4r©c#Csðtt d|¡ƒ}|\}}	}
|\}}}
}xžt|ƒD]}d}d}d}d}t ¡}tj |¡t||ddddƒ}x°t||ƒD] }|||||d|…dd…f}|	||||d|…dd…f}|
||||d|…}| ||||¡\}}}}||7}||7}||7}||7}q|Wt ¡}|ddkr2| 	||¡}| 
|||
¡\} }!|j |¡t
f||ddœ|—Ž}"td|||||||| |!fƒtd	|"d
|"d|"d|"d
|"d|"dfƒq2W| 	||¡}| 
|||
¡\} }!|| |!fS)NrgUUUUUUÕ?gü©ñÒMbP?rrwT)rxryrzzk[epoch %0d finished time %4f], Loss=%.4f, NLL_mod1=%.4f, NLL_adt=%.4f, KL=%.4f, NLL_mod1=%.4f, NLL_adt=%.4fzZCell_ARI=%.4f, Cell_NMI=%.4f, Cell_ASW=%.4f, Cell_KBET=%.4f, Batch_ASW=%.4f, Batch_GC=%.4fr{r|r}r~rr€)rrMr‚rƒr„r…r†rrrQrRr‡rˆrr‰)#rŠr‹rŒrrŽrrr‘r’r“r”r•r–r—r˜r™ršr›rœrržr0rŸr r¡r¢rpr>r?r£r¤r¥r¦r§r¨r
r
rÚTrain_moETM_BSïs>
$$ 4rªc(Cstt d|¡ƒ}|\}}	}
}|\}}
}}xºt|ƒD]¬}d}d}d}d}d}d}t ¡}tj |¡t||ddddƒ}xÆt||ƒD]¶}|||||d|…dd…f}|	||||d|…dd…f}|
||||d|…}| |||||¡\}}}} }!}"||7}||7}||7}|| 7}||!7}||"7}q†Wt ¡}#|ddkr4| 	||
¡}$| 
||
¡\}%}&|j |$¡t
f||ddœ|—Ž}'td||#||||||%|&fƒtd|'d	|'d
|'d|'d|'d
|'dfƒq4W| 	||
¡}$| 
||
¡\}%}&|$|%|&fS)NrgUUUUUUÕ?gü©ñÒMbP?rT)rxryrzzk[epoch %0d finished time %4f], Loss=%.4f, NLL_mod1=%.4f, NLL_adt=%.4f, KL=%.4f, NLL_mod1=%.4f, NLL_adt=%.4fzZCell_ARI=%.4f, Cell_NMI=%.4f, Cell_ASW=%.4f, Cell_KBET=%.4f, Batch_ASW=%.4f, Batch_GC=%.4fr{r|r}r~rr€)rrMr‚rƒr„r…r†rrrQrRr‡rˆrr‰)(rŠr‹rŒrrŽrrr‘r’r“Ú	cell_typeZcell_type_propr•r–r—r˜r™ršr›rœrZDomain_loss_allZCls_loss_allržr0rŸr r¡Zcelltype_minibatch_Trpr>r?r£rgrjr¤r¥r¦r§r¨r
r
rÚTrain_moETM_OTsF$$ 4r¬c"CsÎtt d|¡ƒ}|\}}	}
|\}}}
}x~t|ƒD]p}d}d}d}d}t ¡}tj |¡t||ddddƒ}x’t||ƒD]‚}|||||d|…dd…f}|	||||d|…dd…f}| |||¡\}}}}||7}||7}||7}||7}q|Wt ¡}|ddkr2| 	||¡}| 
||¡\}} |j |¡t
f||ddœ|—Ž}!td||||||||| fƒtd	|!d
|!d|!d|!d
|!d|!dfƒq2W| 	||¡}| 
||¡\}} ||| fS)NrgUUUUUUÕ?gü©ñÒMbP?rrwT)rxryrzzk[epoch %0d finished time %4f], Loss=%.4f, NLL_mod1=%.4f, NLL_adt=%.4f, KL=%.4f, NLL_mod1=%.4f, NLL_adt=%.4fzZCell_ARI=%.4f, Cell_NMI=%.4f, Cell_ASW=%.4f, Cell_KBET=%.4f, Batch_ASW=%.4f, Batch_GC=%.4fr{r|r}r~rr€)rrMr‚rƒr„r…r†rrrQrRr‡rˆrr‰)"rŠr‹rŒrrŽrrr‘r’r“r”r•r–r—r˜r™ršr›rœrržr0rŸr r¡rpr>r?r£r¤r¥r¦r§r¨r
r
rÚTrain_coboltIs<
$$ 4r­)rZtorch.nn.functionalr(Ú
functionalr!ÚnumpyrMZtorch.autogradrr„r)rÚ
eval_utilsrrÚobjectr
rarur©rªr¬r­r
r
r
rÚ<module>s"*++/