In [1]:
 
import os
os.chdir('/home/renwh/gaze/renwh/caffe_with_cudnnv3/')
import sys
sys.path.insert(0,'./python')
import caffe
from pylab import *
%matplotlib inline
caffe.set_device(0)
caffe.set_mode_gpu()
solver = caffe.SGDSolver('examples/mnist/lenet_solver.prototxt')
In [2]:
 
# each output is (batch size, feature dim, spatial dim)
[(k, v.data.shape) for k, v in solver.net.blobs.items()]
Out[2]:
[('data', (1000, 1, 36, 60)),
 ('label', (1000, 6)),
 ('gaze', (1000, 3)),
 ('headpose', (1000, 3)),
 ('conv1', (1000, 20, 32, 56)),
 ('pool1', (1000, 20, 16, 28)),
 ('conv2', (1000, 50, 12, 24)),
 ('pool2', (1000, 50, 6, 12)),
 ('ip1', (1000, 500)),
 ('cat', (1000, 503)),
 ('ip2', (1000, 3)),
 ('loss', ())]
In [3]:
 
# just print the weight sizes (not biases)
[(k, v[0].data.shape) for k, v in solver.net.params.items()]
Out[3]:
[('conv1', (20, 1, 5, 5)),
 ('conv2', (50, 20, 5, 5)),
 ('ip1', (500, 3600)),
 ('ip2', (3, 503))]
In [4]:
 
solver.net.forward()  # train net
solver.test_nets[0].forward()  # test net (there can be more than one)
Out[4]:
{'loss': array(0.5035974383354187, dtype=float32)}
In [6]:
x
# we use a little trick to tile the first eight images
imshow(solver.net.blobs['data'].data[:8, 0].transpose(1, 0, 2).reshape(36, 8*60), cmap='gray')
print solver.net.blobs['label'].data[:8]
[[ -2.44513273e-01   5.20949736e-02  -9.68245506e-01  -5.07045567e-01
   -1.12138920e-01  -2.90884897e-02]
 [ -7.41908699e-02   2.27922529e-01  -9.70848620e-01  -1.28387764e-01
    1.65355857e-02   1.06296828e-03]
 [ -1.74087971e-01   3.04691344e-02  -9.84258592e-01  -9.52000245e-02
   -3.14195365e-01  -1.50917871e-02]
 [ -2.49744281e-02   1.77879885e-01  -9.83735263e-01  -7.38587156e-02
   -1.21144764e-02  -4.47588827e-04]
 [ -1.61419377e-01   5.79187945e-02  -9.85184848e-01  -1.06810793e-01
    1.42905980e-01   7.65229668e-03]
 [ -1.52415037e-01   2.09456533e-01  -9.65866268e-01  -5.29863574e-02
   -1.14266567e-01  -3.03129526e-03]
 [ -1.76816806e-02   6.62708879e-02  -9.97644961e-01  -6.35477304e-02
   -2.95568883e-01  -9.46362782e-03]
 [  1.79661021e-01   2.34958977e-01  -9.55257118e-01  -8.40480402e-02
    1.60711512e-01   6.77234307e-03]]
In [8]:
solver.step(1)
In [9]:
imshow(solver.net.params['conv1'][0].diff[:, 0].reshape(4, 5, 5, 5)
       .transpose(0, 2, 1, 3).reshape(4*5, 5*5), cmap='gray')
Out[9]:
<matplotlib.image.AxesImage at 0x7f02c0214910>
xxxxxxxxxx
Show the conv1 weights pics.
Then, I will train the model, and log some information.

Type Markdown and LaTeX: α2

In [14]:
%%time
niter = 200
test_interval = 25
# losses will also be stored in the log
train_loss = zeros(niter)
#test_acc = zeros(int(np.ceil(niter / test_interval)))
output = zeros((niter, 8, 3))
# the main solver loop
for it in range(niter):
    solver.step(1)  # SGD by Caffe
    
    # store the train loss
    train_loss[it] = solver.net.blobs['loss'].data
    
    # store the output on the first test batch
    # (start the forward pass at conv1 to avoid loading new data)
    solver.test_nets[0].forward(start='conv1')
    output[it] = solver.test_nets[0].blobs['ip2'].data[:8]
    if it % test_interval == 0:
        print 'Iteration', it
    # run a full test every so often
    # (Caffe can also do this for us and write to a log, but we show here
    #  how to do it directly in Python, where more complicated things are easier.)
Iteration 0
Iteration 25
Iteration 50
Iteration 75
Iteration 100
Iteration 125
Iteration 150
Iteration 175
CPU times: user 11.9 s, sys: 1.76 s, total: 13.6 s
Wall time: 13.6 s
In [15]:
 
_, ax1 = subplots()
ax1.plot(arange(niter), train_loss)
ax1.set_xlabel('iteration')
ax1.set_ylabel('train loss')
Out[15]:
<matplotlib.text.Text at 0x7f02c0113190>
xxxxxxxxxx
**show you the train loss curve.

Type Markdown and LaTeX: α2

In [52]:
x
figsize=(20, 10)
imshow(solver.test_nets[0].blobs['data'].data[:8, 0].transpose(1, 0, 2).reshape(36, 8*60), cmap='gray')
    
# print the label and train result
for i in range(20):
    print solver.test_nets[0].blobs['label'].data[i,:3] ,'label<->ip2', solver.test_nets[0].blobs['ip2'].data[i]
    
    
[-0.03092132  0.2968981  -0.95440841] label<->ip2 [ 0.10280865  0.22780433 -0.95773882]
[-0.17464623  0.07483938 -0.98178297] label<->ip2 [ 0.02726202  0.19643065 -0.96399546]
[-0.05296618  0.03521639 -0.99797517] label<->ip2 [ 0.16063997  0.15368004 -0.92129803]
[ 0.15368699  0.22621903 -0.96187592] label<->ip2 [ 0.02795876  0.21579137 -0.9585855 ]
[ 0.12089528  0.1480363  -0.98156488] label<->ip2 [ 0.1779269   0.18446031 -0.9531008 ]
[-0.00988072  0.12020992 -0.99269933] label<->ip2 [ 0.04491396  0.1849654  -0.94595277]
[ 0.2152129   0.09968402 -0.97146618] label<->ip2 [ 0.22561353  0.16166027 -0.93124777]
[ 0.00774731  0.23595811 -0.97173232] label<->ip2 [ 0.08609454  0.24010643 -0.96572572]
[-0.02837802  0.06899208 -0.99721348] label<->ip2 [ 0.17161092  0.14782152 -0.92458385]
[-0.16378379  0.29957783 -0.9399085 ] label<->ip2 [ 0.02537508  0.24323285 -0.95562994]
[ 0.07077608  0.2685408  -0.96066469] label<->ip2 [ 0.12900807  0.21200953 -0.96210188]
[-0.06599613  0.1631272  -0.98439527] label<->ip2 [-0.10431193  0.19909883 -0.95139253]
[-0.14460173  0.2283988  -0.96276909] label<->ip2 [ 0.08781677  0.24905121 -0.96745956]
[-0.00739336  0.02487539 -0.99966323] label<->ip2 [ 0.13082068  0.15427546 -0.98641074]
[-0.10118731  0.16971911 -0.98028392] label<->ip2 [ 0.10433573  0.20606008 -0.96309495]
[-0.24296962  0.17370193 -0.95435494] label<->ip2 [-0.00198683  0.22033054 -0.96633315]
[-0.00978585  0.25987193 -0.96559352] label<->ip2 [ 0.06780601  0.23249269 -0.96632171]
[ 0.13373443  0.17797749 -0.97490466] label<->ip2 [-0.02382333  0.24916577 -0.93020672]
[-0.06412659  0.20568931 -0.97651404] label<->ip2 [-0.01198347  0.20099893 -0.95165014]
[-0.00718827  0.27373067 -0.96177953] label<->ip2 [ 0.03865647  0.24150372 -0.96191406]
In [20]:
 
imshow(solver.net.params['conv1'][0].diff[:, 0].reshape(4, 5, 5, 5)
       .transpose(0, 2, 1, 3).reshape(4*5, 5*5), cmap='gray')
Out[20]:
<matplotlib.image.AxesImage at 0x7f02bab38b90>
In [86]:
x
 
figure(figsize=(10, 5))
imshow(solver.net.params['conv2'][0].diff[:, 0].reshape(5, 10, 5, 5)
       .transpose(0, 2, 1, 3).reshape(5*5, 10*5), cmap='gray')
Out[86]:
<matplotlib.image.AxesImage at 0x7f02b870a950>
In [84]:
x
figure(figsize=(20, 10))
imshow(solver.test_nets[0].blobs['conv1'].data[:8, :].reshape(8,20,32,56)
           .transpose(0,2,1,3).reshape(8*32, 20*56), cmap='gray')
Out[84]:
<matplotlib.image.AxesImage at 0x7f02b86ff490>
In [82]:
figure(figsize=(50, 25))
imshow(solver.test_nets[0].blobs['conv2'].data[:8, :].reshape(40, 10, 12, 24)
       .transpose(0,2,1,3).reshape(40*12, 10*24), cmap='gray')
Out[82]:
<matplotlib.image.AxesImage at 0x7f02b8c36f50>
In [ ]: