a
    ==ic©  ã                   @   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é   )Z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.   r/   r1   r2   © r7   úp/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/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 g d¢¡ 
tj¡|d	< t ¡ }tj|_t ¡ }tj|_t d
||g¡}|j|j ¡ |g d¢d}|  |d¡ d S )Nc                 S   s"   g | ]}t |ƒt t |ƒ¡f‘qS r7   )Ústrr   Z	FetchBlob)Ú.0r	   r7   r7   r8   Ú
<listcomp>s   ó    z4TestMiniAlexNet._testMiniAlexNet.<locals>.<listcomp>ÚNCHWr   r   éã   r
   )r   r   r   r   r0   gš™™™™™©?)Z
_pool1_idxZ
_pool2_idxZ
_pool5_idx)ÚignoreT)r9   r   ZResetWorkspaceZ
RunNetOnceZparam_init_netÚdictÚparamsÚnpÚrandomZrandZastypeÚfloat32ÚarrayÚint32r   ZDeviceOptionZCPUZdevice_typeZGpuDeviceTyper   ZDeviceCheckerZCheckNetÚnetZProtoÚassertEqual)r4   r5   r6   ÚinputsZ
cpu_deviceZ
gpu_deviceÚcheckerÚretr7   r7   r8   Ú_testMiniAlexNetm   s.    
ÿÿ ûz TestMiniAlexNet._testMiniAlexNetzNo GPU support. Skipping test.c                 C   s   |   d¡ d S )Nr>   )rM   )r4   r7   r7   r8   ÚtestMiniAlexNetNCHW‹   s    z#TestMiniAlexNet.testMiniAlexNetNCHWN)
Ú__name__Ú
__module__Ú__qualname__r9   rM   ÚunittestZskipIfr   Zhas_gpu_supportrN   r7   r7   r7   r8   r      s   ]
ÿr   Ú__main__)ÚnumpyrC   rR   Zcaffe2.protor   Zcaffe2.pythonr   r   r   r   r   ZTestCaser   rO   Úmainr7   r7   r7   r8   Ú<module>   s   	 
