Example #1
0
def trainCNN(x,y,solverDir,cellIdx):
    # parse Caffe's param prototxt    
    netDir,solverFn = os.path.split(solverDir)           
    projDir = os.getcwd()
    if len(netDir)>0:
        os.chdir(netDir)
    
    solverParam = caffe_pb2.SolverParameter()
    text_format.Merge(open(solverFn).read(),solverParam)
    
    netFn = solverParam.net
    netParam = caffe_pb2.NetParameter()
    text_format.Merge(open(netFn).read(),netParam)
           
    batchDim = utils.infer_data_dimensions(netFn)
    print('[train]: batch shape: %s' %str(batchDim))
    
    preDir = str(solverParam.snapshot_prefix)   # unicode ---> str
    outDir = os.path.join(projDir,preDir)
    if os.path.isdir(outDir):
        os.mkdir(outDir)
        
    print('[train]: training data shape: %s'  %(str(x.shape)) )
    
    # Create the caffe solover
    solver = caffe.SGDSolver(solverFn)
    for name, blobs in solver.net.params.iteritems():
        for bIdx, b in enumerate(blobs):
            print("%s[%d] : %s" %( name,bIdx,b.data.shape))
    
    GPU = solverParam.solver_mode  # cpu 0 , gpu 1
    
    if GPU :
        isModeCPU = 0
        gpuId = 0
    else:
        isModeCPU = (solverParam.solver_mode == solverParam.SolverMode.Value('CPU'))
        gpuId = 0
    # different edition has different caffe API
    try:
        if not isModeCPU:
            caffe.set_mode_gpu()
            caffe.set_device(gpuId)
        else:
            caffe.set_mode_cpu()
#            caffe.set_phase_train()        # Needn't set phase as Train
    except AttributeError:
        if not isModeCPU:
            caffe.set_mode_gpu()
#            caffe.set_device(gpuId)
            solver.net.set_device(gpuId)        
        else:
            solver.net.set_mode_cpu()
            solver.net.set_phase_train()
    
    losses, acc = train_loop(solver, x, y,  solverParam, batchDim, outDir)
    
    solver.net.save('%d_final.caffemodel'%(cellIdx))
#    np.save(os.path.join(outDir, '%s_losses' % outDir), losses)
#    np.save(os.path.join(outDir, '%s_acc' % outDir), acc)
    
    print('[train]: ID %d done pretrain!' %(cellIdx))
    
    # change to projDir
    if len(projDir) >0 :
        os.chdir(projDir)
    
    
    return losses, acc
Example #2
0
def testCNN(x, solverDir,cellId):
        
    curDir = os.getcwd()
    netDir, solverFn = os.path.split(solverDir)
    # change to prototext Dirs    
    if len(netDir)>0:
        os.chdir(netDir)
    
    solverParam = caffe_pb2.SolverParameter()
    text_format.Merge(open(solverFn).read(),solverParam)
    
    netFn = str(solverParam.net)
    netParam = caffe_pb2.NetParameter()
    text_format.Merge(open(netFn).read(),netParam)
    
    modelDir = str(cellId)+'_final.caffemodel'

    print( modelDir )
    net = caffe.Net(netFn,modelDir, caffe.TEST)
    for name, blobs in net.params.iteritems():
        print("%s:%s" %(name,blobs[0].data.shape))
    
    GPU = solverParam.solver_mode  # cpu 0 , gpu 1    
    if GPU :
        isModeCPU = 0
        gpuId = 0
    else:
        isModeCPU = (solverParam.solver_mode == solverParam.SolverMode.Value('CPU'))
        gpuId = 0
    # different edition has different caffe API
    try:
        if not isModeCPU:
            caffe.set_mode_gpu()
            caffe.set_device(gpuId)
        else:
            caffe.set_mode_cpu()
#            caffe.set_phase_train()
    except AttributeError:
        if not isModeCPU:
            net.set_mode_gpu()
            net.set_device(gpuId)        
        else:
            net.set_mode_cpu()
            net.set_phase_train()
    
    print("[test:] GPU mode: %s" % GPU )
    
    batchDim = utils.infer_data_dimensions(netFn)
    print("[test:] batch shape:%s" %(batchDim))    
    
    Xi = np.zeros((batchDim[0],1,28,28),dtype=np.float32)
    Yi = np.zeros((batchDim[0],),dtype=np.float32)
    xmean = np.mean(x)            
    x = x - xmean
    maxValue = -1
    
    for idx in utils.testDataGenerator(x,batchDim[0]):         
        # resize 
        for ii in range( 0, min(batchDim[0]-1, np.max(idx)+1) ):
            temp = symc.imresize(Xi[ii,0,:,:],[28,28])
            Xi[ii,0,:,:] = np.float32(temp)
        
        if np.max(idx)<(batchDim[0]-1):
            Xi[idx::,:,:,:] = x[idx::,:,:,:]   # work ? or not
        
        net.set_input_arrays(Xi,Yi)
        rv = net.forward()        
        out = rv['prob']
        out = np.squeeze(out)
        ymax = np.max(out[:,0])  # 0 ???????????????? is positive???
        yidx = np.argmax(out[:,0])
        if ymax>maxValue:
            maxValue = ymax
            yidx = yidx
        # yidx in appended data
        if yidx > batchDim[0]-1:
            yidx = batchDim[0]-1
    
    if len(curDir)>0:
        os.chdir(curDir)
    
    
    return yidx,maxValue
Example #3
0
def  updateTrain(x,y,solverDir,cellIdx):
 # finetune
    projDir = os.getcwd()
    netDir, solverFn = os.path.split(solverDir)
    # change to prototext Dirs    
    if len(netDir)>0:
        os.chdir(netDir)
    
    solverParam = caffe_pb2.SolverParameter()
    text_format.Merge(open(solverFn).read(),solverParam)
   
    netFn = str(solverParam.net)
    netParam = caffe_pb2.NetParameter()
    text_format.Merge(open(netFn).read(),netParam)
    
    modelDir = str(cellIdx)+'_final.caffemodel'
    
    solverParam.max_iter = 10
    print( modelDir )
    solver = caffe.SGDSolver(solverDir)
    solver.net.copy_from(modelDir)

    batchDim = utils.infer_data_dimensions(netFn)
    print('[train]: batch shape: %s' %str(batchDim))
    
    preDir = str(solverParam.snapshot_prefix)   # unicode ---> str
    outDir = os.path.join(projDir,preDir)
    if os.path.isdir(outDir):
        os.mkdir(outDir)
        
    print('[train]: training data shape: %s'  %(str(x.shape)) )
    
    # Create the caffe solover
#    solver = caffe.SGDSolver(solverFn)
    for name, blobs in solver.net.params.iteritems():
        for bIdx, b in enumerate(blobs):
            print("%s[%d] : %s" %( name,bIdx,b.data.shape))
    
    GPU = solverParam.solver_mode  # cpu 0 , gpu 1
    
    if GPU :
        isModeCPU = 0
        gpuId = 0
    else:
        isModeCPU = (solverParam.solver_mode == solverParam.SolverMode.Value('CPU'))
# different edition has different caffe API
    try:
        if not isModeCPU:
            caffe.set_mode_gpu()            
            caffe.set_device(gpuId)
#            solver.net.set_phase_train()
        else:
            caffe.set_mode_cpu()            
#            solver.net.set_phase_train()          # Needn't set phase as Train
    except AttributeError:
        if not isModeCPU:
            solver.net.set_mode_gpu()
#            solver.net.set_phase_train()
#            caffe.set_device(gpuId)        
        else:
            solver.net.set_mode_cpu()
            solver.net.set_phase_train()
    
    losses, acc = train_loop(solver, x, y,  solverParam, batchDim, outDir)    
    solver.net.save('%d_final.caffemodel'%(cellIdx))  
    print('[train]: ID %d done pretrain!' %(cellIdx))    
    
    # change to projDir
    if len(projDir) >0 :
        os.chdir(projDir)

#    niter = 10    
#    train_loss = np.zeros(niter)
#    for it in range(niter):
#        solver.step(1)  # SGD by Caffe        
#    # store the train loss
#        train_loss[it] = solver.net.blobs['loss'].data       
#        if it % 10 == 0:
#            print 'iter %d, finetune_loss=%f' % (it, train_loss[it])
#    print 'done'
    
    return