import osos.chdir('/home/renwh/gaze/renwh/caffe_with_cudnnv3/')import syssys.path.insert(0,'./python')import caffefrom pylab import *%matplotlib inlinecaffe.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 netsolver.test_nets[0].forward() # test net (there can be more than one)x
# we use a little trick to tile the first eight imagesimshow(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')xxxxxxxxxxShow the conv1 weights pics.Then, I will train the model, and log some information.Type Markdown and LaTeX:
%%timeniter = 200test_interval = 25# losses will also be stored in the logtrain_loss = zeros(niter)#test_acc = zeros(int(np.ceil(niter / test_interval)))output = zeros((niter, 8, 3))# the main solver loopfor 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 resultfor 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')