024. deep learning with keras # @ # Run bmi-create.py to create bmi.csv file import random from keras.module import Sequential from keras.layers.core import Dense, Dropout, Activation from keras.callbacks import EarlyStopping import pandas as pd import numpy as np # This is method which returns calculated 3 labels of BMI def calc_bmi(h,w): bmi=w/(h/100)**2 if bmi<18.5: return "thin" if bmi<25: return "normal" return "fat" # I prepare csv file where data will be written fp=open("bmi.csv","w",encoding="utf-8") fp.write("height, weight, label\r\n") # I create random data # I create cnt dictionary and each value of key is initialized by 0 cnt={"thin":0,"normal":0,"fat":0} # I will iterate from 0 to 20000 for i in range(20000): # I generate random number for height h=random.randint(120,200) # I generate random number for weight w=random.randint(35, 80) # I get bmi label label=calc_bmi(h,w) # I increate one value for the corresponding label in the cnt dictionary cnt[label]+=1 # I write contents into bmi.csv in the following format fp.write("{0},{1},{2}\r\n".format(h,w,label)) # I close file strean fp.close() print("file generation is completed : ",cnt) # @ # Now, I will let keras model to train with following steps # 1. I load modules I need to process this task # 1. I load bmi.csv file data # 1. I create model which is similar to learning methods like fit() and predict() # For learning # For predicting # For evaluating # I process features of train data # [ # # I normalize data # [height/200,weight/100], # [height/200,weight/100] # ] # # I process labels of train data # [ # # Each label will be converted as one-hot-encoding # # [1,0,0],[0,1,0],[0,0,1] # "thin", # "normal", # "fat" # ] # @ # I load bmi.csv file csv=pd.read_csv("d://chromedown//bmi.csv") # I bring all data from weight column # and I normalize data csv["weight"]/=100 csv["height"]/=200 # I create bmi_class dictionary # and I convert each label into one-hot-encoding value in list bmi_class= { "thin":[1,0,0], "normal":[0,1,0], "fat":[0,0,1] } # I create 20000 lists which has 3 spaces inside of one list # For example, # [ # [0,0,0], # [0,0,0], # ..., # [0,0,0] # ] y=np.empty((20000,3)) # I write index and value in front of area of tuple from data # which I bring from csv["label"] by using enumerate(csv["label"]) for i,v in enumerate(csv["label"]): y[i]=bmi_class[v] # I will use following output as label # for corresponding feature of train data # output: # [ # [0 0 1] # [1 0 0] # ... # ] # I convert data from csv file into matrix x=csv[["weight", "height"]].as_matrix() # I divide data into train data and test data x_train,y_train=x[1:15001],y[1:15001] x_test,y_test=x[15001:20001],y[15001:20001] # I use Sequential model # and I compose layers # and you will get composed model model=Sequential() model.add(Dense(512, input_shape=(2,))) model.add(Activation('relu')) model.add(Dropout(0.1)) model.add(Dense(512)) model.add(Activation('relu')) model.add(Dropout(0.1)) model.add(Dense(3)) model.add(Activation('softmax')) # I actually build model model.compile("rmsprop","categorical_crossentropy",metrics=["accuracy"]) # For learning # model.fit(x_train,y_train) # To enhance performance, you can pass addtional arguments model.fit ( x_train, y_train, batch_size=100, nb_epoch=20, validation_split=0.1, callbacks=[EarlyStopping(monitor='val_loss',patience=2)], verbose=1 ) # For predicting model.predict() # For evaluating score=model.evaluate(x_test,y_test) # score is returned as list print("score of loss:",score[0]) print("score of accuracy:",score[1]) # @ # Reference keras document on http://keras.io/modules/Sequential # For compile(), we pass # 1 argument: optimizer, # 2 argument: loss, # 3 argument: metrics(default=none), if you use this, you can get better evalution from training and testing # You can see various kind of optimizers # You can try to use RMSprop optimizer # You can see various kind of losses # You can try to use categorical_crossentropy loss # @ # Run this python file # and you will see tensorflow running in backend # you will see loss value and accuracy value in middle of training