o
    *jV                     @   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)Zin_channelsout_channelsr   gMbP? )r   r   r   dropoutsuperr   __init__
block_listr   Zlast_channelsr   ZLinearr	   	fc_linearr   modules
isinstancer   ZBatchNorm2deps)selfr   r   r	   r
   r   r   r   r   r   kwargsZ
module_optlayer	__class__r   v/var/www/html/Deteccion_Ine/venv/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)trainingZinplacer   )Zoutput_size)	enumerater   r   floatlenFr    Zadaptive_avg_pool2dtorchflattenr   )r   xoutputZblock_idZ	the_blockZ	dropout_pr   r   r   forwardN   s*   



zPlainNet.forward)	NNNNFNNNN)__name__
__module____qualname__r   r)   __classcell__r   r   r   r   r      s    Ar   )	r%   Ztorch.nn.functionalr   Z
functionalr$    r   r   r   r   r   r   r   <module>   s
   