o
    ߥiV                     @   sL   d dl Z d dlm  mZ d dl mZ ddlmZmZ G dd dejZdS )    N)nn   )basic_blocksplain_net_utilsc                       s8   e Zd Z									d fdd	Zdd Z  ZS )PlainNetNFc
                    s  d }|d u r|d ur|j }nd}|d u r|d ur|j}nd}|d u r,|d ur*|j}nd}|	d u r=|d ur9|j| _nd | _n|	| _tt| jd||||||||d|
 | jd j| _	t
j| j	| j|d| _|| _|| _|| _ || _|  D ]}t|tjrd|_qvd S )NF)argvoptnum_classesplainnet_struct	no_create
no_reslinkno_BNuse_se)in_channelsout_channelsr   gMbP? )r   r   r   dropoutsuperr   __init__
block_listr   last_channelsr   Linearr	   	fc_linearr   modules
isinstancer   BatchNorm2deps)selfr   r   r	   r
   r   r   r   r   r   kwargs
module_optlayer	__class__r   i/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/cv/tinynas_classfication/master_net.pyr      sZ   
	
zPlainNet.__init__c                 C   s   |}t | jD ]#\}}||}| jd ur*t|t| j | j }tj||| jdd}qtj|dd}| jd urBtj|| j| jdd}t	|d}| 
|}|S )NT)traininginplacer   )output_size)	enumerater   r   floatlenFr%   adaptive_avg_pool2dtorchflattenr   )r   xoutputblock_id	the_block	dropout_pr   r   r$   forwardN   s*   



zPlainNet.forward)	NNNNFNNNN)__name__
__module____qualname__r   r4   __classcell__r   r   r"   r$   r      s    Ar   )	r-   torch.nn.functionalr   
functionalr+    r   r   r   r   r   r   r$   <module>   s
   