U
    d	                     @   sD   d dl mZmZ d dlmZ d dlmZ d dlZG dd deZ	dS )    )coreschema)
ModelLayer)TagsNc                       s&   e Zd Zd fdd	Zdd Z  ZS )BatchMSELossbatch_mse_lossc                    sj   t t| j|||f| ttdt fdt f|s@t| j	t
jg ttj| d| _d S )Nlabel
predictionoutput)superr   __init__r   Zis_schema_subsetStructZScalarAssertionErrortagsupdater   ZEXCLUDE_FROM_PREDICTIONnpfloat32Zget_next_blob_referenceoutput_schema)selfmodelinput_recordnamekwargs	__class__ G/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/layers/batch_mse_loss.pyr      s    

zBatchMSELoss.__init__c                 C   s  | j  }| j j }| j j j| j j jkrV|j||dt	| j j d}|j
|ddgd}|||d}|||g|d}d| j jkr| j  }| j j jtjkr|j||d tjjd}||g|d	g}|||g|d
}||| j  d S )NZ
cast_label)to   )ZdimsZstopped_labell2weightZ_float32Zweight_stop_gradientZweighted_l2_distance)r   r	   r   Zfield_blobsZ
field_typebaseZCastZNextScopedBlobr   Zdata_type_for_dtypeZ
ExpandDimsZStopGradientZSquaredL2Distancefieldsr    r   r   r   ZDataTypeFLOATZMulZAveragedLossr   )r   netr	   r   Zl2distZweight_blobr   r   r   add_ops$   sL    



zBatchMSELoss.add_ops)r   )__name__
__module____qualname__r   r%   __classcell__r   r   r   r   r      s   r   )
Zcaffe2.pythonr   r   Zcaffe2.python.layers.layersr   Zcaffe2.python.layers.tagsr   Znumpyr   r   r   r   r   r   <module>   s   