U
    d                     @   sJ   d dl Zd dlZd dlmZmZmZ G dd dejZe	dkrFe
  dS )    N)core	workspace	test_utilc                   @   s   e Zd Zdd ZdS )TestToyRegressionc                 C   s  t   td}|jg dddgddd}|jg ddgd	d
}|jg dddgddgd}|jg ddgdgd}|jg ddgdd
}|jg ddgdd
}|jg ddgdtjjd}td}	|	j	g dddgd	dd}
|

||gd}|

||gd}|	||gd}|g dg}|	j|gdd}|	|| |	j|ddd d!d"d# |	|||t| |g| |	|||t| |g| |||fD ]}|	|g  qtd$}|td| |td|	d% t | t d}t d}tjj|ddggdd& tjj|dgdd& t   d'S )(aE  Tests a toy regression end to end.

        The test code carries a simple toy regression in the form
            y = 2.0 x1 + 1.5 x2 + 0.5
        by randomly generating gaussian inputs and calculating the ground
        truth outputs in the net as well. It uses a standard SGD to then
        train the parameters.
        initW      g      g      ?)shapeminmaxBg        )r
   valueW_gtg       @g      ?)r
   valuesB_gtg      ?LRgONEITERr   )r
   r   ZdtypeZtrainX@   )r
   ZmeanZstdY_gtY_preddistloss)skipstep   g?)Zbase_lrpolicyZstepsizegammaZtoy_regression   )decimalN)r   ZResetWorkspacer   ZNetZUniformFillZConstantFillZGivenTensorFillZDataTypeZINT64ZGaussianFillZFCZSquaredL2DistanceZAveragedLossZAddGradientOperatorsZIterZLearningRateZWeightedSumstrZPrintZPlanZAddStepZExecutionStepZRunPlanZ	FetchBlobnpZtestingZassert_array_almost_equal)selfZinit_netr   r   r   r   r   r   r   Z	train_netr   r   r   r   r   Zinput_to_gradZblobZplanZW_resultZB_result r%   E/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/toy_regression_test.pytestToyRegression   sT    	
   

  



z#TestToyRegression.testToyRegressionN)__name__
__module____qualname__r'   r%   r%   r%   r&   r      s   r   __main__)Znumpyr#   ZunittestZcaffe2.pythonr   r   r   ZTestCaser   r(   mainr%   r%   r%   r&   <module>   s
   8