[go: nahoru, domu]

Skip to content

Commit

Permalink
add prediction
Browse files Browse the repository at this point in the history
  • Loading branch information
gkfthddk committed Dec 4, 2017
1 parent 75907c4 commit d959ada
Show file tree
Hide file tree
Showing 3 changed files with 231 additions and 5 deletions.
146 changes: 143 additions & 3 deletions YJ-Keras/iter.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ def __init__(self,data_path,data_names=['data'],label_names=['softmax_label'],ba
self.qEnd.append(int(self.qEntries[i]*end))
self.gEnd.append(int(self.gEntries[i]*end))
self.qnum+=self.qEnd[i]-self.qBegin[i]
self.gnum+=self.gEnd[i]-self.qBegin[i]
self.gnum+=self.gEnd[i]-self.gBegin[i]
self.a=self.gBegin[0]
self.b=self.qBegin[0]
self.aq=self.gBegin[self.frat]
Expand Down Expand Up @@ -156,9 +156,9 @@ def totalnum(self):
#a=0
#for i in range(self.friend):
# a+=self.qEnd[i]-self.qBegin[i]+self.gEnd[i]-self.qBegin[i]
return int((self.qnum+self.gnum)/self.batch_size*0.99)
return int((self.qnum+self.gnum)/self.batch_size*0.80)
else:
return int((self.qEnd-self.qBegin+self.gEnd-self.qBegin)/self.batch_size*0.99)
return int((self.qEnd-self.qBegin+self.gEnd-self.qBegin)/self.batch_size*0.80)
def next(self):
while self.endfile==0:
arnum=self.arnum
Expand Down Expand Up @@ -299,3 +299,143 @@ def next(self):
# print "\n",datetime.datetime.now()
#raise StopIteration

def test(self):
while self.endfile==0:
arnum=self.arnum
jetset=[]
variables=[]
labels=[]
rand=random.choice(self.rat)
if(self.friend!=0 and self.zboson==0 and self.istrain==1):
rand=0.4
if(self.friend!=0 and self.zboson==0 and self.istrain==0):
rand=0.31354286
if(self.friend!=0 and self.zboson==1):
rand=0.526
if(self.friend!=0 and self.zboson==0 and self.istrain==1 and self.w==1):
rand=0.37
if(self.friend!=0):
rand=self.gnum/1./(self.qnum+self.gnum)
for i in range(self.batch_size):
if(self.friend!=0):
if(self.w==0):
if(random.random()<rand):
self.gjet[self.gf].GetEntry(self.a)
self.a+=1
jetset.append(np.array(self.gim[self.gf]).reshape((3,2*arnum+1,2*arnum+1)))
labels.append([1,0])
if(self.varbs==1):
variables.append([self.gjet[self.gf].ptD,self.gjet[self.gf].axis1,self.gjet[self.gf].axis2,self.gjet[self.gf].nmult,self.gjet[self.gf].cmult])
if(self.a>=self.gEnd[self.gf]):
self.gf+=1
if(self.gf==self.friend):
self.endfile=1
self.gf=0
self.a=self.gBegin[self.gf]
else:
self.qjet[self.qf].GetEntry(self.b)
self.b+=1
jetset.append(np.array(self.qim[self.qf]).reshape((3,2*arnum+1,2*arnum+1)))
labels.append([0,1])
if(self.varbs==1):
variables.append([self.qjet[self.qf].ptD,self.qjet[self.qf].axis1,self.qjet[self.qf].axis2,self.qjet[self.qf].nmult,self.qjet[self.qf].cmult])
if(self.b>=self.qEnd[self.qf]):
self.qf+=1
if(self.qf==self.friend):
self.endfile=1
self.qf=0
self.b=self.gBegin[self.qf]
####-----------
else:
if(random.random()<rand):
if(random.random()<self.ratt):
self.gjet[self.gf].GetEntry(self.a)
self.a+=1
jetset.append(np.array(self.gim[self.gf]).reshape((3,2*arnum+1,2*arnum+1)))
labels.append([1,0])
if(self.varbs==1):
variables.append([self.gjet[self.gf].ptD,self.gjet[self.gf].axis1,self.gjet[self.gf].axis2,self.gjet[self.gf].nmult,self.gjet[self.gf].cmult])
if(self.a>=self.gEnd[self.gf]):
self.gf+=1
if(self.gf==self.frat):
self.endfile=1
self.gf=0
self.a=self.gBegin[self.gf]
else:
self.qjet[self.gq].GetEntry(self.aq)
self.aq+=1
jetset.append(np.array(self.gim[self.gq]).reshape((3,2*arnum+1,2*arnum+1)))
labels.append([1,0])
if(self.varbs==1):
variables.append([self.qjet[self.gq].ptD,self.qjet[self.gq].axis1,self.qjet[self.gq].axis2,self.qjet[self.gq].nmult,self.qjet[self.gq].cmult])
if(self.aq>=self.gEnd[self.gq]):
self.gq+=1
if(self.gq==self.friend):
self.endfile=1
self.gq=self.frat
self.aq=self.gBegin[self.gq]
else:
if(random.random()<self.ratt):
self.qjet[self.qf].GetEntry(self.b)
self.b+=1
jetset.append(np.array(self.qim[self.qf]).reshape((3,2*arnum+1,2*arnum+1)))
labels.append([0,1])
if(self.varbs==1):
variables.append([self.qjet[self.qf].ptD,self.qjet[self.qf].axis1,self.qjet[self.qf].axis2,self.qjet[self.qf].nmult,self.qjet[self.qf].cmult])
if(self.b>=self.qEnd[self.qf]):
self.qf+=1
if(self.qf==self.frat):
self.endfile=1
self.qf=0
self.b=self.gBegin[self.qf]
else:
self.gjet[self.qg].GetEntry(self.bg)
self.bg+=1
jetset.append(np.array(self.qim[self.qg]).reshape((3,2*arnum+1,2*arnum+1)))
labels.append([0,1])
if(self.varbs==1):
variables.append([self.gjet[self.qg].ptD,self.gjet[self.qg].axis1,self.gjet[self.qg].axis2,self.gjet[self.qg].nmult,self.gjet[self.qg].cmult])
if(self.bg>=self.qEnd[self.qg]):
self.qg+=1
if(self.qg==self.friend):
self.endfile=1
self.qg=self.frat
self.bg=self.gBegin[self.qg]


else:
if(random.random()<0.5):
#if(random.random()<rand):
self.gjet.GetEntry(self.a)
self.a+=1
jetset.append(np.array(self.gim).reshape((3,2*arnum+1,2*arnum+1)))
labels.append([1,0])
if(self.a>=self.gEnd):
self.a=self.gBegin
self.endfile=1
else:
self.qjet.GetEntry(self.b)
self.b+=1
jetset.append(np.array(self.qim).reshape((3,2*arnum+1,2*arnum+1)))
labels.append([0,1])
if(self.b>=self.qEnd):
self.b=self.gBegin
self.endfile=1
#if(rand<0.5):
# labels.append(0)
#else:
# labels.append(1)
#if(self.endcut==0 and self.ent>=self.End):
#self.ent=self.Begin
#self.endfile=1
if(self.varbs==1):
data=[np.array(jetset),np.array(variables)]
else:
data=np.array(jetset)
label=np.array(labels)
return [data,label]
#else:
#if(self.istrain==1):
# print "\n",datetime.datetime.now()
#raise StopIteration

86 changes: 86 additions & 0 deletions YJ-Keras/pred.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
'''Trains a simple convnet on the MNIST dataset.
Gets to 99.25% test accuracy after 12 epochs
(there is still a lot of margin for parameter tuning).
16 seconds per epoch on a GRID K520 GPU.
'''
from iter import *
import argparse
import keras
from keras import backend as K
from iter import *
import numpy as np
import tensorflow as tf
from keras.backend.tensorflow_backend import set_session
from importlib import import_module
import matplotlib.pyplot as plt
plt.switch_backend('agg')
config =tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction=0.1
set_session(tf.Session(config=config))

batch_size = 100
num_classes = 2
epochs = 20

parser=argparse.ArgumentParser()
parser.add_argument("--rat",type=float,default=0.6,help='ratio for weak qg batch')
parser.add_argument("--save",type=str,default=1,help='rch')
args=parser.parse_args()

# input image dimensions
img_rows, img_cols = 33, 33

# the data, shuffled and split between train and test sets
#(x_train, y_train), (x_test, y_test) = mnist.load_data()

#if K.image_data_format() == 'channels_first':
# x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
# x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
# input_shape = (1, img_rows, img_cols)
#else:
#x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
#x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
input_shape = (3,img_rows, img_cols)

#model.compile(loss=keras.losses.categorical_crossentropy,
# optimizer=keras.optimizers.Adadelta(),
# metrics=['accuracy'])
#model=keras.models.load_model('save/fullydijetsame_10')
savename=args.save
model=keras.models.load_model(savename)

#train=wkiter(["root/cutb/q"+str(int(args.rat*100))+"img.root","root/cutb/g"+str(int(args.rat*100))+"img.root"],batch_size=batch_size,end=1,istrain=1,friend=0)
test=wkiter("root",friend=20,begin=5./7.,end=1.,batch_size=batch_size)
from sklearn.metrics import roc_auc_score, auc,precision_recall_curve,roc_curve,average_precision_score
x=[]
y=[]
g=[]
q=[]
entries=500
batch_num=batch_size
print ("eval",test.totalnum())
for j in range(entries):
a,c=test.test()
b=model.predict(a,verbose=0)[:,0]
x=np.append(x,np.array(c[:,0]))
y=np.append(y,b)
for i in range(batch_num):
if(c[i][0]==1):
g.append(b[i])
else:
q.append(b[i])
plt.figure(1)
plt.hist(q,bins=50,weights=np.ones_like(q),histtype='step',alpha=0.7,label='quark')
plt.hist(g,bins=50,weights=np.ones_like(g),histtype='step',alpha=0.7,label='gluon')
plt.legend(loc="upper center")
plt.savefig(savename+"like.png")
t_fpr,t_tpr,_=roc_curve(x,y)
t_fnr=1-t_fpr
train_auc=np.around(auc(t_fpr,t_tpr),4)
plt.figure(2)
plt.plot(t_tpr,t_fnr,alpha=0.5,label="AUC={}".format(train_auc),lw=2)
plt.legend(loc='lower left')
plt.savefig(savename+"roc.png")
#print(b,c)

4 changes: 2 additions & 2 deletions YJ-Keras/weak.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@
from keras.backend.tensorflow_backend import set_session
from importlib import import_module
config =tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction=0.9
config.gpu_options.per_process_gpu_memory_fraction=0.4
set_session(tf.Session(config=config))

batch_size = 500
num_classes = 2
epochs = 20

parser=argparse.ArgumentParser()
parser.add_argument("--rat",type=float,default=0.8,help='ratio for weak qg batch')
parser.add_argument("--rat",type=float,default=0.6,help='ratio for weak qg batch')
args=parser.parse_args()

# input image dimensions
Expand Down

0 comments on commit d959ada

Please sign in to comment.