Advertisement
pierz___

lstm user

Feb 19th, 2020
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.80 KB | None | 0 0
  1. import tensorflow as tf
  2. from tensorflow.keras.models import Sequential
  3. from tensorflow.keras.layers import Dense, Dropout, LSTM#, CuDNNLSTM
  4. import numpy as np
  5. import pandas as pd
  6. import keras
  7. import json
  8. import random
  9. from datetime import datetime
  10.  
  11. logdir = "logs\\scalars\\" + datetime.now().strftime("%Y%m%d-%H%M%S")
  12. tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)
  13.  
  14. match_duration = 1200
  15. seq_length = 240
  16. matches_per_player = 100
  17.  
  18. partition = json.load(open("partition.json"))
  19. labels = json.load(open("labels.json"))
  20.  
  21. #index,cursor_X_mean,cursor_X_std,cursor_X_changes,cursor_Y_mean,cursor_Y_std,cursor_Y_changes,
  22. #heroCell_X_mean,heroCell_X_std,heroCell_X_changes,heroCell_Y_mean,heroCell_Y_std,heroCell_Y_changes,
  23. #heroVec_X_mean,heroVec_X_std,heroVec_X_changes,heroVec_Y_mean,heroVec_Y_std,heroVec_Y_changes,
  24. #cameraCell_X_mean,cameraCell_X_std,cameraCell_X_changes,cameraCell_Y_mean,cameraCell_Y_std,cameraCell_Y_changes,
  25. #cameraVec_X_mean,cameraVec_X_std,cameraVec_X_changes,cameraVec_Y_mean,cameraVec_Y_std,cameraVec_Y_changes,cameraVec_Z_mean,cameraVec_Z_std,cameraVec_Z_changes,
  26. #n_ping,ping_X_mean,ping_X_std,ping_Y_mean,ping_Y_std,
  27. #n_act1,act1_X_mean,act1_X_std,act1_Y_mean,act1_Y_std,n_act2,n_act3,act3_X_mean,act3_X_std,act3_Y_mean,act3_Y_std,n_act4,n_act5,act5_X_mean,act5_X_std,act5_Y_mean,act5_Y_std,
  28. #n_act6,n_act7,n_act8,n_act10,n_act12,act12_X_mean,act12_X_std,act12_Y_mean,act12_Y_std,n_act27,n_act33
  29.  
  30. #players to use
  31. id_list = ["35481334","43181484","40030765","72856820","82550973","93725467","96626270"]
  32.  
  33. features = ["cursor_X_mean","cursor_X_std","cursor_X_changes","cursor_Y_mean","cursor_Y_std","cursor_Y_changes","n_act1","act1_X_mean","act1_X_std","act1_Y_mean","act1_Y_std",
  34. "cameraCell_X_mean","cameraCell_X_std","cameraCell_X_changes","cameraCell_Y_mean","cameraCell_Y_std","cameraCell_Y_changes",
  35.            "cameraVec_X_mean","cameraVec_X_std","cameraVec_X_changes","cameraVec_Y_mean","cameraVec_Y_std","cameraVec_Y_changes","cameraVec_Z_mean","cameraVec_Z_std","cameraVec_Z_changes",
  36.            "n_act2","n_act3","n_act4","n_act5","n_act6","n_act7","n_act8","n_act10","n_act12","n_act27","n_act33"]
  37.  
  38. #features = ["heroCell_X_mean","heroCell_X_std","heroCell_X_changes","heroCell_Y_mean","heroCell_Y_std","heroCell_Y_changes",
  39. #            "heroVec_X_mean","heroVec_X_std","heroVec_X_changes","heroVec_Y_mean","heroVec_Y_std","heroVec_Y_changes"]
  40.  
  41. #features = ["cameraCell_X_mean","cameraCell_X_std","cameraCell_X_changes","cameraCell_Y_mean","cameraCell_Y_std","cameraCell_Y_changes",
  42. #"cameraVec_X_mean","cameraVec_X_std","cameraVec_X_changes","cameraVec_Y_mean","cameraVec_Y_std","cameraVec_Y_changes"]
  43.  
  44. #features = ["n_act1","act1_X_mean","act1_X_std","act1_Y_mean","act1_Y_std"]
  45.  
  46. #features = ["n_act1","n_act2","n_act3","n_act4","n_act5","n_act6","n_act7","n_act8","n_act10","n_act12","n_act27","n_act33"]
  47.  
  48. labels_id_list = dict()
  49. for k in range(0,len(id_list)):
  50.     labels_id_list[id_list[k]] = k
  51.  
  52. print(labels_id_list)
  53.  
  54. n_training_samples = int( (match_duration / seq_length) * len(id_list) * matches_per_player * 0.8 )
  55.  
  56. n_test_samples = int( (match_duration / seq_length) * len(id_list) * matches_per_player * 0.2 )
  57.  
  58.  
  59. x_train = np.zeros((n_training_samples,seq_length,len(features)))
  60. x_test = np.zeros((n_test_samples,seq_length,len(features)))
  61. y_train = np.zeros(n_training_samples)
  62. y_test = np.zeros(n_test_samples)
  63. i = 0
  64.  
  65. list_to_shuffle = []
  66.  
  67. #create training set
  68. for f in partition["train"]:
  69.     player_id= f.split("_")[-1][:-4]
  70.     if player_id in id_list:
  71.         list_to_shuffle.append(f)
  72.  
  73. random.shuffle(list_to_shuffle)    
  74.    
  75. seq_per_match = int(match_duration/seq_length)    
  76.    
  77. for f in list_to_shuffle:
  78.     df = pd.read_csv("D:\\provaRNN\\normalized_csv\\"+f)
  79.     for k in range (0,seq_per_match):
  80.         X = np.array(df[features][k*seq_length:(k+1)*seq_length])
  81.         X = X.reshape(seq_length,len(features))
  82.         x_train[i,] = X
  83.         player_id = f.split("_")[-1][:-4]
  84.         y_train[i] = labels_id_list[player_id]
  85.         i += 1
  86.        
  87. list_to_shuffle = []
  88.        
  89. i = 0        
  90. #create validation set  
  91. for f in partition["validation"]:
  92.     player_id= f.split("_")[-1][:-4]
  93.     if player_id in id_list:
  94.         list_to_shuffle.append(f)
  95.  
  96. random.shuffle(list_to_shuffle)
  97.        
  98. for f in list_to_shuffle:
  99.     df = pd.read_csv("D:\\provaRNN\\normalized_csv\\"+f)
  100.     for k in range (0,seq_per_match):
  101.         X = np.array(df[features][k*seq_length:(k+1)*seq_length])
  102.         X = X.reshape(seq_length,len(features))
  103.         x_test[i,] = X
  104.         player_id = f.split("_")[-1][:-4]
  105.         y_test[i] = labels_id_list[player_id]
  106.         i += 1
  107.        
  108.  
  109. y_train = keras.utils.to_categorical(y_train, num_classes=len(id_list))
  110. y_test = keras.utils.to_categorical(y_test, num_classes=len(id_list))
  111.  
  112. #print(len(x_train))
  113. #print(x_train)
  114.  
  115.  
  116. model = Sequential()
  117.  
  118. # IF you are running with a GPU, try out the CuDNNLSTM layer type instead (don't pass an activation, tanh is required)
  119. model.add(LSTM(256, input_shape=(x_train.shape[1:]),  return_sequences=True))
  120. #model.add(Dropout(0.2))
  121.  
  122. model.add(LSTM(256))
  123. #model.add(Dropout(0.2))
  124.  
  125. model.add(Dense(64, activation='relu'))
  126. #model.add(Dropout(0.2))
  127.  
  128. model.add(Dense(len(id_list), activation='softmax'))
  129.  
  130. opt = tf.keras.optimizers.Adam(lr=0.0001, decay=1e-6)
  131.  
  132. # Compile model
  133. model.compile(
  134.     loss='categorical_crossentropy',
  135.     optimizer=opt,
  136.     metrics=['accuracy'],
  137. )
  138.  
  139. print(model.summary())
  140.  
  141.  
  142. training_history = model.fit(x_train,
  143.           y_train,
  144.           epochs=150,
  145.           shuffle = True,
  146.           validation_data=(x_test, y_test),
  147.          callbacks=[tensorboard_callback])
  148.  
  149. print("Average test loss: ", np.average(training_history.history['loss']))
  150.  
  151. print("Average test accuracy: ", np.average(training_history.history['accuracy']))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement