Beispiel #1
0
	def init(self):
		self.y_d = self.parms.y_d.copy()

		# Load Models
		self.models = list()
		for nm in xrange(int(self.parms.num_models)):
			self.models.append(mdl.model(self.parms))

		# Load multimodel setup
		self.multimodels = mmdl.multimodel(float(self.parms.NinSoftmax),float(self.parms.Nout),self.parms.num_models,self.parms.eta_s, self.parms.eta_g)

		self.sdpos = np.zeros((self.parms.Nout,))

		# Reading and setting al the initial parameters
		t1 = self.parms.t1
		dt = self.parms.dt
		delta = self.parms.delta
	   
		self.sysInp = np.zeros((self.parms.sNin, t1 / dt + delta + 1))
		self.sysInp2 = np.zeros((self.parms.Nout, t1 / dt + delta + 1))
		self.sysOutp = np.zeros((self.parms.Nout, t1 / dt + delta + 1))

		self.eeVal = self.sysInp
		self.inited = 1

		self.model_e = np.zeros((self.parms.Nout, self.parms.num_models))
		self.model_outputs = np.zeros((self.parms.Nout, self.parms.num_models,t1 / dt + delta + 1))
		self.h = np.zeros((self.parms.num_models,t1 / dt + delta + 1))
		self.model_doutputs = np.zeros((self.parms.Nout, self.parms.num_models))

		self.i = delta
 
		self.t = 0
Beispiel #2
0
    def __raxml_to_model(self, model_name, param_names,args,s_size):
        raxmlmodelstr=self.__model_to_raxmodelstr(model_name,param_names)
        ##think about changing this so it catches crashes and continues
        rax_cmd=Popen('{raxpath} -f e -m {modelstr} -s {phy_file} -t {starting_tree} -n {output_names} -w {out_path}/{model_name}'.format(
                raxpath=self.raxml_path,
                modelstr=raxmlmodelstr,
                output_names=param_names,
                out_path=self.output,
                model_name=model_name,
                phy_file=self.ifile_name,
                starting_tree=self.stree),
                      
            shell=True,
            stdout=PIPE,
            stderr=PIPE)
				                                      
        rax_out = rax_cmd.communicate()
        full_name=model_name+param_names
        self.raxstdout+='='*80+'\n'+full_name.center(80)+'\n'+'='*80+'\n'
        self.raxstdout+=rax_out[0]

        self.raxstderr+='='*80+'\n'+full_name.center(80)+'\n'+'='*80+'\n'
        self.raxstderr+=rax_out[0]
        
        new_model=model(model_name=model_name,
                        param_names=param_names,
                        rax_name=raxmlmodelstr,
                        args=self.args,
                        s_size=s_size
                        )
        
        return new_model
def main(weights_path, base_path, base_file, style_path, style_file,
         combo_path, img_width, img_height, iterations):
    result_prefix = base_file[:-4] + '_' + style_file[:-4]
    base_img_path = base_path + base_file
    style_img_path = style_path + style_file
    # get tensor representations of images
    base_img = K.variable(preprocess_image(base_img_path,
                                           img_width,
                                           img_height))
    style_img = K.variable(preprocess_image(style_img_path,
                                            img_width,
                                            img_height))
    combo_img = K.placeholder((1, 3, img_width, img_height))
    # combine the 3 images into a single Keras tensor
    input_tensor = K.concatenate([base_img, style_img, combo_img],
                                 axis=0)

    print('Creating painting of {} in the style of {}'.format(base_file[:-4],
                                                              style_file[:-4]))
    print('Loading model with VGG16 network weights...')
    nn = model(weights_path, input_tensor, img_width, img_height)
    loss, grads = calc_loss_grad(nn, combo_img, img_width, img_height)
    evaluate = Evaluator(loss, grads, combo_img, img_width, img_height)
    return optimizer(evaluate, img_width, img_height, combo_path,
                     result_prefix, iterations=iterations)
Beispiel #4
0
def lnlikeHFM(pars, samples, obs, u, extra=False):
    '''
    Generic likelihood function for importance sampling with any number of
    dimensions.
    Now with added jitter parameter (hierarchical)
    obs should be a 2d array of observations. shape = (ndims, nobs)
    u should be a 2d array of uncertainties. shape = (ndims, nobs)
    samples is a 3d array of samples. shape = (ndims, nobs, nsamp)
    if extra == True, the sigma has both a slope and intercept
    Now with a mixture model!
    '''
    ndims, nobs, nsamp = samples.shape
    ypred = model(pars, samples)
    yobs = obs[1, :]
    xobs = obs[0, :]
    yerr = u[1, :]
    ll1 = np.zeros((nobs, nsamp*nobs))
    ll2 = np.zeros((nobs, nsamp*nobs))
    Y, V, P = pars[3], pars[4], pars[5]
    for i in range(nobs):
        if extra:
            inv_sigma2 = 1.0/(yerr[i]**2 + \
                    (pars[2] + pars[3] * model1(pars, xobs[i]))**2 + V)
        else:
            inv_sigma2 = 1.0/(yerr[i]**2 + \
                    (pars[2]*model1(pars, xobs[i]))**2 + V)
        ll1[i, :] = -.5*((yobs[i] - ypred)**2*inv_sigma2) + np.log(inv_sigma2)
        ll2[i, :] = -.5*((yobs[i] - Y)**2*inv_sigma2) + np.log(inv_sigma2)
    lnlike1 = np.logaddexp.reduce(ll1, axis=1)
    lnlike2 = np.logaddexp.reduce(ll2, axis=1)
    loglike = np.sum(np.logaddexp(np.log(1-P) + lnlike1, np.log(P) + lnlike2))
    if np.isfinite(loglike):
        return loglike
    return -np.inf
Beispiel #5
0
def keyring_auth_list(**kwargs):
    """
    List all cephx authorization keys

    CLI Example:

        salt '*' sesceph.auth_list \\
                'cluster_name'='ceph' \\
                'cluster_uuid'='cluster_uuid'
    Notes:

    cluster_name
        Set the cluster name. Defaults to "ceph".

    cluster_uuid
        Set the cluster UUID. Defaults to value found in ceph config file.
    """
    m = model.model(**kwargs)
    u = mdl_updater.model_updater(m)
    u.hostname_refresh()
    try:
        u.defaults_refresh()
    except:
        return {}
    u.load_confg(m.cluster_name)
    u.mon_members_refresh()
    u.auth_list()
    p = presenter.mdl_presentor(m)
    return p.auth_list()
Beispiel #6
0
def pool_del(pool_name, **kwargs):
    """
    List all cephx authorization keys

    CLI Example:

        salt '*' sesceph.pool_del pool_name \
                'cluster_name'='ceph' \
                'cluster_uuid'='cluster_uuid' \
    Notes:

    cluster_name
        Set the cluster name. Defaults to "ceph".

    cluster_uuid
        Set the cluster UUID. Defaults to value found in ceph config file.
    """
    m = model.model(**kwargs)
    u = mdl_updater.model_updater(m)
    u.hostname_refresh()
    try:
        u.defaults_refresh()
    except:
        return {}
    u.load_confg(m.cluster_name)
    u.mon_members_refresh()
    u.pool_list()
    u.pool_del(pool_name)
    return True
def keyring_present_type(**kwargs):
    """
    Check if keyring exists on disk

    CLI Example:

        salt '*' sesceph.keyring_admin_save \\
                '[mon.]\n\tkey = AQA/vZ9WyDwsKRAAxQ6wjGJH6WV8fDJeyzxHrg==\n\tcaps mon = \"allow *\"\n' \\
                'cluster_name'='ceph' \\
                'cluster_uuid'='cluster_uuid'
    Notes:

    cluster_uuid
        Set the cluster UUID. Defaults to value found in ceph config file.

    cluster_name
        Set the cluster name. Defaults to "ceph".
    keyring_type
        Set the keyring type
    """
    keyring_type = kwargs.get("keyring_type")
    if (keyring_type is None):
        raise Error("keyring_type is None")
    m = model.model(**kwargs)
    u = mdl_updater.model_updater(m)
    u.hostname_refresh()
    try:
        u.defaults_refresh()
    except:
        pass
    keyobj = keyring.keyring_facard(m)
    keyobj.key_type = keyring_type
    return keyobj.present()
Beispiel #8
0
    def build_agg_snapshots(self, db='./database'):
        conn = sqlite3.connect(db)
        c = conn.cursor()

        # force model rebuild if created within last n days.
        created_within = 7
        # select models which require rebuilding.        
        cmd = c.execute('select mid, uid, version, created_on, last_updated_on, agg_fx, granularity \
                         from model \
                         where julianday(current_date) - julianday(last_updated_on) >= expires_in or \
                               rebuild = 1 and julianday(current_date) - julianday(last_updated_on) >= earliest_rebuild or \
                               julianday(current_date) - julianday(created_on) <= ?', (created_within,)) 
        r = cmd.fetchall()
        for m in r:
            mdl = model(m[0], m[2], m[6]) 
            # update model # && force deletion existing aggregrate snapshot.
            c.execute('delete from agg_location_snapshot where mid = ?', (mdl.id(), ))
            mdl.inc_version()
            c.execute('update model \
                       set version = ?, last_updated_on = current_date, \
                       nr_matches = 0, nr_successful = 0, streak = 0, last10 = 0 \
                       where mid = ?', (mdl.version(), mdl.id()))
            # rebuid aggregrate snapshot.
            self.__build_agg_snapshot(mdl, c)

        c.close()
        conn.commit()
        conn.close()
Beispiel #9
0
def cluster_quorum(**kwargs):
    """
    Get the cluster status

    CLI Example:

        salt '*' sesceph.cluster_status \\
                'cluster_name'='ceph' \\
                'cluster_uuid'='cluster_uuid'
    Notes:
    Get the cluster quorum status.

    Scope:
    Cluster wide

    Arguments:

    cluster_uuid
        Set the cluster UUID. Defaults to value found in ceph config file.

    cluster_name
        Set the cluster name. Defaults to "ceph".
    """
    m = model.model(**kwargs)
    u = mdl_updater.model_updater(m)
    u.hostname_refresh()
    u.defaults_refresh()
    u.load_confg(m.cluster_name)
    u.mon_members_refresh()
    mur = mdl_updater_remote.model_updater_remote(m)
    can_connect = mur.connect()
    if not can_connect:
        return False
    q = mdl_query.mdl_query(m)
    return q.cluster_quorum()
Beispiel #10
0
def pool_del(pool_name, **kwargs):
    """
    List all cephx authorization keys

    CLI Example:

        salt '*' sesceph.pool_del pool_name \\
                'cluster_name'='ceph' \\
                'cluster_uuid'='cluster_uuid'
    Notes:

    cluster_name
        Set the cluster name. Defaults to "ceph".

    cluster_uuid
        Set the cluster UUID. Defaults to value found in ceph config file.
    """
    m = model.model(**kwargs)
    u = mdl_updater.model_updater(m)
    u.hostname_refresh()
    u.defaults_refresh()
    u.load_confg(m.cluster_name)
    u.mon_members_refresh()
    mur = mdl_updater_remote.model_updater_remote(m)
    can_connect = mur.connect()
    if not can_connect:
        raise Error("Cant connect to cluster.")
    mur.pool_list()
    return mur.pool_del(pool_name)
Beispiel #11
0
def setup():
    import model
    models =[] 
    tmpM = model.model()
    # funcs: (nextCond, prevCond, handleTag, handleData)
    tmpM.push(
        lambda *parg: parg[0] == "div" and ('class', 'threadpost') in parg[1], None, None, None)
    
    tmpM.push(
        lambda *parg: parg[0] == "img" and 1 or ( (parg[0]=="div" and ('class','quote') in parg[1]) and 2),
        lambda *parg: parg[0] == "hr",
        lambda *parg: [v for k,v in parg[1] if k == "id" and ( ('class', 'threadpost') in parg[1] or ('class', 'reply') in parg[1])], 
        None)
    
    tmpM.push(
        None,
        lambda *parg: parg[0] == "img",
        lambda *parg: apply(MyParser.getPicIdFromTURL, [v for k, v in parg[1] if k=="src"]),
        None)
    
    tmpM.push(
        None,
        lambda *parg: parg[0] == "div" and 2,
        None,
        lambda *parg: parg)
    
    models.append(tmpM)
    
    return models
Beispiel #12
0
def cluster_status(**kwargs):
    """
    Get the cluster status

    CLI Example:

        salt '*' sesceph.cluster_status \\
                'cluster_name'='ceph' \\
                'cluster_uuid'='cluster_uuid'
    Notes:
    Get the cluster status including health if in quorum.

    Scope:
    Cluster wide

    Arguments:

    cluster_uuid
        Set the cluster UUID. Defaults to value found in ceph config file.

    cluster_name
        Set the cluster name. Defaults to "ceph".
    """
    m = model.model(**kwargs)
    u = mdl_updater.model_updater(m)
    u.hostname_refresh()
    u.defaults_refresh()
    u.load_confg(m.cluster_name)
    u.mon_members_refresh()
    mur = mdl_updater_remote.model_updater_remote(m)
    can_connect = mur.connect()
    if not can_connect:
        raise Error("Cant connect to cluster.")
    p = presenter.mdl_presentor(m)
    return p.cluster_status()
Beispiel #13
0
def lnlikeHF(pars, samples, obs, u, extra=False):
    '''
    Generic likelihood function for importance sampling with any number of
    dimensions.
    Now with added jitter parameter (hierarchical)
    obs should be a 2d array of observations. shape = (ndims, nobs)
    u should be a 2d array of uncertainties. shape = (ndims, nobs)
    samples is a 3d array of samples. shape = (ndims, nobs, nsamp)
    if extra == True, the sigma has both a slope and intercept
    '''
    ndims, nobs, nsamp = samples.shape
    ll = np.zeros((nobs, nsamp*nobs))
    for i in range(nobs):
        if extra:
            inv_sigma2 = 1.0/(u[1, :][i]**2 + \
                    pars[2]**2 + pars[3] * obs[0, :][i])
        else:
            inv_sigma2 = 1.0/(u[1, :][i]**2 + \
                    (pars[2]*model1(pars, obs[0, :][i]))**2)
        ll[i, :] = -.5*((obs[1, :][i] - model(pars, samples))**2*inv_sigma2) \
                + np.log(inv_sigma2)
    loglike = np.sum(np.logaddexp.reduce(ll, axis=1))
    if np.isfinite(loglike):
        return loglike, loglike
    return -np.inf, None
Beispiel #14
0
def evaluate(image_path, label_path):
	""" Loads network, reads image and returns IOU."""
	# Load image and label
	image = load_image(image_path)
	label = scipy.misc.imread(label_path)
	
	# Define the model
	prediction = model.model(image, drop=False)
	
	# Get a saver
	saver = tf.train.Saver()

	# Launch the graph
	with tf.Session() as sess:
		# Restore variables
		checkpoint_path = tf.train.latest_checkpoint(checkpoint_dir)
		saver.restore(sess, checkpoint_path)
		model.log("Variables restored from:", checkpoint_path)
	
		logits = prediction.eval()
		
		segmentation = post(logits, label, threshold = -1)
		
		iou = IOU(segmentation, label)
		
		print("iou =", iou)
		
	return iou
def main():
    sample_size = int(sys.argv[1])
    train = data_io.read_train()
    print("Data Size:")
    print(train.shape)
    feature_eng(train)
    ## originally sample size = 100000
    train_sample = train[:sample_size]

    ## Train the booking model
    for i in range(0,2):
        if i==0:
            model_name = "Booking"
            response_name = "booking_bool"
            isBook = True
        else:
            model_name = "Click"
            response_name = "click_bool"
            isBook = False
        print("Training the "+model_name+" Classifier...")
        tstart = datetime.now()
        feature_names = get_features(train_sample, isBook)
        print("Using "+str(len(feature_names))+" features...")
        features = train_sample[feature_names].values
        target = train_sample[response_name].values
        classifier = model.model()
        classifier.fit(features, target)
        # print the time interval
        print("Time used,")
        print datetime.now() - tstart
        print("Saving the classifier...")
        tstart = datetime.now()
        data_io.save_model(classifier, isBook)
        print("Time used,")
        print datetime.now() - tstart
Beispiel #16
0
 def __init__(self, **kwargs):
     self.model = model.model(**kwargs)
     self._clear_implementation()
     u = mdl_updater.model_updater(self.model)
     u.ceph_version_refresh()
     q = mdl_query.mdl_query(self.model)
     self.ceph_daemon_user = q.ceph_daemon_user()
Beispiel #17
0
    def __init__(self, config):
        self.config = config
        self.model = model(config)
        self.criterion = nn.PairwiseDistance()
        self.optimizer = optim.Adam(self.model.parameters(), lr=self.config['lr'])

        self.generate_dataset()
Beispiel #18
0
    def __init__(self):

        self.M = model()
        self.V = view()

        self.M.setPaintCallback(self.Paint)
        self.M.setMessageCallback(self.systemMessage)

        self.mkLoad()
        self.mkSelect()
        self.mkFunction()
        self.mkDatabus()
        self.mkAddressbus()
        self.mkMemory()
        self.mkPGM()
        self.mkProgramControls()
        self.mkHALT()

        self.Paint()

        m = "\n\n                    WELCOME TO VIRTUAL MACHINE\n"
        m = m + "                       Memory: " + str(len(self.M.MEMORY.values())) + " bytes\n"
        m = m + "  ==========================================================\n"
        m = m + "Press README on left...."


        self.systemMessage(m)

        self.V.mainloop()
Beispiel #19
0
def main(hps):

    # Initialize Horovod.
    hvd.init()

    # Create tensorflow session
    sess = tensorflow_session()

    # Download and load dataset.
    tf.set_random_seed(hvd.rank() + hvd.size() * hps.seed)
    np.random.seed(hvd.rank() + hvd.size() * hps.seed)

    # Get data and set train_its and valid_its
    train_iterator, test_iterator, data_init = get_data(hps, sess)
    hps.train_its, hps.test_its, hps.full_test_its = get_its(hps)

    # Create log dir
    logdir = os.path.abspath(hps.logdir) + "/"
    if not os.path.exists(logdir):
        os.mkdir(logdir)

    # Create model
    import model
    model = model.model(sess, hps, train_iterator, test_iterator, data_init)

    # Initialize visualization functions
    visualise = init_visualizations(hps, model, logdir)

    if not hps.inference:
        # Perform training
        train(sess, model, hps, logdir, visualise)
    else:
        infer(sess, model, hps, test_iterator)
Beispiel #20
0
 def __init__(self, tf_ckpt_path):
     #init the tensorflow model
     self.x, _ = model.place_holders()
     self.y_conv = model.model(self.x)
     self.sess = tf.InteractiveSession()
     self.sess.run(tf.initialize_all_variables())
     saver = tf.train.Saver(tf.all_variables())
     saver.restore(self.sess, tf_ckpt_path)
 def __init__(self, **kwargs):
     # The path to the service binary
     self.path_service_bin = None
     # what we are starting
     self.ceph_client_id = kwargs.get("name")
     self.service_name = None
     self.model = model.model(**kwargs)
     self.model.init = "systemd"
Beispiel #22
0
 def get_model_func(self):
     modellist=[]
     ppcross=crss.crossSection(self.ppPath)
     counter=0
     for p in self.processes:
         model=mod.model(self.parentspec[counter],p,self.data,self.source,ppcross)
         modellist.append(model.model_val)
         counter+=1
     return modellist
Beispiel #23
0
def test_model():
    import model
    m = model.model()
    
    pos = m.__dict__["pos"]
    assert m.__dict__["pos"] == 0
    m.next();
    assert m.__dict__["pos"] == 0
    m.prev()
    assert m.__dict__["pos"] == 0
    m.prev()
    assert m.__dict__["pos"] == 0
    assert m.getHandleData() == None
    assert m.getHandleTag() == None
    stack.append("\tmodel init")
    
    f1, f2 = lambda: 1,lambda: 2
    f3, f4 = lambda: 3,lambda: 4
    m.push(f1)
    assert m.__dict__["stack"][0] == (f1,)
    m.push(f2, f1)
    assert m.__dict__["stack"][1] == (f2, f1)
    m.push(f1, f2, f3)
    assert m.__dict__["stack"][2] == (f1, f2, f3)
    m.push(f1, f2, f3, f4)
    assert m.__dict__["stack"][3] == (f1, f2, f3, f4)
    stack.append("\tmodel push works")
    
    m.next()
    assert m.__dict__["pos"] == 1
    assert m.getHandleData() == None
    assert m.getHandleTag() == None
    stack.append("\tmodel get handle test 1") 
    
    m.next()
    assert m.__dict__["pos"] == 3
    stack.append("\tmodel next test 1")
    m.prev()
    assert m.__dict__["pos"] == 1
    stack.append("\tmodel prev test 1")
    
    m.next(); m.next()
    assert m.__dict__["pos"] == 4
    stack.append("\tmodel next test 2")
    m.prev(); m.prev()
    assert m.__dict__["pos"] == 4
    m.push(f1, f1, f1, f1)
    assert len(m.__dict__["stack"]) == 5
    m.prev(); m.prev()
    assert m.__dict__["pos"] == 1
    stack.append("\tmodel prev test 2")
    
    m.next()
    assert m.__dict__["pos"] == 3
    assert m.getHandleTag() == f3
    assert m.getHandleData() == f4
    stack.append("\tmodel get handle test 2")
Beispiel #24
0
def ceph_version():
    """
    Get the version of ceph installed
    """
    m = model.model()
    u = mdl_updater.model_updater(m)
    u.ceph_version_refresh()
    p = presenter.mdl_presentor(m)
    return p.ceph_version()
Beispiel #25
0
    def step(hparams, tokens, past=None):
        lm_output = model.model(hparams=hparams, X=tokens, past=past, reuse=tf.AUTO_REUSE)

        logits = lm_output['logits'][:, :, :hparams.n_vocab]
        presents = lm_output['present']
        presents.set_shape(model.past_shape(hparams=hparams, batch_size=batch_size))
        return {
            'logits': logits,
            'presents': presents,
        }
Beispiel #26
0
def purge(**kwargs):
    """
    purge ceph configuration on the node

    CLI Example:

        salt '*' sesceph.purge
    """
    m = model.model(**kwargs)
    purger.purge(m, **kwargs)
Beispiel #27
0
def inject(theta, kid):
    # load data
    x, y = np.genfromtxt("%s/%s_rvs.txt" % (DIR, kid)).T
    if kid == "HD185":
        x, y = np.genfromtxt("%s/%s_rvs_100.txt" % (DIR, kid)).T
    yerr = np.ones_like(y)*2.  # make up uncertainties
    M1, M1_err = np.genfromtxt("%s/params/%s_mass.txt"
                               % (DIR, kid)).T
    ecc = 0.
    rv = model(theta, x, yerr, M1, ecc)  # compute planet rvs
    noisy_rv = white_noise(y+rv, yerr[0])  # add planet to lc with noise
    return x, noisy_rv, yerr
Beispiel #28
0
 def get_users(self, s_day, model=model.OrderModel, sql=""):
     arg = [s_day]
     result = self.get_all(sql, arg)
     # logging.DEBUG(str(sql))
     users_list = []
     if not result:
         return  False
     for row in result:
         o_user_model = model()
         o_user_model.setValue(row[0], int(row[1]), int(row[2]), int(row[3]))
         users_list.append(o_user_model)
     return users_list
Beispiel #29
0
    def fit(self,conffile=False,initial=[]):
        newpara=[]
        parerror=[]
        chi2s=[]
        speclist=[]
        modelvallist=[]

        counter=0
        for p in self.proc:
            print "Running process No.%i"%(counter)
            print "starting setting initial parameters for %s spectrum"%(p)
            self.modellist.append(mod.model(self.spec[counter],p,self.data,self.source,self.ppcrs))
            self.model=self.modellist[counter].model_val

            if conffile:
                setup=self.conf['%s_%s_%i'%(p,self.spec[counter].funcName,counter)]
                npar=len(self.ipar[counter])
                counter+=1
                #m=minuit.Minuit(self.chi2(npar),**setup)
                #m.tol=1.e2
            else:
                if initial==[]:
                    initial=self.ipar[counter]
                npar=len(initial)
                print 'number of intial parameters %i'%npar
                setup={}
                counter=0
                parname=['a','b','c','d','e','f','g','h']
                for i in initial:
                    setup[parname[counter]]=i
                    setup['error_%s'%parname[counter]]=0.01
                    limits=ut.make_para_limits(i)
                    setup['limit_%s'%parname[counter]]=limits
                    counter+=1
            m=minuit.Minuit(self.chi2(npar),**setup)
            m.tol=1.e2
            ''' start the fitting process'''    
            print "initial parameters set starting migrad"
            m.migrad()
            # m.hesse()
            newpara.append(self.conv_mval2list(m.values))
            parerror.append(self.conv_mval2list(m.errors))
            chi2s.append(m.fval)
            modelvallist.append(self.model(self.conv_mval2list(m.values)))
            speclist.append(self.spec)
            print 'fitting of process %s done chi^2: %f'%(p,chi2s[len(chi2s)-1])
            

        print 'all %i processes fitted \n '%(counter)
        print '\n\n'
        
        return newpara,parerror,chi2s,modelvallist,speclist
Beispiel #30
0
def main(_):
    if not os.path.exists(args.ckpt_dir):
        os.makedirs(args.ckpt_dir)
        print(args.ckpt_dir)
    weightedModel = model(ckpt_dir=args.ckpt_dir, batch_size=args.batch_size, margin=args.margin, weightFile=args.weightFile,
            sketch_train_list=args.sketch_train_list, sketch_test_list=args.sketch_test_list, shape_list=args.shape_list,
            num_views_shape=args.num_views_shape, learning_rate=args.learning_rate, momentum=args.momentum,
            logdir=args.logdir, phase=args.phase, inputFeaSize=args.inputFeaSize, outputFeaSize=args.outputFeaSize, maxiter=args.maxiter)
    if args.phase == 'train':
        weightedModel.train()
    elif args.phase == 'evaluation':
        print("evaluating using weighted feature")
        weightedModel.evaluation()
Beispiel #31
0
from model import model
import time

settings = {
    "filepath": "../data/amazon.csv",
    "BATCH_SIZE": 64,
    "embedding_dim": 256,
    "units": 512,
    "EPOCHS": 15,
    "data_size": 1000,
    "checkpoint_dir": "../checkpoints"
}
# data_size limits the amount of lines that are used. None = full data

time_start = time.time()
model().trainModel(settings)
time_end = time.time()
duration = round((time_end - time_start) / 60, 2)
print("Elapsed time in minutes: {}".format(duration))
Beispiel #32
0
    def load(self):
        my_model = model(self.args).get_model()
        trainable = filter(lambda x: x.requires_grad, my_model.parameters())

        if self.args.optimizer == 'SGD':
            optimizer_function = optim.SGD
            kwargs = {'momentum': self.args.momentum}
        elif self.args.optimizer == 'ADAM':
            optimizer_function = optim.Adam
            kwargs = {
                'betas': (self.args.beta1, self.args.beta2),
                'eps': self.args.epsilon}
        elif self.args.optimizer == 'RMSprop':
            optimizer_function = optim.RMSprop
            kwargs = {'eps': self.args.epsilon}

        kwargs['lr'] = self.args.lr
        kwargs['weight_decay'] = 0
        my_optimizer = optimizer_function(trainable, **kwargs)

        if self.args.decay_type == 'step':
            my_scheduler = lrs.StepLR(
                my_optimizer,
                step_size=self.args.lr_decay,
                gamma=self.args.gamma)

        elif self.args.decay_type.find('step') >= 0:
            milestones = self.args.decay_type.split('_')
            milestones.pop(0)
            milestones = list(map(lambda x: int(x), milestones))
            my_scheduler = lrs.MultiStepLR(
                my_optimizer,
                milestones=milestones,
                gamma=self.args.gamma)

        self.log_training = torch.Tensor()
        self.log_test = torch.Tensor()
        if self.args.load == '.':
            my_loss = loss(self.args).get_loss()
        else:
            if not self.args.test_only:
                self.log_training = torch.load(self.dir + '/log_training.pt')
                self.log_test = torch.load(self.dir + '/log_test.pt')

            resume = self.args.resume
            if resume == -1:
                my_model.load_state_dict(
                    torch.load(self.dir + '/model/model_latest.pt'))
                resume = len(self.log_test)
            else:
                my_model.load_state_dict(
                    torch.load(self.dir + '/model/model_{}.pt'.format(resume)))

            my_loss = torch.load(self.dir + '/loss.pt')
            my_optimizer.load_state_dict(
                torch.load(self.dir + '/optimizer.pt'))

            print('Load loss function from checkpoint...')
            print('Continue from epoch {}...'.format(resume))

        return my_model, my_loss, my_optimizer, my_scheduler
    # 'out':tf.Variable(tf.zeros([num_classes]))
    'out': tf.Variable(init([num_classes]))
}

#全连接神经网络
# weights = {
#     'h1':tf.Variable(tf.random_normal([num_input,num_hidden_1])),
#     'h2':tf.Variable(tf.random_normal([num_hidden_1,num_hidden_2])),
#     'out':tf.Variable(tf.random_normal([num_hidden_2,num_classes]))
# }
# biases = {
#     'b1':tf.Variable(tf.random_normal([num_hidden_1])),
#     'b2':tf.Variable(tf.random_normal([num_hidden_2])),
#     'out':tf.Variable(tf.random_normal([num_classes]))
# }
model_ = model(X, weights, biases, timesteps, num_hidden)

# logits = model_.MulTi_LSTM()
# logits = model_.MulTi_LSTM()
# logits = model_.BiRNN()
logits = model_.Basic_Rnn()
prediction = tf.nn.softmax(logits)

# # 定义损失和优化器
# 损失函数优先考虑二次代价函数又称均方误差
# loss_op = tf.reduce_mean(tf.square(Y-logits))/2

loss_op = tf.reduce_mean(
    tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=Y))
tf.summary.scalar('loss', loss_op)
# loss_op = tf.reduce_mean(tf.square(logits-Y)+tf.contrib.layers.l1_regularizer(0.1))
Beispiel #34
0
def custom_train(dataset_path='example_train_datasets/universe',
                 checkpoint_dir='models',
                 iterations=10,
                 model_name='117M',
                 combine=50000,
                 encoding='utf-8',
                 batch_size=1,
                 learning_rate=0.00002,
                 accumulate_gradients=1,
                 memory_saving_gradients=False,
                 only_train_transformer_layers=False,
                 optimizer='adam',
                 noise=0.0,
                 top_k=40,
                 top_p=0.0,
                 restore_from='latest',
                 run_name='last',
                 sample_every=100,
                 sample_length=1023,
                 sample_num=1,
                 save_every=1000,
                 val_dataset=None,
                 val_batch_size=2,
                 val_batch_count=40,
                 val_every=0):

    common_files = ["/encoder.json", "/hparams.json", "/vocab.bpe"]

    dataset_name = dataset_path.split('/')
    dataset_name = dataset_name[len(dataset_name) - 1]

    # set the last run name to this dataset name
    # run_name = dataset_name

    # pre-process dataset
    parse_dataset(dataset_path)

    # generate npz file
    generate_npz_file(dataset_path)

    enc = encoder.get_encoder(model_name)
    hparams = model.default_hparams()
    with open(os.path.join('models', model_name, 'hparams.json')) as f:
        hparams.override_from_dict(json.load(f))

    if sample_length > hparams.n_ctx:
        raise ValueError("Can't get samples longer than window size: %s" %
                         hparams.n_ctx)

    if model_name == '345M':
        memory_saving_gradients = True
        if optimizer == 'adam':
            only_train_transformer_layers = True

    config = tf.ConfigProto()
    config.gpu_options.allow_growth = True
    config.graph_options.rewrite_options.layout_optimizer = rewriter_config_pb2.RewriterConfig.OFF
    with tf.Session(config=config) as sess:
        context = tf.placeholder(tf.int32, [batch_size, None])
        context_in = randomize(context, hparams, noise)
        output = model.model(hparams=hparams, X=context_in)
        loss = tf.reduce_mean(
            tf.nn.sparse_softmax_cross_entropy_with_logits(
                labels=context[:, 1:], logits=output['logits'][:, :-1]))

        if val_every > 0:
            val_context = tf.placeholder(tf.int32, [val_batch_size, None])
            val_output = model.model(hparams=hparams, X=val_context)
            val_loss = tf.reduce_mean(
                tf.nn.sparse_softmax_cross_entropy_with_logits(
                    labels=val_context[:, 1:],
                    logits=val_output['logits'][:, :-1]))
            val_loss_summary = tf.summary.scalar('val_loss', val_loss)

        tf_sample = sample.sample_sequence(hparams=hparams,
                                           length=sample_length,
                                           context=context,
                                           batch_size=batch_size,
                                           temperature=1.0,
                                           top_k=top_k,
                                           top_p=top_p)

        all_vars = [v for v in tf.trainable_variables() if 'model' in v.name]
        train_vars = [v for v in all_vars if '/h' in v.name
                      ] if only_train_transformer_layers else all_vars

        if optimizer == 'adam':
            opt = tf.train.AdamOptimizer(learning_rate=learning_rate)
        elif optimizer == 'sgd':
            opt = tf.train.GradientDescentOptimizer(
                learning_rate=learning_rate)
        else:
            exit('Bad optimizer:', optimizer)

        if accumulate_gradients > 1:
            if memory_saving_gradients:
                exit(
                    "Memory saving gradients are not implemented for gradient accumulation yet."
                )
            opt = AccumulatingOptimizer(opt=opt, var_list=train_vars)
            opt_reset = opt.reset()
            opt_compute = opt.compute_gradients(loss)
            opt_apply = opt.apply_gradients()
            summary_loss = tf.summary.scalar('loss', opt_apply)
        else:
            if memory_saving_gradients:
                opt_grads = memory_saving_gradients.gradients(loss, train_vars)
            else:
                opt_grads = tf.gradients(loss, train_vars)
            opt_grads = list(zip(opt_grads, train_vars))
            opt_apply = opt.apply_gradients(opt_grads)
            summary_loss = tf.summary.scalar('loss', loss)

        summary_lr = tf.summary.scalar('learning_rate', learning_rate)
        summaries = tf.summary.merge([summary_lr, summary_loss])

        summary_log = tf.summary.FileWriter(
            os.path.join(checkpoint_dir, run_name))

        saver = tf.train.Saver(var_list=all_vars,
                               max_to_keep=5,
                               keep_checkpoint_every_n_hours=2)
        sess.run(tf.global_variables_initializer())

        if restore_from == 'latest':
            ckpt = tf.train.latest_checkpoint(
                os.path.join(checkpoint_dir, run_name))
            if ckpt is None:
                # Get fresh GPT weights if new run.
                ckpt = tf.train.latest_checkpoint(
                    os.path.join('models', model_name))
        elif restore_from == 'fresh':
            ckpt = tf.train.latest_checkpoint(
                os.path.join('models', model_name))
        else:
            ckpt = tf.train.latest_checkpoint(restore_from)
        print('Loading checkpoint', ckpt)
        saver.restore(sess, ckpt)

        print('Loading dataset...')
        chunks = load_dataset(enc,
                              dataset_path + ".npz",
                              combine,
                              encoding=encoding)
        data_sampler = Sampler(chunks)
        if val_every > 0:
            if val_dataset:
                val_chunks = load_dataset(enc,
                                          val_dataset,
                                          combine,
                                          encoding=encoding)
            else:
                val_chunks = chunks
        print('dataset has', data_sampler.total_size, 'tokens')
        print('Training...')

        if val_every > 0:
            # Sample from validation set once with fixed seed to make
            # it deterministic during training as well as across runs.
            val_data_sampler = Sampler(val_chunks, seed=1)
            val_batches = [[
                val_data_sampler.sample(1024) for _ in range(val_batch_size)
            ] for _ in range(val_batch_count)]

        counter = 1
        counter_path = os.path.join(checkpoint_dir, run_name, 'counter')
        if os.path.exists(counter_path):
            # Load the step number if we're resuming a run
            # Add 1 so we don't immediately try to save again
            with open(counter_path, 'r') as fp:
                counter = int(fp.read()) + 1

        def save():
            maketree(os.path.join(checkpoint_dir, run_name))
            print(
                'Saving',
                os.path.join(checkpoint_dir, run_name,
                             'model-{}').format(counter))
            saver.save(sess,
                       os.path.join(checkpoint_dir, run_name, 'model'),
                       global_step=counter)
            with open(counter_path, 'w') as fp:
                fp.write(str(counter) + '\n')

        def generate_samples():
            print('Generating samples...')
            context_tokens = data_sampler.sample(1)
            all_text = []
            index = 0
            while index < sample_num:
                out = sess.run(
                    tf_sample,
                    feed_dict={context: batch_size * [context_tokens]})
                for i in range(min(sample_num - index, batch_size)):
                    text = enc.decode(out[i])
                    text = '======== SAMPLE {} ========\n{}\n'.format(
                        index + 1, text)
                    all_text.append(text)
                    index += 1
            print(text)
            maketree(os.path.join(SAMPLE_DIR, run_name))
            with open(os.path.join(SAMPLE_DIR, run_name,
                                   'samples-{}').format(counter),
                      'w',
                      encoding=encoding) as fp:
                fp.write('\n'.join(all_text))

        def validation():
            print('Calculating validation loss...')
            losses = []
            for batch in tqdm.tqdm(val_batches):
                losses.append(
                    sess.run(val_loss, feed_dict={val_context: batch}))
            v_val_loss = np.mean(losses)
            v_summary = sess.run(val_loss_summary,
                                 feed_dict={val_loss: v_val_loss})
            summary_log.add_summary(v_summary, counter)
            summary_log.flush()
            print('[{counter} | {time:2.2f}] validation loss = {loss:2.2f}'.
                  format(counter=counter,
                         time=time.time() - start_time,
                         loss=v_val_loss))

        def sample_batch():
            return [data_sampler.sample(1024) for _ in range(batch_size)]

        avg_loss = (0.0, 0.0)
        start_time = time.time()

        try:
            for i in range(iterations):
                if counter % save_every == 0:
                    save()
                if counter % sample_every == 0:
                    generate_samples()
                if val_every > 0 and (counter % val_every == 0
                                      or counter == 1):
                    validation()

                if accumulate_gradients > 1:
                    sess.run(opt_reset)
                    for _ in range(accumulate_gradients):
                        sess.run(opt_compute,
                                 feed_dict={context: sample_batch()})
                    (v_loss, v_summary) = sess.run((opt_apply, summaries))
                else:
                    (_, v_loss, v_summary) = sess.run(
                        (opt_apply, loss, summaries),
                        feed_dict={context: sample_batch()})

                summary_log.add_summary(v_summary, counter)

                avg_loss = (avg_loss[0] * 0.99 + v_loss,
                            avg_loss[1] * 0.99 + 1.0)

                print(
                    '[{counter} | {time:2.2f}] loss={loss:2.2f} avg={avg:2.2f}'
                    .format(counter=counter,
                            time=time.time() - start_time,
                            loss=v_loss,
                            avg=avg_loss[0] / avg_loss[1]))

                counter += 1

            # save results
            save()

            # copy base model files to the trained model folder
            for f in common_files:
                dest_full_path = checkpoint_dir + "/" + model_name + "/" + f
                destination = checkpoint_dir + "/" + run_name + "/" + f
                shutil.copyfile(dest_full_path, destination)

        except KeyboardInterrupt:
            print('error/exception')
Beispiel #35
0
        # We do not add the time left over form previous dataset: time_budget += time_left_over
        vprint(verbose,
               "[+] Time budget for this task %5.2f sec" % time_budget)
        time_spent = time.time() - start
        vprint(
            verbose, "[+] Remaining time after reading data %5.2f sec" %
            (time_budget - time_spent))
        if time_spent >= time_budget:
            vprint(verbose,
                   "[-] Sorry, time budget exceeded, skipping this task")
            execution_success = False
            continue

        # ========= Creating a model
        vprint(verbose, "======== Creating model ==========")
        M = model()

        # ========= Reload trained model if it exists
        vprint(verbose,
               "**********************************************************")
        vprint(verbose,
               "****** Attempting to reload model to avoid training ******")
        vprint(verbose,
               "**********************************************************")
        you_must_train = 1
        modelname = os.path.join(submission_dir, basename)
        if os.path.isfile(modelname + '_model.pickle'):
            M = M.load(modelname)
            you_must_train = 0
            vprint(verbose, "[+] Model reloaded, no need to train!")
Beispiel #36
0
def main(argv=None):
    import os
    os.environ['CUDA_VISIBLE_DEVICES'] = FLAGS.gpu_list

    try:
        os.makedirs(FLAGS.output_dir)
    except OSError as e:
        if e.errno != 17:
            raise

    with tf.get_default_graph().as_default():
        input_images = tf.placeholder(tf.float32,
                                      shape=[None, None, None, 3],
                                      name='input_images')
        global_step = tf.get_variable('global_step', [],
                                      initializer=tf.constant_initializer(0),
                                      trainable=False)

        f_score, f_geometry = model.model(input_images, is_training=False)

        variable_averages = tf.train.ExponentialMovingAverage(
            0.997, global_step)
        saver = tf.train.Saver(variable_averages.variables_to_restore())

        with tf.Session(config=tf.ConfigProto(
                allow_soft_placement=True)) as sess:
            ckpt_state = tf.train.get_checkpoint_state(FLAGS.checkpoint_path)
            model_path = os.path.join(
                FLAGS.checkpoint_path,
                os.path.basename(ckpt_state.model_checkpoint_path))
            print('Restore from {}'.format(model_path))
            saver.restore(sess, model_path)

            im_fn_list = get_images()
            for im_fn in im_fn_list:
                im = cv2.imread(im_fn)[:, :, ::-1]
                start_time = time.time()
                im_resized, (ratio_h, ratio_w) = resize_image(im)

                timer = {'net': 0, 'restore': 0, 'nms': 0}
                start = time.time()
                score, geometry = sess.run(
                    [f_score, f_geometry],
                    feed_dict={input_images: [im_resized]})
                timer['net'] = time.time() - start

                boxes, timer = detect(score_map=score,
                                      geo_map=geometry,
                                      timer=timer)
                print(
                    '{} : net {:.0f}ms, restore {:.0f}ms, nms {:.0f}ms'.format(
                        im_fn, timer['net'] * 1000, timer['restore'] * 1000,
                        timer['nms'] * 1000))

                if boxes is not None:
                    boxes = boxes[:, :8].reshape((-1, 4, 2))
                    boxes[:, :, 0] /= ratio_w
                    boxes[:, :, 1] /= ratio_h

                duration = time.time() - start_time
                print('[timing] {}'.format(duration))

                # save to file
                if boxes is not None:
                    res_file = os.path.join(
                        FLAGS.output_dir,
                        '{}.txt'.format(os.path.basename(im_fn).split('.')[0]))

                    with open(res_file, 'w') as f:
                        for box in boxes:
                            # to avoid submitting errors
                            box = sort_poly(box.astype(np.int32))
                            if np.linalg.norm(box[0] -
                                              box[1]) < 5 or np.linalg.norm(
                                                  box[3] - box[0]) < 5:
                                continue
                            f.write('{},{},{},{},{},{},{},{}\r\n'.format(
                                box[0, 0],
                                box[0, 1],
                                box[1, 0],
                                box[1, 1],
                                box[2, 0],
                                box[2, 1],
                                box[3, 0],
                                box[3, 1],
                            ))
                            cv2.polylines(
                                im[:, :, ::-1],
                                [box.astype(np.int32).reshape((-1, 1, 2))],
                                True,
                                color=(255, 255, 0),
                                thickness=1)
                if not FLAGS.no_write_images:
                    img_path = os.path.join(FLAGS.output_dir,
                                            os.path.basename(im_fn))
                    cv2.imwrite(img_path, im[:, :, ::-1])
    def getRes(self):
        # 获取格网线图和格网点图,都是像素级别的
        img_erode, joint = detectTable(self.img).run()
        cv2.imshow("src", img_erode)
        image, contours, hierarchy = cv2.findContours(img_erode, cv2.RETR_LIST,
                                                      cv2.CHAIN_APPROX_SIMPLE)

        area_coord_roi = []
        for i in range(len(contours)):
            cnt = contours[i]
            area = cv2.contourArea(cnt)
            if area > self.areaRange[0] and area < self.areaRange[1]:
                x, y, w, h = cv2.boundingRect(cnt)
                roi = self.img[(y + self.border):((y + h) - self.border),
                               (x + self.border):((x + w) - self.border)]
                area_coord_roi.append((area, (x, y, w, h), roi))

        #最大面积
        max_area = max([info[0] for info in area_coord_roi])

        for info in area_coord_roi:
            if info[0] == max_area:
                max_rect = info[1]
                max_info = info

        bScript = cutImage.SkipMaxArea(self, max_info, area_coord_roi)
        maxW = 0
        totalH = 0
        #计算拼接的图片大小
        for each in area_coord_roi:
            x, y, w, h = each[1]
            #if 1 == 0:  #x>max_rect[0] and y>max_rect[1] and (x+w)<(max_rect[0]+max_rect[2]) and (y+h) <(max_rect[1]+max_rect[3]):
            if bScript and each[0] == max_area:  #跳过最大面积的表格
                pass
            else:
                if maxW < w:
                    maxW = w
                totalH += h
        to_image = Image.new('RGB', (maxW + 1, totalH + 1),
                             color='white')  # 创建一个新图 size必须是元组
        print(maxW + 1)
        print(totalH + 1)
        sumH = 0

        area_coord_map = []  #原图中的位置与拼接图的位置映射
        for each in area_coord_roi:
            #if 1 == 0:  #x>max_rect[0] and y>max_rect[1] and (x+w)<(max_rect[0]+max_rect[2]) and (y+h) <(max_rect[1]+max_rect[3]):
            if bScript and each[0] == max_area:  #跳过最大面积的表格
                pass
            else:
                x, y, w, h = each[1]
                dst_dir = 'clip'
                if not os.path.exists(dst_dir):
                    os.mkdir(dst_dir)
                name = '%s/%d_%d_%d_%d.png' % (dst_dir, x, y, x + w, y + h)
                cv2.imwrite(
                    name, each[2]
                )  #png 0-9  ,[int(cv2.CV_IMWRITE_PNG_COMPRESSION),9]
                imgtemp = Image.open(name).convert("RGB")  #图片临时保存再来

                to_image.paste(
                    imgtemp,
                    (0, sumH))  #((x - 1) * IMAGE_SIZE, (y - 1) * IMAGE_SIZE)
                area_coord_map.append(
                    ((x, y, w, h), (0, sumH, 0 + w, sumH + h)))
                sumH += h
        MeargeImageName = 'clip/final.png'
        to_image.save(MeargeImageName)  #95最佳 默认75  增采样
        imgtempV2 = Image.open(MeargeImageName).convert("RGB")  # 图片临时保存再来
        W, H = imgtempV2.size
        timeTake = time.time()
        _, result, angle = model.model(
            imgtempV2,
            detectAngle=DETECTANGLE,  ##是否进行文字方向检测
            config=dict(
                MAX_HORIZONTAL_GAP=10,  ##字符之间的最大间隔,用于文本行的合并
                MIN_V_OVERLAPS=0.7,
                MIN_SIZE_SIM=0.7,
                TEXT_PROPOSALS_MIN_SCORE=0.1,
                TEXT_PROPOSALS_NMS_THRESH=0.3,
                TEXT_LINE_NMS_THRESH=0.99,  ##文本行之间测iou值
                MIN_RATIO=1.0,
                LINE_MIN_SCORE=0.2,
                TEXT_PROPOSALS_WIDTH=0,
                MIN_NUM_PROPOSALS=0,
            ),
            leftAdjust=True,  ##对检测的文本行进行向左延伸
            rightAdjust=True,  ##对检测的文本行进行向右延伸
            alph=0.2,  ##对检测的文本行进行向右、左延伸的倍数
            ifadjustDegree=False  ##是否先小角度调整文字倾斜角度
        )
        print(result)
        boxes = []
        for line in result:
            cx = line['cx']
            cy = line['cy']
            w = line['w']
            h = line['h']
            text = line['text']
            print(text)
        return
Beispiel #38
0
import matplotlib.pyplot as plt

from model import model
from misc import plot_decision_boundary, load_dataset, predict, predict_dec

# %matplotlib inline
plt.rcParams['figure.figsize'] = (7.0, 4.0)  # set default size of plots
plt.rcParams['image.interpolation'] = 'nearest'
plt.rcParams['image.cmap'] = 'gray'

train_X, train_Y = load_dataset()

# train 3-layer model
layers_dims = [train_X.shape[0], 5, 2, 1]
parameters = model(train_X, train_Y, layers_dims, optimizer="gd")

# Predict
predictions = predict(train_X, train_Y, parameters)

# Plot decision boundary
plt.title("Model with Gradient Descent optimization")
axes = plt.gca()
axes.set_xlim([-1.5, 2.5])
axes.set_ylim([-1, 1.5])
plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X,
                       train_Y)

# train 3-layer model
layers_dims = [train_X.shape[0], 5, 2, 1]
parameters = model(train_X,
                   train_Y,
Beispiel #39
0
 def __init__(self,dic):
     self.word_dic = dic
     self.komoran = Komoran()
     self.Model = model.model(len(self.word_dic))
Beispiel #40
0
            transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
        ])),
                             batch_size=batch,
                             shuffle=True)

    return {'train': train_loader, 'test': test_loader}


if __name__ == '__main__':
    epoch = 100

    loader = load_cifar10()
    classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse',
               'ship', 'truck')

    net: model = model()

    device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
    net.to(device)
    print(device)

    criterion = nn.CrossEntropyLoss()
    optimizer = torch.optim.SGD(params=net.parameters(),
                                lr=0.001,
                                momentum=0.9)

    train_loss = []
    train_acc = []
    test_acc = []

    for e in range(epoch):
Beispiel #41
0
def main():
    enc = encoder.get_encoder(args.model_name)
    hparams = model.default_hparams()
    hparams.batch_size=args.batch_size
    hparams.seq_len=args.seq_len
    
    ##data_path
    args.train_data_path=args.data_dir+args.dataset+'/train.txt'
    args.eval_data_path=args.data_dir+args.dataset+'/dev.txt'
    args.test_data_path=args.data_dir+args.dataset+'/test.txt'
    args.eval_data_path=args.test_data_path                          ###Test mode only!
    args.gpt_save_path=args.gpt_save_dir+args.dataset+'/'
    args.dis_save_path=args.dis_save_dir+args.dataset+'/'
    
    args.gpt_sample_dir2=args.gpt_sample_dir+args.dataset+'/'
    args.dis_sample_dir2=args.dis_sample_dir+args.dataset+'/'
    
    args.log_path=args.log_dir+args.dataset+'/'
    maketree(args.gpt_save_dir)
    maketree(args.dis_save_dir)
    maketree(args.gpt_save_path)
    maketree(args.dis_save_path)
    args.dis_save_path=args.dis_save_path+'/'
    maketree(args.dis_save_path)
    maketree(args.gpt_sample_dir2)
    maketree(args.dis_sample_dir2)
    args.dis_sample_dir2=args.dis_sample_dir2+'/'
    maketree(args.dis_sample_dir2)
    
    maketree(args.log_path)
    
    
    with open(os.path.join('models', args.model_name, 'hparams.json')) as f:
        hparams.override_from_dict(json.load(f))
    if args.sample_length > hparams.n_ctx:
        raise ValueError(
            "Can't get samples longer than window size: %s" % hparams.n_ctx)

    if args.model_name == '345M':
        args.memory_saving_gradients = True
        if args.optimizer == 'adam':
            args.only_train_transformer_layers = True

    config = tf.ConfigProto()
    config.gpu_options.allow_growth = True
    config.graph_options.rewrite_options.layout_optimizer = rewriter_config_pb2.RewriterConfig.OFF
    with tf.Session(config=config) as sess:
        scope_discri='distri'
        def get_dis_logit_and_prob(context, scope):
            with tf.variable_scope(scope, reuse=tf.AUTO_REUSE):
                context=tf.reshape(context, [args.batch_size, args.seq_len])
                emb=tf.get_variable(name='emb', initializer=tf.random.normal([hparams.n_vocab, 32], 0, 0.02))
                context_emb=tf.nn.embedding_lookup(emb, context)
                logit=dis(context_emb, scope=scope_discri)
                prob=tf.nn.sigmoid(logit)
            return logit, prob
        ##Build discriminator
        
        def build_dis_layer(scope):
            context_pos_discri = tf.placeholder(tf.int32, [args.batch_size, args.seq_len])
            context_neg_discri = tf.placeholder(tf.int32, [args.batch_size, args.seq_len])
            label_pos_discri=tf.ones([args.batch_size], dtype=tf.float32)
            label_neg_discri=tf.zeros([args.batch_size], dtype=tf.float32)
            logit_pos_discri, prob_pos_discri=get_dis_logit_and_prob(context_pos_discri, scope=scope)
            logit_neg_discri, _=get_dis_logit_and_prob(context_neg_discri, scope=scope)
        
            loss_pre_pos_discri=tf.nn.sigmoid_cross_entropy_with_logits(labels=label_pos_discri, logits=logit_pos_discri)
            loss_pos_discri=tf.reduce_mean(loss_pre_pos_discri)
            loss_pre_neg_discri=tf.nn.sigmoid_cross_entropy_with_logits(labels=label_neg_discri, logits=logit_neg_discri)
            loss_neg_discri=tf.reduce_mean(loss_pre_neg_discri)
            loss_discri=(loss_pos_discri*args.pos_loss_weight+loss_neg_discri)/(1+args.pos_loss_weight)
        
            train_var_list_discri=[x for x in tf.global_variables() if scope in  x.name]
            train_op_discri=tf.train.AdamOptimizer().minimize(loss_discri, var_list=train_var_list_discri)
            var_list_discri=[x for x in tf.global_variables() if scope in  x.name]
            initializer_discri=tf.variables_initializer(var_list_discri)
            saver_discri=tf.train.Saver(var_list=var_list_discri, max_to_keep=1)
            print('discri: {} build succeed!'.format(scope))
            return context_pos_discri, context_neg_discri, loss_pos_discri, loss_neg_discri, loss_discri, train_op_discri, initializer_discri, saver_discri, prob_pos_discri
        
        class dis_class:
            def __init__(self, layer_num=1, scope=scope_discri):
                self.model=[]
                print(layer_num)
                for i in range(layer_num):
                    layer={'scope': scope+str(i)}
                    layer['context_pos_discri'], layer['context_neg_discri'], layer['loss_pos_discri'], layer['loss_neg_discri'], layer['loss_discri'], layer['train_op_discri'], layer['initializer_discri'], layer['saver_discri'], layer['prob_pos_discri'] = build_dis_layer(scope+str(i))
                    self.model.append(layer)
            def prob(self, context, layer=-1):
                if layer==-1:
                    layer=len(self.model)
                prob_final=tf.ones(tf.shape(context)[0], dtype=tf.float32)
                for i in range(layer):
                    item=self.model[i]
                    scope=item['scope']
                    _, prob=get_dis_logit_and_prob(context, scope=scope)
                    prob_final*=prob
                return prob_final
        
        Dis=dis_class(layer_num=1)
        
        context = tf.placeholder(tf.int32, [args.batch_size, None])
        context_len=tf.placeholder(tf.int32, [args.batch_size])
        context_mask=tf.sequence_mask(context_len-1, args.seq_len-1, dtype=tf.float32)
        context_in = randomize(context, hparams, args.noise)
        output = model.model(hparams=hparams, X=context_in)
        loss_tensor = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=context[:, 1:], logits=output['logits'][:, :-1])*context_mask
        
        context_prob_cut=Dis.prob(context)
        
        loss=tf.reduce_sum(loss_tensor, axis=1)/(tf.reduce_sum(context_mask, axis=1)+1e-7)
        loss_sen=tf.reduce_sum(loss)
        loss=tf.reduce_mean(loss)
        
        
        if args.val_every > 0:
            def transform_np(x, lift=args.exponential_param):
                x=x-0.5
                x=x+np.abs(x)
                return lift*x**2
            def transform(x, lift=args.exponential_param):
                x=x-0.5
                x=x+tf.abs(x)
                return lift*x**2
            val_context = tf.placeholder(tf.int32, [args.val_batch_size, args.seq_len])
            val_context_len=tf.placeholder(tf.int32, [args.batch_size])
            NLL_bias=tf.placeholder(tf.float32, [])
            val_context_mask=tf.sequence_mask(val_context_len-1, args.seq_len-1, dtype=tf.float32)
            val_output = model.model(hparams=hparams, X=val_context)
            val_loss_tensor =tf.nn.sparse_softmax_cross_entropy_with_logits(labels=val_context[:, 1:], logits=val_output['logits'][:, :-1])*val_context_mask
            val_context_prob_cut=Dis.prob(val_context)
            val_NLL_cut=tf.log(val_context_prob_cut+1e-7)
            
            val_loss=tf.reduce_sum(val_loss_tensor, axis=1)/(tf.reduce_sum(val_context_mask, axis=1)+1e-7)
            val_loss_cut=(tf.reduce_sum(val_loss_tensor, axis=1)+NLL_bias)/(tf.reduce_sum(val_context_mask, axis=1)+1e-7)-val_NLL_cut/tf.cast(val_context_len, tf.float32)
            
            val_loss_sum=tf.reduce_sum(val_loss_tensor, axis=1)
            val_loss_cut_sum=(tf.reduce_sum(val_loss_tensor, axis=1)+NLL_bias)-val_NLL_cut
            
            val_loss_mean=tf.reduce_mean(val_loss)
            val_loss_cut_mean=tf.reduce_mean(val_loss_cut)
            val_loss_summary = tf.summary.scalar('val_loss', val_loss_mean)


        tf_sample = sample.sample_sequence(
            hparams=hparams,
            length=args.seq_len,
            context=context,
            batch_size=args.batch_size,
            temperature=1.0,
            top_k=args.top_k,
            top_p=args.top_p,
            start_token=enc.encoder['<|endoftext|>'])

        start_token=enc.encoder['<|endoftext|>']

        all_vars = [v for v in tf.trainable_variables() if 'model' in v.name]
        train_vars = [v for v in all_vars if '/h' in v.name] if args.only_train_transformer_layers else all_vars

        if args.optimizer == 'adam':
            opt = tf.train.AdamOptimizer(learning_rate=args.learning_rate)
        elif args.optimizer == 'sgd':
            opt = tf.train.GradientDescentOptimizer(learning_rate=args.learning_rate)
        else:
            exit('Bad optimizer:', args.optimizer)

        if args.accumulate_gradients > 1:
            if args.memory_saving_gradients:
                exit("Memory saving gradients are not implemented for gradient accumulation yet.")
            opt = AccumulatingOptimizer(
                opt=opt,
                var_list=train_vars)
            opt_reset = opt.reset()
            opt_compute = opt.compute_gradients(loss)
            opt_apply = opt.apply_gradients()
            summary_loss = tf.summary.scalar('loss', opt_apply)
        else:
            if args.memory_saving_gradients:
                opt_grads = memory_saving_gradients.gradients(loss, train_vars)
            else:
                opt_grads = tf.gradients(loss, train_vars)
            opt_grads = list(zip(opt_grads, train_vars))
            opt_apply = opt.apply_gradients(opt_grads)
            summary_loss = tf.summary.scalar('loss', loss)

        summary_lr = tf.summary.scalar('learning_rate', args.learning_rate)
        summaries = tf.summary.merge([summary_lr, summary_loss])

        summary_log = tf.summary.FileWriter(
            os.path.join(CHECKPOINT_DIR, args.run_name))

        saver = tf.train.Saver(var_list=all_vars, max_to_keep=1)
        
        sess.run(tf.global_variables_initializer())

        if args.restore_from == 'latest':
            ckpt = tf.train.latest_checkpoint(
                os.path.join(CHECKPOINT_DIR, args.run_name))
            if ckpt is None:
                # Get fresh GPT weights if new run.
                ckpt = tf.train.latest_checkpoint(
                    os.path.join('models', args.model_name))
        elif args.restore_from == 'fresh':
            ckpt = tf.train.latest_checkpoint(
                os.path.join('models', args.model_name))
        else:
            ckpt = tf.train.latest_checkpoint(args.restore_from)
        print('Loading checkpoint', ckpt)
        saver.restore(sess, ckpt)

        print('Loading dataset...')
        data_list, data_len = load_dataset(enc, args.train_data_path, args.seq_len)
        data_sampler = Sampler(data_list, data_len )
        if args.val_every > 0:
            val_data_list, val_data_len = load_dataset(enc, args.eval_data_path, args.seq_len)
        print('dataset has', data_sampler.total_size, 'tokens')
        print('Training...')

        if args.val_every > 0:
            # Sample from validation set once with fixed seed to make
            # it deterministic during training as well as across runs.
            val_data_sampler = Sampler(val_data_list, val_data_len, seed=1)
            val_batches = [val_data_sampler.sample(args.batch_size) for _ in range(args.val_batch_count)]

        counter = 0
        counter_path = os.path.join(CHECKPOINT_DIR, args.run_name, 'counter')
        if os.path.exists(counter_path):
            # Load the step number if we're resuming a run
            # Add 1 so we don't immediately try to save again
            with open(counter_path, 'r') as fp:
                counter = int(fp.read()) + 1

        def save():
            maketree(os.path.join(CHECKPOINT_DIR, args.run_name))
            print(
                'Saving',
                os.path.join(CHECKPOINT_DIR, args.run_name,
                             'model-{}').format(counter))
            saver.save(
                sess,
                os.path.join(CHECKPOINT_DIR, args.run_name, 'model'),
                global_step=counter)
            with open(counter_path, 'w') as fp:
                fp.write(str(counter) + '\n')
        
        def mask_dis(sample1, sample2):
            for i in range(len(sample1)):
                for j in range(len(sample1[i])):
                    if sample1[i][j]==start_token:
                        l1=j
                        break
                for j in range(len(sample2[i])):
                    if sample2[i][j]==start_token:
                        l2=j
                        break
                l=min(l1,l2)
                if l>=2:
                    l_mask=np.random.randint(0, l, [])
                    for j in range(l_mask, len(sample1[i])):
                        sample1[i][j]=start_token
                    for j in range(l_mask, len(sample2[i])):
                        sample2[i][j]=start_token
            return sample1, sample2
        
        def train_step_discri(layer_id=0, mask_train_epoch=0):
            pos_samples, _=data_sampler.sample(args.batch_size)
            neg_samples=generate_negative_sample_and_diversify(layer_id=layer_id)[:,:args.seq_len]
            _, loss=sess.run([Dis.model[layer_id]['train_op_discri'], Dis.model[layer_id]['loss_discri']], feed_dict={Dis.model[layer_id]['context_pos_discri']: pos_samples, Dis.model[layer_id]['context_neg_discri']: neg_samples})
            for epoch in range(mask_train_epoch):
                pos_samples, _=data_sampler.sample(args.batch_size)
                neg_samples_copy=copy(neg_samples)
                pos_samples, neg_samples_copy=mask_dis(pos_samples, neg_samples_copy)
                _, loss_mask=sess.run([Dis.model[layer_id]['train_op_discri'], Dis.model[layer_id]['loss_discri']], feed_dict={Dis.model[layer_id]['context_pos_discri']: pos_samples, Dis.model[layer_id]['context_neg_discri']: neg_samples_copy})
            return loss
        
        def coverage_rate(list1, list2):
            overlap1=0
            for item in list1:
                if item in list2:
                    overlap1+=1
            overlap2=0
            for item in list2:
                if item in list1:
                    overlap2+=1
            return max((overlap1+0.0)/(len(list1)+0.0), (overlap2+0.0)/(len(list2)+0.0))
        
        def diversify(samples, samples_mem):
            #return list(range(len(samples)))            ##########tem
            sample_split=[]
            for item in samples:
                sample_split.append(item.split())
            sample_selected=[]
            for item in sample_split:
                flag=0
                for item_ref in sample_selected+samples_mem:
                    if coverage_rate(item, item_ref)>0.5:  ##temporary strategy
                        flag=1
                        break
                if flag==0:
                    sample_selected.append(item)
            id_list=[]
            for item in sample_selected:
                id_list.append(sample_split.index(item))
            return id_list
        
        def generate_negative_sample_and_diversify(layer_id, generate_num=args.batch_size):
            result_list=[]
            generate_num_now=0
            samples_mem=[]
            while generate_num_now<generate_num:
                t=time.time()
                sample_id=generate_negative_sample(layer_id=layer_id)[:,:args.seq_len]
                samples=[]
                t1=time.time()
                selected_id_list=np.arange(len(sample_id))
                t2=time.time()
                result_list.append(sample_id[selected_id_list])
                generate_num_now+=len(selected_id_list)
                print(generate_num_now, t1-t, t2-t1)
            return np.concatenate(result_list, axis=0)[:generate_num]
            

        def generate_discri_sample2(layer_id=-1, sample_size=10000, save_path=args.dis_sample_dir2+'sample.txt'):
            samples=[]
            sample_id=generate_negative_sample_and_diversify(layer_id, sample_size)
            for i in range(len(sample_id)):
                samples.append(enc.decode(sample_id[i]).split('<|endoftext|>')[1].split('\n')[0])
            print(len(samples))
            with open(save_path, 'w') as g:
                g.write('\n'.join(samples))
        
        def generate_discri_sample3(layer_id=-1, sample_size=10000, save_path='/mnt/cephfs_new_wj/mlnlp/miaoning/Experiment/gpt-2-sep/samples/discri/sample2.txt'):
            samples=[]
            while len(samples)<sample_size:
                sample_id=generate_negative_sample(layer_id)
                for i in range(len(sample_id)):
                    sample_tem=enc.decode(sample_id[i]).split('<|endoftext|>')[1].split('\n')[0]
                    if len(sample_tem.split())>=3:
                        samples.append(sample_tem)
                print(len(samples))
            with open(save_path, 'w') as g:
                g.write('\n'.join(samples))
        
        def generate_sample2(save_path=args.gpt_sample_dir2+'sample.txt'):
            generate_discri_sample3(layer_id=0, sample_size=3000, save_path=save_path)
        
        def eval_discri_NLL(layer_id=0):
            losses_pos=[]
            losses_neg=[]
            for batch in tqdm.tqdm(val_batches):
                pos_samples, pos_len=batch
                neg_samples=generate_negative_sample(layer_id=layer_id)[:,:args.seq_len]
                loss_pos=sess.run(Dis.model[layer_id]['loss_pos_discri'], feed_dict={Dis.model[layer_id]['context_pos_discri']: pos_samples})
                loss_neg=sess.run(Dis.model[layer_id]['loss_neg_discri'], feed_dict={Dis.model[layer_id]['context_neg_discri']: neg_samples})
                losses_pos.append(loss_pos)
                losses_neg.append(loss_neg)
            return np.mean(losses_pos), np.mean(losses_neg)

        def train_discri(train_step, eval_every):
            #sess.run(initializer_discri)
            train_losses=[]
            for layer_id in range(len(Dis.model)):
                for epoch in range(train_step):
                    if epoch % eval_every==0:
                        train_losses=np.mean(train_losses)
                        train_losses=[]
                    
                        eval_NLL_pos, eval_NLL_neg=eval_discri_NLL(layer_id)
                        eval_loss=(eval_NLL_pos*args.pos_loss_weight+eval_NLL_neg)/(args.pos_loss_weight+1)
                        print('layer_id:{} discri eval loss:{}'.format(layer_id, eval_loss))
                        print('layer_id:{} discri NLL pos: {}, discri NLL neg: {}'.format(layer_id, eval_NLL_pos, eval_NLL_neg))
                        print(epoch)
                        if epoch==0:
                            eval_loss_old=eval_loss
                        else:
                            print(eval_loss, eval_loss_old)
                            if eval_loss<=eval_loss_old+0.01:
                                if eval_loss<eval_loss_old:
                                    eval_loss_old=eval_loss
                                    save_path=args.dis_save_path+str(layer_id)+'/'
                                    if not os.path.isdir(save_path):
                                        os.mkdir(save_path)
                                    Dis.model[layer_id]['saver_discri'].save(sess, save_path+'a')
                                    print('model discri saved!')
                            else:
                                pass
                                break
                    train_loss=train_step_discri(layer_id)
                    print('layer_id:{} discri train loss:{}'.format(layer_id, train_loss))
                    train_losses.append(train_loss)
            return eval_loss_old
        tf_sample_0 = sample_link.sample_sequence(
                    hparams=hparams,
                    length=args.seq_len,
                    context=context,
                    batch_size=args.batch_size,
                    temperature=1.0,
                    top_k=args.top_k,
                    top_p=args.top_p,
                    start_token=enc.encoder['<|endoftext|>'])
        tf_sample_dict={}
        def generate_negative_sample(layer_id=0):
            ##output the filtered result of layer layer_id-1
            if layer_id==0:
                tf_sample=tf_sample_0
                sample = data_sampler.sample(args.batch_size)[0][:,0:1]
                out = sess.run(
                        tf_sample,
                        feed_dict={context: sample})
                for i in range(len(out)):
                    flag=0
                    for j in range(len(out[i])):
                        if flag==2:
                            out[i][j]=start_token
                            continue
                        if out[i][j]==start_token:
                            flag+=1
                return out
            else:
                if layer_id==-1:
                    layer_id=len(Dis.model)
                if layer_id in tf_sample_dict:
                    tf_sample=tf_sample_dict[layer_id]
                else:
                    tf_sample = sample_link.sample_sequence_SMC(
                        Dis=Dis,
                        layer=layer_id, 
                        hparams=hparams,
                        length=args.seq_len,
                        context=context,
                        batch_size=args.batch_size,
                        temperature=1.0,
                        top_k=args.top_k,
                        top_p=args.top_p,
                        start_token=enc.encoder['<|endoftext|>'])
                    tf_sample_dict[layer_id]=tf_sample
                
                sample = data_sampler.sample(args.batch_size)[0][:,0:1]
                
                out = sess.run(
                        tf_sample,
                        feed_dict={context: sample})
                for i in range(len(out)):
                    flag=0
                    for j in range(len(out[i])):
                        if flag==2:
                            out[i][j]=start_token
                            continue
                        if out[i][j]==start_token:
                            flag+=1
                return out


        def validation():
            print('Calculating validation loss...')
            start_time=time.time()
            losses = []
            rates=[]
            for batch in tqdm.tqdm(val_batches):
                losses.append(sess.run(val_loss_mean, feed_dict={val_context: batch[0], val_context_len: batch[1]}))
            v_val_loss = np.mean(losses)
            v_summary = sess.run(val_loss_summary, feed_dict={val_loss_mean: v_val_loss})
            summary_log.add_summary(v_summary, counter)
            summary_log.flush()
            print(
                '[{counter} | {time:2.2f}] validation loss = {loss:2.2f}'
                .format(
                    counter=counter,
                    time=time.time() - start_time,
                    loss=v_val_loss))
            return v_val_loss

        def validation_cut(NLL_bias_0=0):
            print('Calculating validation loss...')
            losses = []
            rates=[]
            for batch in tqdm.tqdm(val_batches):
                losses.append(sess.run(val_loss_cut_mean, feed_dict={val_context: batch[0], val_context_len: batch[1], NLL_bias:NLL_bias_0}))
            v_val_loss = np.mean(losses)
            #v_summary = sess.run(val_loss_summary, feed_dict={val_loss_mean: v_val_loss})
            #summary_log.add_summary(v_summary, counter)
            #summary_log.flush()
            print(
                '[{counter} | {time:2.2f}] validation cut loss = {loss:2.2f}'
                .format(
                    counter=counter,
                    time=time.time() - start_time,
                    loss=v_val_loss))
            return v_val_loss

        def sample_batch():
            return [data_sampler.sample(1024) for _ in range(args.batch_size)]
        
        def train_gpt():
            val_loss_old=10000.0
            avg_loss = (0.0, 0.0)
            start_time = time.time()
            counter=0
            while True:
                #pretraining
                if counter % args.save_every == 0:
                    pass
                    #save()
                if counter % args.sample_every == 0:
                    pass
                    #generate_samples()
                if args.val_every > 0 and (counter % args.val_every == 0 or counter == 1):
                    val_loss_1=validation()
                    #generate_sample2(save_path='./samples/finetune/step/'+str(counter //args.val_every)+'.txt')
                    print(str(counter //args.val_every))
                    if val_loss_1>=val_loss_old:
                        print('pre-training ends!')
                        #break
                    else:
                        val_loss_old=val_loss_1
                        saver.save(sess, args.gpt_save_path+'a')
                        print('save succeed!')

                if args.accumulate_gradients > 1:
                    sess.run(opt_reset)
                    for _ in range(args.accumulate_gradients):
                        batch, batch_len=data_sampler.sample(args.batch_size)
                        sess.run(
                            opt_compute, feed_dict={context: batch, context_len:batch_len})
                    (v_loss, v_summary) = sess.run((opt_apply, summaries))
                else:
                    batch, batch_len=data_sampler.sample(args.batch_size)
                    (_, v_loss, v_summary) = sess.run(
                        (opt_apply, loss, summaries),
                        feed_dict={context: batch, context_len:batch_len})

                summary_log.add_summary(v_summary, counter)

                avg_loss = (avg_loss[0] * 0.9 + v_loss,
                            avg_loss[1] * 0.9 + 1.0)

                print(
                    '[{counter} | {time:2.2f}] loss={loss:2.2f} avg={avg:2.2f}'
                    .format(
                        counter=counter,
                        time=time.time() - start_time,
                        loss=v_loss,
                        avg=avg_loss[0] / avg_loss[1]))

                counter += 1

        try:
            if args.finetune:
                train_gpt()
            if True:
                save_path=tf.train.latest_checkpoint(args.gpt_save_path)
                saver.restore(sess, save_path)
                print('Load gpt2 succeeded!')
            if args.evaluate_finetune:
                generate_sample2()
                sample_path=args.gpt_sample_dir2+'sample.txt'
                rev_ppl=train.file_f(train_data_path=sample_path, val_data_path=args.eval_data_path)
                print('Rev_ppl for finetuning:{}'.format(rev_ppl))
            ##Begin cutting
            counter=0
            if args.train_tailor:
                train_discri(500, 10)
            if True:
                for layer_id in range(len(Dis.model)):
                    save_path=args.dis_save_path+str(layer_id)+'/'
                    save_path=args.dis_save_path
                    save_path=tf.train.latest_checkpoint(save_path)
                    Dis.model[layer_id]['saver_discri'].restore(sess, save_path)
                print('Load dis model succeeded!')
            if args.evaluate_tailor:
                generate_discri_sample2()
                sample_path=save_path=args.dis_sample_dir2+'sample.txt'
                rev_ppl=train.file_f(train_data_path=sample_path, val_data_path=args.eval_data_path)
                print('Rev_ppl for Tailor-SMC:{}'.format(rev_ppl))

        except KeyboardInterrupt:
            print('interrupted')
Beispiel #42
0
def get_predictor(checkpoint_path):
    logger.info('loading model')
    import tensorflow as tf
    import model
    from icdar import restore_rectangle
    import lanms
    from eval import resize_image, sort_poly, detect

    input_images = tf.placeholder(tf.float32,
                                  shape=[None, None, None, 3],
                                  name='input_images')
    global_step = tf.get_variable('global_step', [],
                                  initializer=tf.constant_initializer(0),
                                  trainable=False)

    f_score, f_geometry = model.model(input_images, is_training=False)

    variable_averages = tf.train.ExponentialMovingAverage(0.997, global_step)
    saver = tf.train.Saver(variable_averages.variables_to_restore())

    sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True))

    ckpt_state = tf.train.get_checkpoint_state(checkpoint_path)
    model_path = os.path.join(
        checkpoint_path, os.path.basename(ckpt_state.model_checkpoint_path))
    logger.info('Restore from {}'.format(model_path))
    saver.restore(sess, model_path)

    def predictor(img):
        """
        :return: {
            'text_lines': [
                {
                    'score': ,
                    'x0': ,
                    'y0': ,
                    'x1': ,
                    ...
                    'y3': ,
                }
            ],
            'rtparams': {  # runtime parameters
                'image_size': ,
                'working_size': ,
            },
            'timing': {
                'net': ,
                'restore': ,
                'nms': ,
                'cpuinfo': ,
                'meminfo': ,
                'uptime': ,
            }
        }
        """
        start_time = time.time()
        rtparams = collections.OrderedDict()
        rtparams['start_time'] = datetime.datetime.now().isoformat()
        rtparams['image_size'] = '{}x{}'.format(img.shape[1], img.shape[0])
        timer = collections.OrderedDict([('net', 0), ('restore', 0),
                                         ('nms', 0)])

        im_resized, (ratio_h, ratio_w) = resize_image(img)
        rtparams['working_size'] = '{}x{}'.format(im_resized.shape[1],
                                                  im_resized.shape[0])
        start = time.time()
        score, geometry = sess.run(
            [f_score, f_geometry],
            feed_dict={input_images: [im_resized[:, :, ::-1]]})
        timer['net'] = time.time() - start

        boxes, timer = detect(score_map=score, geo_map=geometry, timer=timer)
        logger.info('net {:.0f}ms, restore {:.0f}ms, nms {:.0f}ms'.format(
            timer['net'] * 1000, timer['restore'] * 1000, timer['nms'] * 1000))

        if boxes is not None:
            scores = boxes[:, 8].reshape(-1)
            boxes = boxes[:, :8].reshape((-1, 4, 2))
            boxes[:, :, 0] /= ratio_w
            boxes[:, :, 1] /= ratio_h

        duration = time.time() - start_time
        timer['overall'] = duration
        logger.info('[timing] {}'.format(duration))

        text_lines = []
        if boxes is not None:
            text_lines = []
            for box, score in zip(boxes, scores):
                box = sort_poly(box.astype(np.int32))
                if np.linalg.norm(box[0] -
                                  box[1]) < 5 or np.linalg.norm(box[3] -
                                                                box[0]) < 5:
                    continue
                tl = collections.OrderedDict(
                    zip(['x0', 'y0', 'x1', 'y1', 'x2', 'y2', 'x3', 'y3'],
                        map(float, box.flatten())))
                tl['score'] = float(score)
                text_lines.append(tl)
        ret = {
            'text_lines': text_lines,
            'rtparams': rtparams,
            'timing': timer,
        }
        ret.update(get_host_info())
        return ret

    return predictor
Beispiel #43
0
import model
import numpy as np
from keras.models import Model
from keras.models import load_model

xTrain = ip.imgprocess(trainImg, trainDir) / 255
yTrain = np.array(trainData[['MIDDLE', 'OLD', 'YOUNG']])

#print(type(xTrain))
#print(yTrain[:5])
'''
for i in range(11):
    print(xTrain[i].dtype)
    cv2.imshow(trainData['Class'][i], xTrain[i])
    cv2.waitKey(0)
'''

trainModel = model.model()
trainModel.compile(optimizer='adam',
                   loss='categorical_crossentropy',
                   metrics=['accuracy'])
print(trainModel.summary())

trainModel.fit(xTrain, yTrain, epochs=150, batch_size=1000)

preds = trainModel.evaluate(xTrain, yTrain)
print("Loss = " + str(preds[0]))
print("Train Accuracy = " + str(preds[1]))

trainModel.save('../trainModel.h5')
Beispiel #44
0
import tensorflow as tf
from model import model
import ujson as json
import utils
from reader import reader

with open('./params.json', 'rb') as f:
    params = json.load(f)

vocab, vocab_map, reverse_map = utils.vocab_maker(params['raw_data_dir'])
params['vocab_size'] = max(vocab_map.values()) + 1

reader = reader()
model = model(params)
model.forward()
model.backward()

fp = open('./data/dataset.pkl', 'rb')
init_op = [tf.local_variables_initializer(), tf.global_variables_initializer()]
sess = tf.Session()
sess.run(init_op)
for epoch in range(params['n_epochs']):
    batch = reader.read_batches(fp)
    inps, trgts, weights = utils.process_batches(batch, vocab_map)
    feed_dict = {model.inp: inps, model.trgt: trgts, model.weights: weights}
    logits, loss, _ = sess.run([model.logits, model.loss, model.train_op],
                               feed_dict)
    print(loss)
def train(model,optimizer,epoch,save_dir):
    dataParser = DataParser(args.batch_size)
    batch_time = Averagvalue()
    data_time = Averagvalue()
    losses = Averagvalue()
    # switch to train mode
    model.train()
    end = time.time()
    epoch_loss = []
    counter = 0


    for batch_index ,(images,labels_numpy) in enumerate(generate_minibatches(dataParser,True)):

        # measure data loading time
        data_time.update(time.time()-end)

        labels = []
        if torch.cuda.is_available():
            images = torch.from_numpy(images).cuda()
            for item in labels_numpy:
                labels.append(torch.from_numpy(item).cuda())
        else:
            images = torch.from_numpy(images)
            for item in labels_numpy:
                labels.append(torch.from_numpy(item))

        if torch.cuda.is_available():
            loss =torch.zeros(1).cuda()
        else:
            loss = torch.zeros(1)

        optimizer.zero_grad()
        outputs = model(images)
        # 四张GT监督

        for o in outputs[9:]: # o2 o3 o4
            t_loss = cross_entropy_loss(o, labels[-1])
            loss = loss +t_loss
        counter +=1

        for c_index,c in enumerate(outputs[:8]):
            loss = loss + cross_entropy_loss(c, labels[c_index])
        loss = loss/11
        loss.backward()
        acc_scroe = my_accuracy_score(outputs[9].cpu().detach().numpy(),labels[-1].cpu().detach().numpy())
        print('the acc is :',acc_scroe)




        # 下面应该是用来解决batch size 过下的问题
        # if counter == args.itersize:
        #     optimizer.step()
        #     optimizer.zero_grad()
        #     counter = 0

        optimizer.step()
        optimizer.zero_grad()

        # measure the accuracy and record loss
        losses.update(loss.item(),images.size(0))
        epoch_loss.append(loss.item())
        batch_time.update(time.time()-end)
        end = time.time()

        # display and logging
        if not isdir(save_dir):
            os.makedirs(save_dir)
        if batch_index % args.print_freq ==0:
            info = 'Epoch: [{0}/{1}][{2}/{3}] '.format(epoch, args.maxepoch, batch_index, dataParser.steps_per_epoch) + \
                   'Time {batch_time.val:.3f} (avg:{batch_time.avg:.3f}) '.format(batch_time=batch_time) + \
                   'Loss {loss.val:f} (avg:{loss.avg:f}) '.format(
                       loss=losses)
            print(info)

        # torch.save(model,join(save_dir,"checkpoint.pth"))
    # 每一轮保存一次参数
    save_checkpoint({'epoch': epoch,'state_dict':model.state_dict(), 'optimizer': optimizer.state_dict()},filename=join(save_dir,"epooch-%d-checkpoint.pth" %epoch))


    return losses.avg,epoch_loss
Beispiel #46
0
def train_main(dataset,
               model_name='345M',
               seed=None,
               batch_size=1,
               sample_length=1023,
               sample_num=1,
               sample_every=100,
               run_name='run1',
               restore_from='latest',
               stop_after=None,
               learning_rate=0.001,
               beta1=0.9,
               beta2=0.999,
               epsilon=1e-08,
               save_every=1000):

    enc = encoder.get_encoder(model_name)
    hparams = model.default_hparams()
    with open(os.path.join('models', model_name, 'hparams.json')) as f:
        hparams.override_from_dict(json.load(f))

    if sample_length is None:
        sample_length = hparams.n_ctx // 2
    elif sample_length > hparams.n_ctx:
        raise ValueError("Can't get samples longer than window size: %s" %
                         hparams.n_ctx)

    config = tf.ConfigProto()
    config.gpu_options.allow_growth = True
    with tf.Session(config=config) as sess:
        context = tf.placeholder(tf.int32, [batch_size, None])
        np.random.seed(seed)
        tf.set_random_seed(seed)
        output = model.model(hparams=hparams, X=context)
        loss = tf.reduce_mean(
            tf.nn.sparse_softmax_cross_entropy_with_logits(
                labels=context[:, 1:], logits=output['logits'][:, :-1]))

        tf_sample = sample.sample_sequence(hparams=hparams,
                                           length=sample_length,
                                           context=context,
                                           batch_size=batch_size,
                                           temperature=1.0,
                                           top_k=40)

        train_vars = [v for v in tf.trainable_variables() if 'model' in v.name]
        opt = tf.train.AdamOptimizer(learning_rate=learning_rate,
                                     beta1=beta1,
                                     beta2=beta2,
                                     epsilon=epsilon).minimize(
                                         loss, var_list=train_vars)

        saver = tf.train.Saver(var_list=train_vars,
                               max_to_keep=5,
                               keep_checkpoint_every_n_hours=2)
        sess.run(tf.global_variables_initializer())

        if restore_from == 'latest':
            ckpt = tf.train.latest_checkpoint(
                os.path.join(CHECKPOINT_DIR, run_name))
            if ckpt is None:
                # Get fresh GPT weights if new run.
                ckpt = tf.train.latest_checkpoint(
                    os.path.join('models', model_name))
        elif restore_from == 'fresh':
            ckpt = tf.train.latest_checkpoint(
                os.path.join('models', model_name))
        else:
            ckpt = tf.train.latest_checkpoint(restore_from)
        print('Loading checkpoint', ckpt)
        saver.restore(sess, ckpt)

        print('Loading dataset...')
        chunks = load_dataset(enc, dataset)
        data_sampler = Sampler(chunks)
        print('dataset has', data_sampler.total_size, 'tokens')
        print('Training...')

        counter = 1
        if os.path.exists(os.path.join(CHECKPOINT_DIR, run_name, 'counter')):
            # Load the step number if we're resuming a run
            # Add 1 so we don't immediately try to save again
            with open(os.path.join(CHECKPOINT_DIR, run_name, 'counter'),
                      'r') as fp:
                counter = int(fp.read()) + 1

        def save():
            maketree(os.path.join(CHECKPOINT_DIR, run_name))
            print(
                'Saving',
                os.path.join(CHECKPOINT_DIR, run_name,
                             'model-{}').format(counter))
            saver.save(sess,
                       os.path.join(CHECKPOINT_DIR, run_name, 'model'),
                       global_step=counter)
            with open(os.path.join(CHECKPOINT_DIR, run_name, 'counter'),
                      'w') as fp:
                fp.write(str(counter) + '\n')

        def generate_samples():
            context_tokens = data_sampler.sample(1)
            all_text = []
            index = 0
            while index < sample_num:
                out = sess.run(
                    tf_sample,
                    feed_dict={context: batch_size * [context_tokens]})
                for i in range(min(sample_num - index, batch_size)):
                    text = enc.decode(out[i])
                    text = '======== SAMPLE {} ========\n{}\n'.format(
                        index + 1, text)
                    all_text.append(text)
                    index += 1
            print(text)
            maketree(os.path.join(SAMPLE_DIR, run_name))
            with open(
                    os.path.join(SAMPLE_DIR, run_name,
                                 'samples-{}').format(counter), 'w') as fp:
                fp.write('\n'.join(all_text))

        avg_loss = (0.0, 0.0)
        start_time = time.time()

        try:
            while counter != stop_after:
                if counter % save_every == 0:
                    save()
                if counter % sample_every == 0:
                    generate_samples()

                batch = [data_sampler.sample(1024) for _ in range(batch_size)]

                _, lv = sess.run((opt, loss), feed_dict={context: batch})

                avg_loss = (avg_loss[0] * 0.99 + lv, avg_loss[1] * 0.99 + 1.0)

                print(
                    '[{counter} | {time:2.2f}] loss={loss:2.2f} avg={avg:2.2f}'
                    .format(counter=counter,
                            time=time.time() - start_time,
                            loss=lv,
                            avg=avg_loss[0] / avg_loss[1]))

                counter += 1
        except KeyboardInterrupt:
            print('interrupted')
        finally:
            save()
Beispiel #47
0
 def __init__(self):
     mixer.init()
     self.my_model = model.model()
Beispiel #48
0
# coding:utf-8
import time
from glob import glob

import numpy as np
from PIL import Image

import model

paths = glob('./test/*.*')

if __name__ == '__main__':
    im = Image.open("./test/010.png")
    img = np.array(im.convert('RGB'))
    t = time.time()
    result, img, angle = model.model(img,
                                     model='keras',
                                     adjust=True,
                                     detectAngle=True)
    print("It takes time:{}s".format(time.time() - t))
    print("---------------------------------------")
    for key in result:
        print(result[key][1])
Beispiel #49
0
def do_train(args):
    # create model
    dnn_model = model(args.architecture, args.num_classes)

    if args.num_gpus == 1:
        dnn_model = dnn_model.cuda()
    else:
        dnn_model = torch.nn.DataParallel(dnn_model, device_ids = range(0, args.num_gpus)).cuda()

    # define loss function (criterion) and optimizer
    criterion = nn.CrossEntropyLoss().cuda()
    lr = utils.get_policy(args.LR_policy, args.LR_details)
    wd = utils.get_policy(args.WD_policy, args.WD_details)
    optimizer = utils.get_optimizer(args.optimizer, dnn_model.parameters(), 0.01)
    train_loader = data_loader.CSVDataset(args.train_info, args.delimiter, args.raw_size, args.processed_size, args.batch_size, args.num_workers, args.path_prefix, True, shuffle = True).load()
    start_epoch = 0
    if args.retrain_from is not None:
        checkpoint = torch.load(utils.smart_load(args.retrain_from))
        dnn_model.module.load_state_dict(checkpoint['model'])
        if args.transfer_mode[0] == 0:
            optimizer.load_state_dict(checkpoint['optimizer'])
            start_epoch = checkpoint['epoch']
        if args.transfer_mode[0] == 1 or args.transfer_mode[0] == 3:
            dnn_model.freeze()
    

    if args.run_validation:
        val_loader= data_loader.CSVDataset(args.val_info, args.delimiter, args.raw_size, args.processed_size, args.batch_size, args.num_workers, args.path_prefix, False, shuffle = False).load()
    for epoch in range(start_epoch, start_epoch + args.num_epochs):
        if args.optimizer not in ['adam', 'adadelta']:
          utils.adjust_param(optimizer, 'lr', lr, epoch)
        utils.adjust_param(optimizer, 'weight_decay', wd, epoch)
        if args.transfer_mode[0] == 3 and epoch==args.transfer_mode[1]:
            dnn_model.unfreeze()
        batch_time = utils.AverageMeter()
        data_time = utils.AverageMeter()
        losses = utils.AverageMeter()
        top1 = utils.AverageMeter()
        topn = utils.AverageMeter()

        # switch to train mode
        dnn_model.train()
        end = time.time()
        for step, (input, target, _) in islice(enumerate(train_loader), args.num_batches):
            # measure data loading time
            data_time.update(time.time() - end)
            input = input.cuda(non_blocking=True)
            target = target.cuda(non_blocking=True)

            # compute output
            output = dnn_model(input)
            #print(output,target)
            loss = criterion(output, target)

            # measure accuracy and record loss
            prec1, precn = utils.accuracy(output, target, topk=(1, args.top_n))
            losses.update(loss.item(), input.size(0))
            top1.update(prec1[0], input.size(0))
            topn.update(precn[0], input.size(0))
            #print(loss.item(), prec1[0], precn[0])
            # compute gradient and do SGD step
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()

            # measure elapsed time
            batch_time.update(time.time() - end)
            end = time.time()

            if step % 10 == 0:
                format_str = ('%s: epoch %d, step %d, loss = %.2f, Top-1 = %.2f Top-' + str(args.top_n) + ' = %.2f')
                print(format_str % (datetime.now(), epoch, step, losses.val, top1.val, topn.val))
                sys.stdout.flush()
        state= {'epoch': epoch + 1,
              'arch': args.architecture,
              'num_classes': args.num_classes,
              'model': dnn_model.module.state_dict(),
              'optimizer': optimizer.state_dict()
               }
        torch.save(state, utils.smart_save(os.path.join(args.log_dir, 'checkpoint%04d.pth.tar'%(epoch)), max_to_keep = args.max_to_keep))
            # if validation data are provided, evaluate accuracy on the validation set after the end of each epoch
        if args.run_validation:
            valbatch_time = utils.AverageMeter()
            vallosses = utils.AverageMeter()
            valtop1 = utils.AverageMeter()
            valtop5 = utils.AverageMeter()

            # switch to evaluate mode
            dnn_model.eval()

            with torch.no_grad():
                end = time.time()
                for i, (input, target, _) in enumerate(val_loader):
                    input = input.cuda(non_blocking = True)
                    target = target.cuda(non_blocking = True)

                    # compute output
                    output = dnn_model(input)
                    loss = criterion(output, target)

                    # measure accuracy and record loss
                    prec1, prec5 = utils.accuracy(output, target, topk = (1, 5))
                    vallosses.update(loss.item(), input.size(0))
                    valtop1.update(prec1[0], input.size(0))
                    valtop5.update(prec5[0], input.size(0))

                    # measure elapsed time
                    valbatch_time.update(time.time() - end)
                    end = time.time()

                    print('Test: [{0}/{1}]\t'
                        'Time {batch_time.val:.3f} ({batch_time.avg:.3f})\t'
                        'Loss {loss.val:.4f} ({loss.avg:.4f})\t'
                        'Prec@1 {top1.val:.3f} ({top1.avg:.3f})\t'
                        'Prec@5 {top5.val:.3f} ({top5.avg:.3f})'.format(
                        i, len(val_loader), batch_time = valbatch_time, loss = vallosses,
                        top1 = valtop1, top5 = valtop5))
                    sys.stdout.flush()
    print('Training finished')
import model, readin

# Reading config file
path = r'./_init/config.ini'
input_config = readin.readin(path)

# Create model
thismodel = model.model(input_config['location'], input_config['number_of_cars'], \
                        input_config['number_of_CPs'], input_config['firstday'], \
                        input_config['lastday'], input_config['trainingpercentage'], \
                        input_config['timestep'], input_config['EIT_radius'], \
                        input_config['Comb_diameter'], input_config['ip_address'], \
                        input_config['minimum cars'], input_config['maximum cars'])

# Run simulations
thismodel.run()

# Save results
thismodel.save_results()


Beispiel #51
0
def do_evaluate(args):
    # if we want to do inference only (i.e. no label is provided) we only load images and their paths

    val_loader = data_loader.CSVDataset(args.val_info, args.delimiter, args.raw_size, args.processed_size, args.batch_size, args.num_workers, args.path_prefix, False,
            shuffle = False, inference_only= args.inference_only).load()

    checkpoint = torch.load(utils.smart_load(args.log_dir))
    dnn_model = model(checkpoint['arch'], checkpoint['num_classes'])
    
    if args.num_gpus == 1:
        dnn_model = dnn_model.cuda()
        # Load pretrained parameters from disk
        dnn_model.load_state_dict(checkpoint['model'])
    else:
        dnn_model = torch.nn.DataParallel(dnn_model, device_ids = range(0, args.num_gpus)).cuda()
        # Load pretrained parameters from disk
        dnn_model.module.load_state_dict(checkpoint['model'])

    criterion = nn.CrossEntropyLoss().cuda()
    # evaluation 
    if not args.inference_only:
        losses = utils.AverageMeter()
        top1 = utils.AverageMeter()
        topn = utils.AverageMeter()

        # Open an output file to write predictions
        out_file = open(args.save_predictions, 'w')
        predictions_format_str = ('%d, %s, %d, %s, %s\n')
        for step,(input, target, info) in enumerate(val_loader):
            input = input.cuda(non_blocking = True)
            target = target.cuda(non_blocking = True)
            # Load a batch of data
            output= softmax(dnn_model(input))
            loss = criterion(output, target)

            # measure accuracy and record loss
            prec1, prec5 = utils.accuracy(output, target, topk=(1, args.top_n))
            losses.update(loss.item(), input.size(0))
            top1.update(prec1[0], input.size(0))
            topn.update(prec5[0], input.size(0))

            print('Batch Number: %d, Top-1 Hit: %d, Top-%d Hit: %d, Loss %.2f, Top-1 Accuracy: %.3f, Top-%d Accuracy: %.3f'%
                (step, top1.val, args.top_n, topn.val, losses.avg, top1.avg, args.top_n, topn.avg))

            # log results into an output file
            topnconf, topnguesses = output.topk(args.top_n, 1, True, True)
            for i in range(0, len(info)):
                out_file.write(predictions_format_str % (step * args.batch_size + i + 1, str(info[i]).encode('utf-8'), target[i],
                    ', '.join('%d' % item for item in topnguesses[i]),
                    ', '.join('%.4f' % item for item in topnconf[i])))
            out_file.flush()
            sys.stdout.flush()
        out_file.close()
    #inference
    else:
        
        # Open an output file to write predictions
        out_file = open(args.save_predictions, 'w')
        predictions_format_str = ('%d, %s, %s, %s\n')

        for step,(input, info) in enumerate(val_loader):
            # Load a batch of data
            input = input.cuda(non_blocking = True)
            # Load a batch of data
            output= softmax(dnn_model(input))

            # Run the network on the loaded batch
            topnconf,topnguesses = output.topk(args.top_n,1, True, True)
            print('Batch Number: %d of %d is done'%(step, args.num_val_batches))

            # Log to an output file
            for i in range(0, len(info)):
                out_file.write(predictions_format_str % (step * args.batch_size + i + 1, str(info[i]).encode('utf-8'),
                    ', '.join('%d' % item for item in topnguesses[i]),
                    ', '.join('%.4f' % item for item in topnconf[i])))
            out_file.flush()

        out_file.close()
Beispiel #52
0
def main(_):
    # Print FLAGS values
    pprint(FLAGS.flag_values_dict())

    # Define GPU configuration
    os.environ['CUDA_DEVICE_ORDER'] = 'PCI_BUS_ID'
    os.environ['CUDA_VISIBLE_DEVICES'] = FLAGS.gpu
    gpu_config = tf.ConfigProto()
    gpu_config.gpu_options.allow_growth = True

    # Define model name
    if not FLAGS.phase:
        setup_list = [
            f"ngf_{FLAGS.ngf}",
            f"ndf_{FLAGS.ndf}",
            f"nz_{FLAGS.nz}",
            f"lrD_{FLAGS.lrD}",
            f"lrG_{FLAGS.lrG}",
            # f"dg_{FLAGS.dg}",
            # f"aug_{FLAGS.aug}",
            f"lw_{FLAGS.alpha}",
            f"ow_{FLAGS.beta}",
            f"var_{FLAGS.var}",
            f"phase_{FLAGS.phase}",
            f"da_{FLAGS.da}",
            f"clip_{FLAGS.clip}"
            # f"wgan_{FLAGS.wgan}"
            # f"nosig"
        ]
    else:
        setup_list = [
            f"ngf_{FLAGS.ngf}",
            f"ndf_{FLAGS.ndf}",
            f"nz_{FLAGS.nz}",
            f"lrD_{FLAGS.lrD}",
            f"lrG_{FLAGS.lrG}",
            # f"dg_{FLAGS.dg}",
            f"lw_{FLAGS.alpha}",
            f"ow_{FLAGS.beta}",
            f"var_{FLAGS.var}",
            f"phase_{FLAGS.phase}",
            f"da_{FLAGS.da}",
            f"clip_{FLAGS.clip}",
            # f"wgan_{FLAGS.wgan}",
            f"nhl_{FLAGS.nhl}",
            f"nhw_{FLAGS.nhw}"
        ]

    model_name = '_'.join(setup_list)
    print(f"Model name: {model_name}")

    M = model(FLAGS, gpu_config)
    M.sess.run(tf.global_variables_initializer())

    if FLAGS.phase:
        # Previously learned autoencoder model name
        setup_list = [
            f"ngf_{FLAGS.ngf}",
            f"ndf_{FLAGS.ndf}",
            f"nz_{FLAGS.nz}",
            f"lrD_{FLAGS.lrD}",
            f"lrG_{FLAGS.lrG}",
            # f"dg_{FLAGS.dg}",
            # f"aug_{FLAGS.aug}",
            f"lw_{FLAGS.alpha}",
            f"ow_{FLAGS.beta}",
            f"var_{FLAGS.var}",
            f"phase_0",
            f"da_{FLAGS.da}",
            f"clip_{FLAGS.clip}"
            # f"wgan_{FLAGS.wgan}"
            # f"nosig"
        ]
        lgan_name = '_'.join(setup_list)
        # just for now
        # lgan_name = 'ngf_64_ndf_64_nz_64_lrD_5e-05_lrG_0.001_dg_1_aug_0_lw_20.0_ow_0.01_var_3.0_phase_0_nosig'
        lgan_name = 'ngf_64_ndf_64_nz_16_lw_20.0_ow_0.01_var_3.0_phase_0'
        var_lgan = tf.get_collection('trainable_variables', 'lgan/gen')
        path = tf.train.latest_checkpoint(
            os.path.join(FLAGS.ckptdir, lgan_name))
        tf.train.Saver(var_lgan).restore(M.sess, path)
        print(colored(f"LGAN model is restored from {path}", "blue"))

    saver = tf.train.Saver()

    # Train the main model
    train(M, FLAGS, saver=saver, model_name=model_name)
def main():
    args = parser.parse_args()
    enc = encoder.get_encoder(args.model_name)
    hparams = model.default_hparams()
    with open(os.path.join('models', args.model_name, 'hparams.json')) as f:
        hparams.override_from_dict(json.load(f))

    if args.sample_length > hparams.n_ctx:
        raise ValueError("Can't get samples longer than window size: %s" %
                         hparams.n_ctx)

    config = tf.ConfigProto()
    config.gpu_options.allow_growth = True
    with tf.Session(config=config) as sess:
        context = tf.placeholder(tf.int32, [args.batch_size, None])
        output = model.model(hparams=hparams, X=context)
        loss = tf.reduce_mean(
            tf.nn.sparse_softmax_cross_entropy_with_logits(
                labels=context[:, 1:], logits=output['logits'][:, :-1]))

        tf_sample = sample.sample_sequence(hparams=hparams,
                                           length=args.sample_length,
                                           context=context,
                                           batch_size=args.batch_size,
                                           temperature=1.0,
                                           top_k=40)

        train_vars = [v for v in tf.trainable_variables() if 'model' in v.name]
        if args.accumulate_gradients > 1:
            opt = AccumulatingOptimizer(
                opt=tf.train.AdamOptimizer(learning_rate=args.learning_rate),
                var_list=train_vars)
            opt_reset = opt.reset()
            opt_compute = opt.compute_gradients(loss)
            opt_apply = opt.apply_gradients()
            summary_loss = tf.summary.scalar('loss', opt_apply)
        else:
            opt_apply = tf.train.AdamOptimizer(
                learning_rate=args.learning_rate).minimize(loss,
                                                           var_list=train_vars)
            summary_loss = tf.summary.scalar('loss', loss)

        summary_log = tf.summary.FileWriter(
            os.path.join(CHECKPOINT_DIR, args.run_name))

        saver = tf.train.Saver(var_list=train_vars,
                               max_to_keep=5,
                               keep_checkpoint_every_n_hours=2)
        sess.run(tf.global_variables_initializer())

        if args.restore_from == 'latest':
            ckpt = tf.train.latest_checkpoint(
                os.path.join(CHECKPOINT_DIR, args.run_name))
            if ckpt is None:
                # Get fresh GPT weights if new run.
                ckpt = tf.train.latest_checkpoint(
                    os.path.join('models', args.model_name))
        elif args.restore_from == 'fresh':
            ckpt = tf.train.latest_checkpoint(
                os.path.join('models', args.model_name))
        else:
            ckpt = tf.train.latest_checkpoint(args.restore_from)
        print('Loading checkpoint', ckpt)
        saver.restore(sess, ckpt)

        print('Loading dataset...')
        chunks = load_dataset(enc, args.dataset, args.combine)
        # 	    sample_chunks = load_dataset(enc, args.sampledataset, args.combine)
        data_sampler = Sampler(chunks)
        print('dataset has', data_sampler.total_size, 'tokens')
        print('Training...')
        token_test = np.stack(
            enc.encode(
                "Great Android Phone. This is a very nice phone. The screen is easy to read and the phone performs flawlessly."
            ))
        print(test_sample)
        counter = 1
        counter_path = os.path.join(CHECKPOINT_DIR, args.run_name, 'counter')
        if os.path.exists(counter_path):
            # Load the step number if we're resuming a run
            # Add 1 so we don't immediately try to save again
            with open(counter_path, 'r') as fp:
                counter = int(fp.read()) + 1

        def save():
            maketree(os.path.join(CHECKPOINT_DIR, args.run_name))
            print(
                'Saving',
                os.path.join(CHECKPOINT_DIR, args.run_name,
                             'model-{}').format(counter))
            saver.save(sess,
                       os.path.join(CHECKPOINT_DIR, args.run_name, 'model'),
                       global_step=counter)
            with open(counter_path, 'w') as fp:
                fp.write(str(counter) + '\n')

        def generate_samples():
            context_tokens = token_test
            all_text = []
            index = 0
            while index < args.sample_num:
                out = sess.run(
                    tf_sample,
                    feed_dict={context: args.batch_size * [context_tokens]})
                for i in range(min(args.sample_num - index, args.batch_size)):
                    text = enc.decode(out[i])
                    text = '================ Generated version {} ================\n{}\n'.format(
                        index + 1, text)
                    all_text.append(text)
                    index += 1

            print("start sentense :" + enc.decode(token_test))
            print(text)

            maketree(os.path.join(SAMPLE_DIR, args.run_name))
            with open(
                    os.path.join(SAMPLE_DIR, args.run_name,
                                 'samples-{}').format(counter), 'w') as fp:
                fp.write('\n'.join(all_text))

        def sample_batch():
            return [data_sampler.sample(1024) for _ in range(args.batch_size)]

        avg_loss = (0.0, 0.0)

        try:
            while True:
                start_time = time.time()
                if counter % args.save_every == 0:
                    save()
                if counter % args.sample_every == 0:
                    generate_samples()

                if args.accumulate_gradients > 1:
                    sess.run(opt_reset)
                    for _ in range(args.accumulate_gradients):
                        sess.run(opt_compute,
                                 feed_dict={context: sample_batch()})
                    (v_loss, v_summary) = sess.run((opt_apply, summary_loss))
                else:
                    (_, v_loss, v_summary) = sess.run(
                        (opt_apply, loss, summary_loss),
                        feed_dict={context: sample_batch()})

                summary_log.add_summary(v_summary, counter)

                avg_loss = (avg_loss[0] * 0.99 + v_loss,
                            avg_loss[1] * 0.99 + 1.0)
                if counter % args.sample_every == 0:
                    print(
                        '[{counter} | {time:2.2f}] loss={loss:2.2f} avg={avg:2.2f}'
                        .format(counter=counter,
                                time=time.time() - start_time,
                                loss=v_loss,
                                avg=avg_loss[0] / avg_loss[1]))
                    start_time = time.time()

                counter += 1
        except KeyboardInterrupt:
            print('interrupted')
            save()
                # if d_cnt < self.args.d_count:
                #     self.update_d(loss_)
                #     a = [self.d_r_loss.cpu().view(-1),self.d_f_loss.cpu().view(-1),self.d_cost.cpu().view(-1),self.wasserstein.cpu().view(-1)]
                #     a = np.array([[l.detach().numpy()[0] for l in a]])
                #     self.save_d_loss = util.add_loss(self.save_d_loss,a)
                #     #print(
                #     #    'batch:{}/{}--d_real_loss = {:0.6f}, d_fake_loss = {:0.6f},d_cost = {:0.6f}, wasserstein = {:0.6f}\n' \
                #     #        .format(n_batch, self.args.n_train // self.args.batch_size + 1, self.d_r_loss,
                #     #                self.d_f_loss, self.d_cost, self.wasserstein)
                #     #)
                # else:
                #     d_cnt = 0
                self.update_g(loss_)
                # a=self.g_cost.cpu().view(-1).detach().numpy()
                # self.save_g_loss = util.add_loss(self.save_g_loss,a)
                # self.save_g_loss = torch.cat([self.save_g_loss, a], 0)
                # del(a)
                print('p_loss={:0.6f}'.format(self.p_loss))
                # d_cnt += 1
            util.save_mdoel(self.args.result_dir, self.model.g,
                            'single_generator')


if __name__ == '__main__':
    data_ = data.Data(args)
    model_ = model(args)

    trainer_ = trainer(args, model_, data_)
    trainer_.train()
Beispiel #55
0
import numpy as np
import matplotlib.pyplot as plt
import sklearn
import sklearn.datasets
from misc import predict, load_dataset, plot_decision_boundary, predict_dec
from model import model

# %matplotlib inline
plt.rcParams['figure.figsize'] = (7.0, 4.0)  # set default size of plots
plt.rcParams['image.interpolation'] = 'nearest'
plt.rcParams['image.cmap'] = 'gray'

# load image dataset: blue/red dots in circles
train_X, train_Y, test_X, test_Y = load_dataset()

parameters = model(train_X, train_Y, initialization="zeros")
print("On the train set:")
predictions_train = predict(train_X, train_Y, parameters)
print("On the test set:")
predictions_test = predict(test_X, test_Y, parameters)
plt.title("Model with Zeros initialization")
axes = plt.gca()
axes.set_xlim([-1.5, 1.5])
axes.set_ylim([-1.5, 1.5])
plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X,
                       train_Y)

parameters = model(train_X, train_Y, initialization="random")
print("On the train set:")
predictions_train = predict(train_X, train_Y, parameters)
print("On the test set:")
Beispiel #56
0
def training(model, loss_fn, optimizer, filename):
    try:
        os.makedirs(args.SCNN_checkpoint_path)
    except:
        pass

    saved_epoch = 0
    min_valid_loss = 1e10
    loss_hist = {'train loss': [], 'valid loss': []}
    with tqdm(range(1, args.epoch + 1)) as pbar1, \
            tqdm(total=len(args.train_noise_type)) as pbar2, \
            tqdm(total=len(args.train_noise_type)) as pbar3:
        for epoch in pbar1:
            loss_hist['train loss'] = []

            pbar2.reset()
            for n, noise_type in enumerate(args.train_noise_type):
                bs = 0
                loss = 0

                pbar2.set_description_str(
                    f'(Epoch {epoch}) noise type: {noise_type}')
                for sample in range(1, 224):
                    if sample == 103:
                        continue

                    Sx, _, elec, clean = load_data(noise_type, sample)
                    noisy = torch.Tensor([Sx.T]).to(args.device)

                    enhan = model(noisy, elec)
                    loss += model.get_loss(loss_fn, enhan, clean)
                    bs += 1
                    if bs >= args.batch_size:
                        loss /= bs
                        loss_item = loss.item()

                        optimizer.zero_grad()
                        loss.backward()
                        optimizer.step()

                        loss_hist['train loss'].append(loss_item)
                        loss = 0
                        bs = 0

                    pbar2.refresh()
                    pbar1.refresh()

                if bs != 0:
                    loss /= bs
                    loss_item = loss.item()

                    optimizer.zero_grad()
                    loss.backward()
                    optimizer.step()

                    loss_hist['train loss'].append(loss_item)
                    loss = 0
                    bs = 0

                pbar2.set_postfix(loss=loss_item)
                pbar2.update()

            # ===== Validation =====
            pbar3.reset()
            valid_loss = 0
            valid_sample = 0
            for n, noise_type in enumerate(args.train_noise_type):
                pbar3.set_description_str(f'noise type: {noise_type}')
                for sample in range(224, 251):
                    Sx, _, elec, clean = load_data(noise_type,
                                                   sample,
                                                   norm=model.use_norm)
                    noisy = torch.Tensor([Sx.T]).to(args.device)

                    with torch.no_grad():
                        enhan = model(noisy, elec)
                        valid_loss += model.get_loss(loss_fn, enhan,
                                                     clean).item()
                    valid_sample += 1

                    pbar3.set_postfix(valid_loss=valid_loss / valid_sample)
                    pbar1.refresh()
                pbar3.update()

            valid_loss /= valid_sample
            loss_hist['valid loss'].append(valid_loss)

            if valid_loss < min_valid_loss:
                min_valid_loss = valid_loss
                saved_epoch = epoch
                model.save_model(args.SCNN_checkpoint_path,
                                 f'{filename} (Epoch {args.epoch}).pt')

            pbar3.set_description_str(
                f'Saved Epoch: {saved_epoch}, min valid loss: {min_valid_loss}'
            )

            # plt.figure()
            plt.plot(loss_hist['train loss'])
            plt.plot(
                np.linspace(0, len(loss_hist['train loss']),
                            len(loss_hist['valid loss'])),
                loss_hist['valid loss'])
            # plt.xlabel('iteration')
            # plt.ylabel('loss')
            plt.legend(['Train', 'Valid'])
            plt.tight_layout(pad=0.2)
            # if epoch == 1:
            #     plt.savefig(args.SCNN_checkpoint_path + f'{filename} (Epoch 1).svg')
            plt.show()
Beispiel #57
0
#可调整的参数
test_batch_size = 8#如炸显存请调小
title = 'final_test'
test_path = './test_nii/'#存放测试数据路径,根据实际情况修改
Model_path = './7.pth'#存放权重路径,根据实际情况修改
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
transform = transforms.Compose([
    transforms.ToTensor()
])
save_path = './'+title+'_result/'#保存结果路径,根据实际情况修改
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
#####

file_list = os.listdir(test_path)
file_list.sort()
Model = model().to(device)
utils.path_checker(save_path)
Model.load_state_dict(torch.load(Model_path))

for name in file_list:
    if name.split('.')[-1]!='nii':
        break
    test_set = Dataset(path=test_path+name, transform=transform)
    test_loader = DataLoader(test_set, batch_size=test_batch_size, shuffle=False)

    output = []
    for index, img in enumerate(test_loader):
        if index==len(test_loader)-1:
            sys.stdout.write("\r[{}] [Batch {}/{}]\n".format(name, index+1, len(test_loader)))
        else:
            sys.stdout.write("\r[{}] [Batch {}/{}]".format(name, index+1, len(test_loader)))
Beispiel #58
0
    def construct_model(self, ckpt_dir=None):
        # Define inputs
        self.X = tf.placeholder(tf.float32, [None, 32, 32, 3])
        self.y = tf.placeholder(tf.int64, [None])
        self.is_training = tf.placeholder(tf.bool)
        self.global_step = tf.train.get_or_create_global_step()

        # ================================================================ #
        # YOUR CODE HERE:
        #   define our model
        #   save output of the model to self.y_out
        # ================================================================ #

        self.y_out = model(self.X, self.y)

        # ================================================================ #
        # END YOUR CODE HERE
        # ================================================================ #

        # Define our loss
        total_loss = tf.losses.softmax_cross_entropy(tf.one_hot(self.y, 10),
                                                     logits=self.y_out)
        self.mean_loss = tf.reduce_mean(total_loss)

        # Define our optimizer
        self.optimizer = tf.train.AdamOptimizer(
            5e-4)  # select optimizer and set learning rate

        # split train_step = optimizer.minimize(self.mean_loss)
        train_gradient = self.optimizer.compute_gradients(self.mean_loss)

        # initialize or load model parameters
        self.saver = tf.train.Saver(max_to_keep=10)
        if ckpt_dir is not None:
            self.saver.restore(self.sess, tf.train.latest_checkpoint(ckpt_dir))
            print('Pre-trained model restored from %s' % (ckpt_dir))
        else:
            self.sess.run(tf.global_variables_initializer())
            print('Initialize variables')
        # ================================================================ #
        # YOUR CODE HERE:
        #   implement in prune_utils.py
        #   1.prune parameters based on your threshold
        #     (make sure pruning is effectively applied in step 1)
        #   2.get pruned gradient update operator accordingly, save to prune_gradient
        # ================================================================ #

        prune_gradient = get_prune_op(self.sess,
                                      train_gradient,
                                      percentage=0.6)

        # ================================================================ #
        # END YOUR CODE HERE
        # ================================================================ #
        # save pruned parameters
        tmp_dir = '__tmp__'
        if not os.path.exists(tmp_dir):
            os.makedirs(tmp_dir)
        self.saver.save(self.sess, os.path.join(tmp_dir, 'pruned_model.ckpt'))
        # define gradients and initialize optimizer parameters
        self.train_op = self.optimizer.apply_gradients(
            prune_gradient, global_step=self.global_step)
        self.sess.run(tf.global_variables_initializer())
        # reload pruned parameters
        self.saver.restore(self.sess, tf.train.latest_checkpoint(tmp_dir))
        if os.path.exists(tmp_dir):
            shutil.rmtree(tmp_dir)
Beispiel #59
0
remove_terms = punctuation + '0123456789'

norm_bible = [[word.lower() for word in sent if word not in remove_terms]
              for sent in bible]
norm_bible = [' '.join(tok_sent) for tok_sent in norm_bible]
norm_bible = filter(None, normalize_corpus(norm_bible))
norm_bible = [tok_sent for tok_sent in norm_bible if len(tok_sent.split()) > 2]

tokenizer = text.Tokenizer()
word2id, id2word, sequences = tokenization(tokenizer, norm_bible)

vocab_size = len(word2id)
embed_size = 100
window_size = 2

cbow = model(vocab_size, embed_size, window_size)
cbow.summary()

for epoch in range(1, 6):
    loss = 0
    i = 0
    for x, y in generate_context_word_pairs(corpus=sequences,
                                            window_size=window_size,
                                            vocab_size=vocab_size):
        i += 1
        loss += cbow.train_on_batch(x, y)
        if i % 100000 == 0:
            print('Processed {} (context, word) pairs'.format(i))

    print('Epoch:', epoch, '\tloss:', loss)
    print()
Beispiel #60
0
# coding:utf-8
import time
from glob import glob

import numpy as np
from PIL import Image

import model
# ces

paths = glob('./test/*.*')

if __name__ == '__main__':
    im = Image.open("./test/a001.png")
    img = np.array(im.convert('RGB'))
    t = time.time()
    '''
    result,img,angel分别对应-识别结果,图像的数组,文字旋转角度
    '''
    result, img, angle = model.model(img,
                                     model='pytorch',
                                     adjust=True,
                                     detectAngle=True)
    print("It takes time:{}s".format(time.time() - t))
    print("---------------------------------------")
    for key in result:
        print(result[key][1])