def main():
    parser = argparse.ArgumentParser(description='Visualizes a trained StackedLayers model.')
    parser.add_argument('--name', type = str, default = 'junk',
                        help = 'Name for GitResultsManager results directory (default: junk)')
    #parser.add_argument('--quick', action='store_true', help = 'Enable quick mode (default: off)')
    parser.add_argument('--nodiary', action='store_true', help = 'Disable diary (default: diary is on)')
    parser.add_argument('stackedLayersFilename', type = str,
                        help = 'File where a StackedLayers model was stored, something like stackedLayers.pkl.gz')
    parser.add_argument('command', type = str, default = 'embed', choices = ['visall', 'embed'], nargs='?',
                        help = 'What to do: one of {visall (save all plots), embed (drop into shell)}. Default: embed.')

    args = parser.parse_args()

    resman.start(args.name, diary = not args.nodiary)
    saveDir = resman.rundir

    print 'Loading StackedLayers from %s' % args.stackedLayersFilename
    sl = loadFromPklGz(args.stackedLayersFilename)

    print 'Loaded these StackedLayers:'
    sl.printStatus()

    if args.command == 'embed':
        embed()
    elif args.command == 'visall':
        sl.visAll(saveDir)
    else:
        print 'Unknown command:', args.command

    resman.stop()
Ejemplo n.º 2
0
def main():
    resman.start('junk', diary = True)

    params = {}
    randomParams = False
    if randomParams:
        params['hiddenISize'] = random.choice((2, 4, 6, 8, 10, 15, 20))
        params['hiddenJSize'] = params['hiddenISize']
        params['neighborhoodSize'] = random.choice((.1, .3, .5, .7, 1.0, 1.5, 2.0, 2.5, 3.5, 5.0))
        lambd = exp(random.uniform(log(.0001), log(10)))   # Uniform in log space
        params['lambd'] = round(lambd, 1-int(floor(log10(lambd))))  # Just keep two significant figures
        params['randSeed'] = int(random.uniform(0,9999))
        #params['dataWidth'] = random.choice((2, 4))   # just quick
        #params['dataWidth'] = random.choice((2, 3, 4, 6, 10, 15, 20, 25, 28))
        params['dataWidth'] = random.choice((2, 3, 4, 6, 10, 15, 20))  # 25 and 28 are incomplete
        params['nColors'] = random.choice((1, 3))
    else:
        params['hiddenISize'] = 15
        params['hiddenJSize'] = params['hiddenISize']
        params['neighborhoodSize'] = 1.0
        params['lambd'] = .026
        params['randSeed'] = 22
        #params['dataWidth'] = random.choice((2, 4))   # just quick
        #params['dataWidth'] = random.choice((2, 3, 4, 6, 10, 15, 20, 25, 28))
        params['dataWidth'] = 10
        params['nColors'] = 3
    params['isColor'] = (params['nColors'] == 3)
    params['imgShape'] = ((params['dataWidth'], params['dataWidth'], 3)
                          if params['isColor'] else
                          (params['dataWidth'], params['dataWidth']))
    params['maxFuncCalls'] = 300
    params['whiten'] = True    # Just false for Space Invaders dataset...
    params['dataCrop'] = None       # Set to None to not crop data...

    paramsRand = params.copy()
    paramsRand['dataLoader'] = 'loadRandomData'
    paramsRand['dataPath'] = ('../data/random/randomu01_train_%02d_50000_%dc.pkl.gz'
                              % (paramsRand['dataWidth'], paramsRand['nColors']))

    paramsData = params.copy()
    #paramsData['dataLoader'] = 'loadAtariData'
    #paramsData['dataPath'] = ('../data/atari/space_invaders_train_%02d_50000_%dc.pkl.gz'
    #                          % (paramsData['dataWidth'], paramsData['nColors']))
    paramsData['dataLoader'] = 'loadUpsonData3'
    paramsData['dataPath'] = ('../data/upson_rovio_3/train_%02d_50000_%dc.pkl.gz'
                              % (paramsData['dataWidth'], paramsData['nColors']))
        

    doRand = False
    if doRand:
        #resultsRand = reliablyRunTest((0, resman.rundir, '00000_rand', paramsRand, os.getcwd(), os.getenv('DISPLAY','')))
        randResultsDir = os.makedirs(resman.rundir, 'rand')
        runTest(randResultsDir, paramsRand)
    #resultsData = reliablyRunTest((0, resman.rundir, '00000_data', paramsData, os.getcwd(), os.getenv('DISPLAY','')))

    runTest(resman.rundir, paramsData)
    
    resman.stop()
def main():
    parser = argparse.ArgumentParser(description='Trains a StackedLayers model.')
    parser.add_argument('layerFilename', type = str,
                        help = 'File defining layers, something like tica-10-15.layers')
    parser.add_argument('trainParamsFilename', type = str,
                        help = 'File defining training parameters, something like tica-10-15.trainparams')
    parser.add_argument('--name', type = str, default = 'junk',
                        help = 'Name for GitResultsManager results directory (default: junk)')
    parser.add_argument('--load', type = str, default = '',
                        help = ('Load a previously created StackedLayers object. This can ' +
                                'be used to resume training a previously checkpointed, ' +
                                'partially trained StackedLayers object (default: none)'))
    parser.add_argument('--maxlayer', type = int, default = -1,
                        help = ('Maximum layer to train, -1 to train all. Can be used to train' +
                                'only a subset of layers in an otherwise deeper model. Default: -1.'))
    parser.add_argument('--quick', action='store_true', help = 'Enable quick mode (default: off)')
    parser.add_argument('--nodiary', action='store_true', help = 'Disable diary (default: diary is on)')

    args = parser.parse_args()

    resman.start(args.name, diary = not args.nodiary)
    saveDir = resman.rundir


    layerDefinitions = importFromFile(args.layerFilename, 'layers')
    trainParams = importFromFile(args.trainParamsFilename, 'trainParams')

    shutil.copyfile(args.layerFilename,       os.path.join(saveDir, 'params.layers'))
    shutil.copyfile(args.trainParamsFilename, os.path.join(saveDir, 'params.trainparams'))

    
    # Experiment: train a few Stacked Layers with different ticas
    assert not args.load, 'Loading does not make sense here.'
    sls = []
    for ii, hiddenWidth in enumerate((8,12,16,20,24,28,32,36,40)):
        treatmentDir = os.path.join(saveDir, 'treatment_%02d_%d' % (ii, hiddenWidth))
        os.mkdir(treatmentDir)

        print '\n' * 4 + '*' * 40
        print 'Treatment %d, width %d (results in %s)' % (ii, hiddenWidth, treatmentDir)
        print '*' * 40

        assert layerDefinitions[2]['type'] == 'tica'

        layerDefinitions[2]['hiddenSize'] = (hiddenWidth, hiddenWidth)
        
        print 'Creating new StackedLayers object'
        sl = StackedLayers(layerDefinitions)

        sl.printStatus()

        sl.train(trainParams, saveDir = treatmentDir, quick = args.quick, maxlayer = args.maxlayer)
        sls.append(sl)

    fileFinal = os.path.join(saveDir, 'multiStackedLayers.pkl.gz')
    saveToFile(fileFinal, sls)

    resman.stop()
def main():
    dirs = [name for name in os.listdir('results') if os.path.isdir(os.path.join('results', name))]
    print 'last few results:'
    for dir in sorted(dirs)[-10:]:
        print '  ' + dir

    resman.start('junk', diary = False)
    saveDir = resman.rundir
    
    embed()
    
    resman.stop()
def main():
    resman.start('junk', diary = False)

    #l1tica  = loadFromPklGz('results/130402_033310_44cc757_master_psearchTica_UP/00022_data/tica.pkl.gz')
    l1tica  = loadFromPklGz('results/130406_184751_3d90386_rapidhacks_upson3_1c_l1/tica.pkl.gz')   # 1c Upson3
    #layer1Whitener = loadFromPklGz('../data/upson_rovio_2/white/train_10_50000_1c.whitener.pkl.gz')
    layer1Whitener = loadFromPklGz('../data/upson_rovio_3/white/train_10_50000_1c.whitener.pkl.gz')

    layerSizePlan = [10, 15, 23, 35, 53, 80, 120, 180]

    stackedTica = StackedTICA(l1tica, layer1Whitener, '../data/upson_rovio_3/imgfiles/',
                              layerSizePlan = layerSizePlan,
                              isColor = False,
                              saveDir = resman.rundir)

    if False:
        print 'JUST DEBUG...'

        pdb.set_trace()
        
        tica = stackedTica.ticas[0]
        pdb.set_trace()
        return
    #data,labels,strings = loadUpsonData3('../data/upson_rovio_3/train_10_50000_1c.pkl.gz')
    #data = loadFromPklGz('../data/upson_rovio_3/white/train_10_50000_1c.white.pkl.gz')
    #stackedTica.plotResults(resman.rundir, stackedTica.ticas[0], data, (10,10), (15,15))
    
    #pdb.set_trace()

    params = {}
    params['hiddenISize'] = 15
    params['hiddenJSize'] = params['hiddenISize']
    params['neighborhoodSize'] = 1.0
    params['lambd'] = .026
    params['randSeed'] = 0
    #params['dataWidth'] = 10
    #params['nColors'] = 1
    #params['isColor'] = (params['nColors'] == 3)
    #params['imgShape'] = ((params['dataWidth'], params['dataWidth'], 3)
    #                      if params['isColor'] else
    #                      (params['dataWidth'], params['dataWidth']))
    params['maxFuncCalls'] = 3
    #params['whiten'] = True    # Just false for Space Invaders dataset...
    params['dataCrop'] = None       # Set to None to not crop data...
    #params['dataCrop'] = 10000       # Set to None to not crop data...

    stackedTica.learnNextLayer(params)
    #print 'HACK FOR DEBUG'
    saveToFile(os.path.join(resman.rundir, 'stackedTica.pkl.gz'), stackedTica)    # save learned model
    
    resman.stop()
Ejemplo n.º 6
0
def main():
    print('This is not logged')

    resman.start('demo-GRM-module-run')

    for ii in range(3):
        print('This is logged', ii)
        print('This is logged (to stderr)', ii, file=sys.stderr)
        sleep(1)
    with open(resman.rundir + '/output_file_1.txt', 'w') as ff:
        ff.write('test output to file in results directory\n')

    resman.stop()

    print('Run finished')
Ejemplo n.º 7
0
def main():
    print('This is not logged')

    resman.start('demo-GRM-module-run')

    for ii in range(3):
        print('This is logged', ii)
        print('This is logged (to stderr)', ii, file=sys.stderr)
        sleep(1)
    with open(resman.rundir + '/output_file_1.txt', 'w') as ff:
        ff.write('test output to file in results directory\n')

    resman.stop()

    print('Run finished')
Ejemplo n.º 8
0
def main():
    dirs = [
        name for name in os.listdir('results')
        if os.path.isdir(os.path.join('results', name))
    ]
    print 'last few results:'
    for dir in sorted(dirs)[-10:]:
        print '  ' + dir

    resman.start('junk', diary=False)
    saveDir = resman.rundir

    embed()

    resman.stop()
def main():
    parser = argparse.ArgumentParser(
        description='Visualizes a trained StackedLayers model.')
    parser.add_argument(
        '--name',
        type=str,
        default='junk',
        help='Name for GitResultsManager results directory (default: junk)')
    #parser.add_argument('--quick', action='store_true', help = 'Enable quick mode (default: off)')
    parser.add_argument('--nodiary',
                        action='store_true',
                        help='Disable diary (default: diary is on)')
    parser.add_argument(
        'stackedLayersFilename',
        type=str,
        help=
        'File where a StackedLayers model was stored, something like stackedLayers.pkl.gz'
    )
    parser.add_argument(
        'command',
        type=str,
        default='embed',
        choices=['visall', 'embed'],
        nargs='?',
        help=
        'What to do: one of {visall (save all plots), embed (drop into shell)}. Default: embed.'
    )

    args = parser.parse_args()

    resman.start(args.name, diary=not args.nodiary)
    saveDir = resman.rundir

    print 'Loading StackedLayers from %s' % args.stackedLayersFilename
    sl = loadFromPklGz(args.stackedLayersFilename)

    print 'Loaded these StackedLayers:'
    sl.printStatus()

    if args.command == 'embed':
        embed()
    elif args.command == 'visall':
        sl.visAll(saveDir)
    else:
        print 'Unknown command:', args.command

    resman.stop()
Ejemplo n.º 10
0
def main():
    parser = argparse.ArgumentParser(description='Visualize performance of different human-activity-detection runs using the generated avg_pr.model.c0.1.e0.01.w3 files (or similar)')
    parser.add_argument('--name', type = str, default = 'junk',
                        help = 'Name for GitResultsManager results directory (default: junk)')
    parser.add_argument('--quick', action='store_true', help = 'Enable quick mode (default: off)')
    parser.add_argument('--nodiary', action='store_true', help = 'Disable diary (default: diary is on)')

    parser.add_argument('avg_pr_model_file', type = str, nargs = '+',
                        help = 'Which avg_pr.model.c0.1.e0.01.w3 (or similar) files to load. Must give at least one.')

    args = parser.parse_args()

    resman.start(args.name, diary = not args.nodiary)

    visPerf(saveDir = resman.rundir, modelFiles = args.avg_pr_model_file)
    
    resman.stop()
def main():
    parser = argparse.ArgumentParser(description='Makes features for the human activity deteciton dataset. Example usage:\n./humanObjectFeatures.py /path/to/data_obj_feats.txt')
    parser.add_argument('--name', type = str, default = 'junk',
                        help = 'Name for GitResultsManager results directory (default: junk)')
    parser.add_argument('--quick', action='store_true', help = 'Enable quick mode (default: off)')
    parser.add_argument('--nodiary', action='store_true', help = 'Disable diary (default: diary is on)')

    #parser.add_argument('stackedLayersFilename', type = str,
    #                    help = 'File where a StackedLayers model was stored, something like stackedLayers.pkl.gz')
    #parser.add_argument('command', type = str, default = 'embed', choices = ['visall', 'embed'], nargs='?',
    #                    help = 'What to do: one of {visall (save all plots), embed (drop into shell)}. Default: embed.')

    parser.add_argument('--stackedlayers', type = str, default = '',
                        help = 'Path to a *.pkl.gz file containing a pickeled StackedLayers object to load (default: None)')
    parser.add_argument('--fdata', type = str, default = '',
                        help = 'Path to a "..../formatted/data/method_name" directory containing files like 0510175829_1.txt. Needed only if adding truth labels. (default: None)')
    parser.add_argument('--outfile', type = str, default = 'data_objs_feats_plus.txt',
                        help = 'What to name the output file (default: data_objs_feats_plus.txt)')
    parser.add_argument('dataDir', type = str, default = 'data',
                        help = 'Where to look for the "by_id" directory')
    parser.add_argument('data_obj_feats_file', type = str,
                        help = 'Which data_objs_feats.txt file to load')

    args = parser.parse_args()

    resman.start(args.name, diary = not args.nodiary)
    saveDir = resman.rundir

    #print 'Loading StackedLayers from %s' % args.stackedLayersFilename
    #sl = loadFromPklGz(args.stackedLayersFilename)
    #print 'Loaded these StackedLayers:'
    #sl.printStatus()

    stackedLayers = None
    if args.stackedlayers:
        stackedLayers = loadFromPklGz(args.stackedlayers)

    makeFeats(dataDir = args.dataDir, featsFilename = args.data_obj_feats_file,
              saveDir = saveDir, outputFilename = args.outfile, quick = args.quick,
              stackedLayers = stackedLayers, formattedDataDir = args.fdata,
              featsBase = True, featsConst = 0, featsRand = 0, featsSL = False, featsTruth = False)
    
    resman.stop()
def main():
    resman.start('junk', diary = False)

    stica = loadFromPklGz('results/130407_132841_76b6586_rapidhacks_upson3_1c_l2_first/stackedTica_mod.pkl.gz')
    layer1Whitener = loadFromPklGz('../data/upson_rovio_3/white/train_10_50000_1c.whitener.pkl.gz')
    
    layerSizePlan = [10, 15, 23, 35, 53, 80, 120, 180]

    visLayer = 1

    largeSampleMatrix, labelMatrix, labelStrings = cached(randomSampleMatrixWithLabels, trainFilter,
                                                          seed = 0, color = False,
                                                          Nw = layerSizePlan[visLayer], Nsamples = 50000)

    seed = 0
    Nw = layerSizePlan[visLayer-1]             # e.g. 10
    Nwbig = layerSizePlan[visLayer]            # e.g. 15
    Nwshift = Nwbig - Nw                       # e.g. 15 - 10 = 5
    Nsamples = 1000
    temp = getBigAndSmallerSamples(trainFilter, layer1Whitener, seed, False, Nw, Nwshift, Nsamples)
    largeSampleMatrix, stackedSmall, stackedSmallWhite, labelMatrix, labelStrings = temp

    pooled = stica.getRepresentation(largeSampleMatrix)
    
    plotTopActivations(pooled, largeSampleMatrix, (Nwbig,Nwbig), resman.rundir, nActivations = 50, nSamples = 20)

    pl = (pooled.T - pooled.mean(1)).T
    for ii in range(len(labelStrings)):
        print 'finding top for', labelStrings[ii]
        if labelMatrix[ii,:].sum() == 0:
            print '  skipping, no examples'
            continue
        avgActivationForClass = (pl * labelMatrix[ii,:]).mean(1)
        sortIdx = argsort(avgActivationForClass)
        topNeurons = sortIdx[-1:-(50+1):-1]
        plotTopActivations(pooled[topNeurons,:], largeSampleMatrix, (Nwbig,Nwbig), resman.rundir,
                           nActivations = 50, nSamples = 20, prefix = 'topfor_%s' % labelStrings[ii])
        
    resman.stop()
def main():
    parser = argparse.ArgumentParser(description='Trains a StackedLayers model.')
    parser.add_argument('layerFilename', type = str,
                        help = 'File defining layers, something like tica-10-15.layers')
    parser.add_argument('trainParamsFilename', type = str,
                        help = 'File defining training parameters, something like tica-10-15.trainparams')
    parser.add_argument('--name', type = str, default = 'junk',
                        help = 'Name for GitResultsManager results directory (default: junk)')
    parser.add_argument('--load', type = str, default = '',
                        help = ('Load a previously created StackedLayers object. This can ' +
                                'be used to resume training a previously checkpointed, ' +
                                'partially trained StackedLayers object (default: none)'))
    parser.add_argument('--quick', action='store_true', help = 'Enable quick mode (default: off)')
    parser.add_argument('--nodiary', action='store_true', help = 'Disable diary (default: diary is on)')

    args = parser.parse_args()

    resman.start(args.name, diary = not args.nodiary)
    saveDir = resman.rundir


    layerDefinitions = importFromFile(args.layerFilename, 'layers')
    trainParams = importFromFile(args.trainParamsFilename, 'trainParams')

    shutil.copyfile(args.layerFilename,       os.path.join(saveDir, 'params.layers'))
    shutil.copyfile(args.trainParamsFilename, os.path.join(saveDir, 'params.trainparams'))

    if args.load:
        print 'Loading StackedLayers object from %s' % args.load
        sl = loadFromPklGz(args.load)
    else:
        print 'Creating new StackedLayers object'
        sl = StackedLayers(layerDefinitions)

    sl.printStatus()

    sl.train(trainParams, saveDir = saveDir, quick = args.quick)

    resman.stop()
Ejemplo n.º 14
0
from util.plotting import tile_raster_images
from util.dataLoaders import loadFromPklGz, saveToFile



if __name__ == '__main__':
    resman.start('junk', diary = False)

    data = loadFromPklGz('../data/upson_rovio_2/train_10_50000_1c.pkl.gz')
    data = data.T   # Make into one example per column
    #data = data[:,:5000]      # HACK!!!!!!!!!
    
    nFeatures = 100
    lambd = .05
    neighborhoodSize = 1.5
    print '\nChosen TICA parameters'
    
    for key in ['nFeatures', 'lambd']:
        print '  %20s: %s' % (key, locals()[key])
    
    random.seed(0)
    rica = RICA(imgShape = (10, 10),
                nFeatures = nFeatures,
                lambd = lambd,
                epsilon = 1e-5,
                saveDir = resman.rundir)
    rica.run(data, maxFun = 300, whiten = True, plotEvery = 50)


    resman.stop()
def main():
    resman.start('junk', diary=False)

    useIpython = True
    if useIpython:
        client = Client(profile='ssh')
        #client = Client()
        print 'IPython worker ids:', client.ids
        balview = client.load_balanced_view()

    resultsFilename = os.path.join(resman.rundir, 'allResults.pkl.gz')

    NN = 1000
    allResults = [[None, None] for ii in range(NN)]

    experiments = []
    cwd = os.getcwd()
    disp = os.environ['DISPLAY']
    for ii in range(NN):
        params = {}
        random.seed(ii)
        params['hiddenISize'] = random.choice((2, 4, 6, 8, 10, 15, 20))
        params['hiddenJSize'] = params['hiddenISize']
        params['neighborhoodSize'] = random.choice(
            (.1, .3, .5, .7, 1.0, 1.5, 2.0, 2.5, 3.5, 5.0))
        lambd = exp(random.uniform(log(.0001),
                                   log(10)))  # Uniform in log space
        params['lambd'] = round(
            lambd,
            1 - int(floor(log10(lambd))))  # Just keep two significant figures
        params['randSeed'] = ii
        params['maxFuncCalls'] = 300
        #params['dataWidth'] = random.choice((2, 4))   # just quick
        #params['dataWidth'] = random.choice((2, 3, 4, 6, 10, 15, 20, 25, 28))
        params['dataWidth'] = random.choice(
            (2, 3, 4, 6, 10, 15, 20))  # 25 and 28 are incomplete
        params['nColors'] = random.choice((1, 3))
        params['isColor'] = (params['nColors'] == 3)
        params['imgShape'] = ((params['dataWidth'], params['dataWidth'],
                               3) if params['isColor'] else
                              (params['dataWidth'], params['dataWidth']))
        params['whiten'] = False  # Just false for Space Invaders dataset...
        params['dataCrop'] = None  # Set to None to not crop data...

        paramsRand = params.copy()
        paramsRand['dataLoader'] = 'loadRandomData'
        paramsRand['dataPath'] = (
            '../data/random/randomu01_train_%02d_50000_%dc.pkl.gz' %
            (paramsRand['dataWidth'], paramsRand['nColors']))

        paramsData = params.copy()
        paramsData['dataLoader'] = 'loadAtariData'
        paramsData['dataPath'] = (
            '../data/atari/space_invaders_train_%02d_50000_%dc.pkl.gz' %
            (paramsData['dataWidth'], paramsData['nColors']))
        #paramsData['dataLoader'] = 'loadUpsonData'
        #paramsData['dataPath'] = ('../data/upson_rovio_2/train_%02d_50000_%dc.pkl.gz'
        #                          % (paramsData['dataWidth'], paramsData['nColors']))

        if not useIpython:
            resultsRand = reliablyRunTest(resman.rundir, '%05d_rand' % ii,
                                          paramsRand)

            allResults[ii][0] = {'params': paramsRand, 'results': resultsRand}
            tmpFilename = os.path.join(resman.rundir,
                                       '.tmp.%f.pkl.gz' % time.time())
            saveToFile(tmpFilename, allResults)
            os.rename(tmpFilename, resultsFilename)

            resultsData = reliablyRunTest(resman.rundir, '%05d_data' % ii,
                                          paramsData)

            allResults[ii][1] = {'params': paramsData, 'results': resultsData}
            tmpFilename = os.path.join(resman.rundir,
                                       '.tmp.%f.pkl.gz' % time.time())
            saveToFile(tmpFilename, allResults)
            os.rename(tmpFilename, resultsFilename)
        else:
            experiments.append(((ii, 0), resman.rundir, '%05d_rand' % ii,
                                paramsRand, cwd, disp))
            experiments.append(((ii, 1), resman.rundir, '%05d_data' % ii,
                                paramsData, cwd, disp))

    # Start all jobs
    jobMap = balview.map_async(reliablyRunTest, experiments, ordered=False)
    #jobMap = balview.map_async(reliablyRunTest, range(10), ordered = False)
    for ii, returnValues in enumerate(jobMap):
        testId, params, results = returnValues
        print ii, 'Job', testId, 'finished.'
        allResults[testId[0]][testId[1]] = {
            'params': params,
            'results': results
        }
        tmpFilename = os.path.join(resman.rundir,
                                   '.tmp.%f.pkl.gz' % time.time())
        saveToFile(tmpFilename, allResults)
        os.rename(tmpFilename, resultsFilename)
        #pdb.set_trace()

    print 'Finished all jobs.'
    resman.stop()
def main():
    parser = argparse.ArgumentParser(
        description='Trains a StackedLayers model.')
    parser.add_argument(
        'layerFilename',
        type=str,
        help='File defining layers, something like tica-10-15.layers')
    parser.add_argument(
        'trainParamsFilename',
        type=str,
        help=
        'File defining training parameters, something like tica-10-15.trainparams'
    )
    parser.add_argument(
        '--name',
        type=str,
        default='junk',
        help='Name for GitResultsManager results directory (default: junk)')
    parser.add_argument(
        '--load',
        type=str,
        default='',
        help=('Load a previously created StackedLayers object. This can ' +
              'be used to resume training a previously checkpointed, ' +
              'partially trained StackedLayers object (default: none)'))
    parser.add_argument(
        '--maxlayer',
        type=int,
        default=-1,
        help=(
            'Maximum layer to train, -1 to train all. Can be used to train' +
            'only a subset of layers in an otherwise deeper model. Default: -1.'
        ))
    parser.add_argument('--quick',
                        action='store_true',
                        help='Enable quick mode (default: off)')
    parser.add_argument('--nodiary',
                        action='store_true',
                        help='Disable diary (default: diary is on)')

    args = parser.parse_args()

    resman.start(args.name, diary=not args.nodiary)
    saveDir = resman.rundir

    layerDefinitions = importFromFile(args.layerFilename, 'layers')
    trainParams = importFromFile(args.trainParamsFilename, 'trainParams')

    shutil.copyfile(args.layerFilename, os.path.join(saveDir, 'params.layers'))
    shutil.copyfile(args.trainParamsFilename,
                    os.path.join(saveDir, 'params.trainparams'))

    # Experiment: train a few Stacked Layers with different ticas
    assert not args.load, 'Loading does not make sense here.'
    sls = []
    for ii, hiddenWidth in enumerate((8, 12, 16, 20, 24, 28, 32, 36, 40)):
        treatmentDir = os.path.join(saveDir,
                                    'treatment_%02d_%d' % (ii, hiddenWidth))
        os.mkdir(treatmentDir)

        print '\n' * 4 + '*' * 40
        print 'Treatment %d, width %d (results in %s)' % (ii, hiddenWidth,
                                                          treatmentDir)
        print '*' * 40

        assert layerDefinitions[2]['type'] == 'tica'

        layerDefinitions[2]['hiddenSize'] = (hiddenWidth, hiddenWidth)

        print 'Creating new StackedLayers object'
        sl = StackedLayers(layerDefinitions)

        sl.printStatus()

        sl.train(trainParams,
                 saveDir=treatmentDir,
                 quick=args.quick,
                 maxlayer=args.maxlayer)
        sls.append(sl)

    fileFinal = os.path.join(saveDir, 'multiStackedLayers.pkl.gz')
    saveToFile(fileFinal, sls)

    resman.stop()
def main():
    parser = argparse.ArgumentParser(
        description=
        'Makes features for the human activity deteciton dataset. Example usage:\n./humanObjectFeatures.py /path/to/data_obj_feats.txt'
    )
    parser.add_argument(
        '--name',
        type=str,
        default='junk',
        help='Name for GitResultsManager results directory (default: junk)')
    parser.add_argument('--quick',
                        action='store_true',
                        help='Enable quick mode (default: off)')
    parser.add_argument('--nodiary',
                        action='store_true',
                        help='Disable diary (default: diary is on)')

    #parser.add_argument('stackedLayersFilename', type = str,
    #                    help = 'File where a StackedLayers model was stored, something like stackedLayers.pkl.gz')
    #parser.add_argument('command', type = str, default = 'embed', choices = ['visall', 'embed'], nargs='?',
    #                    help = 'What to do: one of {visall (save all plots), embed (drop into shell)}. Default: embed.')

    parser.add_argument(
        '--stackedlayers',
        type=str,
        default='',
        help=
        'Path to a *.pkl.gz file containing a pickeled StackedLayers object to load (default: None)'
    )
    parser.add_argument(
        '--fdata',
        type=str,
        default='',
        help=
        'Path to a "..../formatted/data/method_name" directory containing files like 0510175829_1.txt. Needed only if adding truth labels. (default: None)'
    )
    parser.add_argument(
        '--outfile',
        type=str,
        default='data_objs_feats_plus.txt',
        help='What to name the output file (default: data_objs_feats_plus.txt)'
    )
    parser.add_argument('dataDir',
                        type=str,
                        default='data',
                        help='Where to look for the "by_id" directory')
    parser.add_argument('data_obj_feats_file',
                        type=str,
                        help='Which data_objs_feats.txt file to load')

    args = parser.parse_args()

    resman.start(args.name, diary=not args.nodiary)
    saveDir = resman.rundir

    #print 'Loading StackedLayers from %s' % args.stackedLayersFilename
    #sl = loadFromPklGz(args.stackedLayersFilename)
    #print 'Loaded these StackedLayers:'
    #sl.printStatus()

    stackedLayers = None
    if args.stackedlayers:
        stackedLayers = loadFromPklGz(args.stackedlayers)

    makeFeats(dataDir=args.dataDir,
              featsFilename=args.data_obj_feats_file,
              saveDir=saveDir,
              outputFilename=args.outfile,
              quick=args.quick,
              stackedLayers=stackedLayers,
              formattedDataDir=args.fdata,
              featsBase=True,
              featsConst=0,
              featsRand=0,
              featsSL=False,
              featsTruth=False)

    resman.stop()