3
\
                 @   s   d dl Z d dlZd dlZd dlZd dljZd dljZej	j
ddej dZee G dd dejZejd ZdZdZd	ZeeeejeZej Zejjej d
dZdd Zd dljZdd Z dS )    Nz./mnist_dataT)rootdownload	transformc                   s$   e Zd Z fddZdd Z  ZS )OneConvLayerc                s\   t t| j  tjtjddddddtjdtj tjdd| _	tj
|d d || _d S )N             )in_channelsout_channelskernel_sizestridepadding)r      )superr   __init__nn
SequentialConv2dBatchNorm2dReLU	MaxPool2dnetwork1Linearnetwork2)selfin_dimout_dimnkernels)	__class__ </afs/cs.cmu.edu/academic/class/15494-s19/labs/lab8/mnist3.pyr      s    zOneConvLayer.__init__c             C   s*   | j |}|j|jdd}| j|}|S )Nr   r   )r   viewsizer   )r   xoutr    r    r!   forward   s    

zOneConvLayer.forward)__name__
__module____qualname__r   r'   __classcell__r    r    )r   r!   r      s   r      
   r   g{Gzt?)lrc              C   s<  d} d}t d tjjjt| dd}t d xt|D ]}d}tj }d}x|D ]\}}|jt	}|jt	}t
j  t|}	t|	|}
|
j  t
j  ||
j |  7 }|	j }	x:t| D ].}tj|	|d d f }||| kr|d7 }qW qPW t ||d	tj | d
d t d|d d d q6W tjtj d t d d S )Nd      z
Loading...T)dataset
batch_sizeshufflezLoading complete.g        r   ztime= )endz  correct = i`  %z./mnist3-saved.ptzmodel saved)printtorchutilsdata
DataLoadertrainsetrangetimetodevice	optimizer	zero_gradmodel	criterionbackwardstepitemdetachargmaxsave
state_dict)Z	batchSizeZepochsZtrainloaderepochZrunningLossnowZcorrectimageslabelsoutputslossipredictr    r    r!   train1   s6    


rT   c              C   s^   t j  tjj j j j } x:tdD ].}t j	| | j
dd t jdd td q(W d S )Nr   r   F)blockzPress Enter to proceed...)pltfigurerC   r   
parameters__next__rH   cpur=   imshowr#   showinput)weightsrR   r    r    r!   displayV   s    r_   i  )!r>   numpynpr8   torchvisiontorchvision.transforms
transformstorch.nnr   datasetsMNISTToTensorr<   r7   Moduler   r@   r   r   r   r?   rC   CrossEntropyLossrD   optimSGDrX   rA   rT   matplotlib.pyplotpyplotrV   r_   r    r    r    r!   <module>   s(   


#
