U
    ‰d©  ã                   @   s^   d dl Zd dlZd dlmZ d dlmZmZmZm	Z	m
Z
 G dd„ dejƒZedkrZe ¡  dS )é    N)Ú
caffe2_pb2)Ú	workspaceÚdevice_checkerÚ	test_utilÚmodel_helperÚbrewc                   @   s4   e Zd Zdd„ Zdd„ Ze ej d¡dd„ ƒZ	dS )	ÚTestMiniAlexNetc                 C   sH  t jdd}tj|ddddddi fd	i fd
dd
}t ||d¡}tj||ddddd}tj||dddd}tj||dddddi fd	ddifdddd}t ||d¡}tj||ddddd}	tj||	dddd}
tj||
ddd ddd!d"ifd	i fdd#	}t ||d$¡}tj||d%d d ddi fd	ddifddd&
}t ||d'¡}tj||d(d dddi fd	ddifddd&
}t ||d)¡}tj||d*ddd}t ||d+d,d-di fd	ddif¡}t ||d.¡}t ||d/d-d-di fd	ddif¡}t ||d0¡}t ||d1d-ddi fd	dd2if¡}t 	||d3¡}| 
|d4gd5¡}| |gd6g¡}| |g¡ |S )7NZalexnet)ÚnameÚdataÚconv1é   é   é   Z
XavierFillZConstantFillé   r   )ÚstrideÚpadÚrelu1Únorm1é   g-Cëâ6?g      è?)ÚsizeÚalphaÚbetaÚpool1é   )Úkernelr   Úconv2é    Úvaluegš™™™™™¹?é   )Úgroupr   r   Úrelu2Únorm2Úpool2Úconv3é@   Zstdg{®Gáz„?)r   Úrelu3Úconv4)r   r   Úrelu4Úconv5Úrelu5Úpool5Úfc6i€  i   Úrelu6Úfc7Úrelu7Úfc8g        ÚpredÚlabelÚxentÚloss)r   ZModelHelperr   ÚconvZreluZlrnZmax_poolZ
group_convZfcZsoftmaxZLabelCrossEntropyZAveragedLossZAddGradientOperators)ÚselfÚorderÚmodelr   r   r   r   r   r    r!   r"   r#   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r2   r3   © r8   úC/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/model_device_test.pyÚ_MiniAlexNetNoDropout   sÒ    ö
õ
÷
ö
ö     
þ     
þ     
þz%TestMiniAlexNet._MiniAlexNetNoDropoutc                 C   sò   |   |¡}t ¡  t |j¡ tdd„ |jD ƒƒ}|dkrZtj 	dddd¡ 
tj¡|d< ntj 	dddd¡ 
tj¡|d< t dd	ddg¡ 
tj¡|d
< t ¡ }tj|_t ¡ }tj|_t d||g¡}|j|j ¡ |dddgd}|  |d¡ d S )Nc                 S   s"   g | ]}t |ƒt t |ƒ¡f‘qS r8   )Ústrr   Z	FetchBlob)Ú.0r	   r8   r8   r9   Ú
<listcomp>s   s     z4TestMiniAlexNet._testMiniAlexNet.<locals>.<listcomp>ÚNCHWr   r   éã   r
   r   r   r1   gš™™™™™©?Z
_pool1_idxZ
_pool2_idxZ
_pool5_idx)ÚignoreT)r:   r   ZResetWorkspaceZ
RunNetOnceZparam_init_netÚdictÚparamsÚnpÚrandomZrandZastypeZfloat32ÚarrayZint32r   ZDeviceOptionZCPUZdevice_typeZGpuDeviceTyper   ZDeviceCheckerZCheckNetÚnetZProtoÚassertEqual)r5   r6   r7   ÚinputsZ
cpu_deviceZ
gpu_deviceÚcheckerÚretr8   r8   r9   Ú_testMiniAlexNetm   s.    
ÿÿ ûz TestMiniAlexNet._testMiniAlexNetzNo GPU support. Skipping test.c                 C   s   |   d¡ d S )Nr>   )rK   )r5   r8   r8   r9   ÚtestMiniAlexNetNCHW‹   s    z#TestMiniAlexNet.testMiniAlexNetNCHWN)
Ú__name__Ú
__module__Ú__qualname__r:   rK   ÚunittestZskipIfr   Zhas_gpu_supportrL   r8   r8   r8   r9   r      s   ]
ÿr   Ú__main__)ZnumpyrC   rP   Zcaffe2.protor   Zcaffe2.pythonr   r   r   r   r   ZTestCaser   rM   Úmainr8   r8   r8   r9   Ú<module>   s   	 
