U
    d                     @   s,   d dl mZ d dlmZ G dd deZdS )    )schema)
ModelLayerc                       s>   e Zd Zd fdd	Zdd Zdd	 Zd
d Zdd Z  ZS )Dropoutdropout      ?Fc                    st   t t| j|||f| t|tjs,td|dkr<|dk sHtd| | | _| j	| 
d || _|| _d S )NzIncorrect input typer   g      ?z,Expected 0 <= ratio < 1, but got ratio of %soutput)superr   __init__
isinstancer   ZScalarAssertionErrorZclone_schemaoutput_schema	set_valueZget_next_blob_referencedropout_for_evalratio)selfmodelinput_recordnamer   r   kwargs	__class__ @/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/layers/dropout.pyr	      s    	
zDropout.__init__c                 C   s8   | j  }| j |dg }|j||| j|d d S )NZd_mask)r   is_test)r   Zfield_blobsr   ZNextScopedBlobr   r   )r   netr   Z
input_blobZoutput_blobsr   r   r   _add_ops!   s    

zDropout._add_opsc                 C   s   | j |dd d S )NFr   )r   r   r   r   r   r   add_train_ops+   s    zDropout.add_train_opsc                 C   s   | j || j d d S )Nr   )r   r   r   r   r   r   add_eval_ops.   s    zDropout.add_eval_opsc                 C   s   |  | d S )N)r   r   r   r   r   add_ops1   s    zDropout.add_ops)r   r   F)	__name__
__module____qualname__r	   r   r   r   r    __classcell__r   r   r   r   r      s      
r   N)Zcaffe2.pythonr   Zcaffe2.python.layers.layersr   r   r   r   r   r   <module>   s   