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')
# each output is (batch size, feature dim, spatial dim)
[(k, v.data.shape) for k, v in solver.net.blobs.items()]
# just print the weight sizes (not biases)
[(k, v[0].data.shape) for k, v in solver.net.params.items()]
solver.net.forward() # train net
solver.test_nets[0].forward() # test net (there can be more than one)
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]
solver.step(1)
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')
xxxxxxxxxx
Show the conv1 weights pics.
Then, I will train the model, and log some information.
Type Markdown and LaTeX:
%%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.)
_, ax1 = subplots()
ax1.plot(arange(niter), train_loss)
ax1.set_xlabel('iteration')
ax1.set_ylabel('train loss')
xxxxxxxxxx
**show you the train loss curve.
Type Markdown and LaTeX:
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]
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')
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')
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')
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')