--- a +++ b/Model_Training.py @@ -0,0 +1,92 @@ +import pandas as pd +import tensorflow as tf +import matplotlib as plt +import glob +import numpy as np +from tensorflow import keras +from keras import Sequential +from sklearn.utils import shuffle +import sklearn.model_selection + + +STEP_SIZE = 20 +SENSOR_NUM = 6 +NUM_CLASSESS = 7 + +df = pd.concat([pd.read_csv(f) for f in glob.glob('./train_new/*.csv')], ignore_index = True) +print(df) + +Label = { 'STD':0, 'WAL':1, 'JOG':2 , 'JUM':3, 'FALL':4 , 'LYI':5,'RA':6} +class_names = { 0:'STD', 1:'WAL', 2:'JOG' , 3:'JUM', 4:'FALL', 5:'LYI',6:'RA'} + +dataSet = df[["acc_x", "acc_y", "acc_z", "gyro_x","gyro_y","gyro_z", "label"]] + +dataSet.label = [Label[item] for item in dataSet.label] + + +print(dataSet) + +x = np.array(dataSet.drop(["label"],1)) +y = np.array(dataSet["label"]) + +modDataset = [] +modTruth =[] + +for i in range(len(x)-STEP_SIZE): + temp = [] + for j in range(i, i+STEP_SIZE): + temp.append(x[j]) + modDataset.append(temp) + +for i in range(len(y)-STEP_SIZE): + temp = [] + for j in range(i, i+STEP_SIZE): + temp.append(y[j]) + + most_common_item = max(temp, key = temp.count) + + modTruth.append(most_common_item) + +print(len(modDataset)) +print(len(modTruth)) + +print(len(modDataset[0])) +print(modDataset[1]) + +modDataset = np.array(modDataset).reshape(-1, STEP_SIZE, SENSOR_NUM) + +print(modDataset) + + + +y = np.array(modTruth) +x = modDataset + +x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(x,y,test_size = 0.3) + +print(x_train) +print(y_train) + +model = Sequential() +model.add(keras.layers.Flatten(input_shape=(STEP_SIZE, SENSOR_NUM))) +model.add(keras.layers.Dense(128, activation='relu')) +model.add(keras.layers.Dropout(0.3)) +model.add(keras.layers.Dense(128, activation='relu')) +model.add(keras.layers.Dropout(0.3)) +model.add(keras.layers.Dense(NUM_CLASSESS, activation='softmax')) + +model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"]) +model.summary() + +model.fit(x_train,y_train, epochs=30, validation_split =0.1) + +model.save('./model_x/') + +pred = model.predict(x_test) +results = np.argmax(pred, axis=1) + +for i in range(50) : + if class_names[y_test[i]] == class_names[results[i]]: + print("prediction: ", class_names[results[i]], " actual: ", class_names[y_test[i]], "prediction: Correct!!!" ) + else: + print("prediction: ", class_names[results[i]], " actual: ", class_names[y_test[i]], "prediction: Wrong :( " ) \ No newline at end of file