fall down

import pandas as pd
In [2]:
df = pd.read_csv('/home/helong/share/ML/MobiAct_Dataset_v2.0/Annotated Data/FOL/FOL_1_1_annotated.csv') 
In [3]:
df.head()
Out[3]:
  timestamp rel_time acc_x acc_y acc_z gyro_x gyro_y gyro_z azimuth pitch roll label
0 1913880519000 0.000000 0.900011 -9.557625 -1.493466 -0.175318 -0.032987 0.000916 9.015643 17.873316 -41.670730 STD
1 1913884790000 0.004271 0.897037 -9.557229 -1.486130 0.045509 -0.016799 0.014966 9.223496 18.114683 -41.547146 STD
2 1913890827000 0.010308 0.892833 -9.556668 -1.475760 0.024435 0.005498 0.015577 9.430863 18.326233 -41.400665 STD
3 1913894760000 0.014241 0.890094 -9.556303 -1.469004 -0.003971 -0.001833 0.010079 9.624285 18.487745 -41.254680 STD
4 1913899716000 0.019197 0.886642 -9.555843 -1.460490 -0.002443 -0.001222 0.016799 9.809599 18.640276 -41.121006 STD
In [4]:
x = df[['acc_x','acc_y','acc_z']] 
In [5]:
x.head()
Out[5]:
  acc_x acc_y acc_z
0 0.900011 -9.557625 -1.493466
1 0.897037 -9.557229 -1.486130
2 0.892833 -9.556668 -1.475760
3 0.890094 -9.556303 -1.469004
4 0.886642 -9.555843 -1.460490
In [11]:
data_move=20
data_scale=6 def transform_rgb(x): return (x + data_move) * data_scale x = df[['acc_x','acc_y','acc_z']].apply(transform_rgb) 
In [12]:
x.head()
Out[12]:
  acc_x acc_y acc_z
0 125.400066 62.654249 111.039201
1 125.382220 62.656628 111.083221
2 125.356995 62.659992 111.145442
3 125.340562 62.662183 111.185978
4 125.319854 62.664944 111.237057
In [13]:
x = x.stack().to_frame().T 
In [14]:
x.head()
Out[14]:
  0 1 2 3 ... 1969 1970 1971 1972
  acc_x acc_y acc_z acc_x acc_y acc_z acc_x acc_y acc_z acc_x ... acc_z acc_x acc_y acc_z acc_x acc_y acc_z acc_x acc_y acc_z
0 125.400066 62.654249 111.039201 125.38222 62.656628 111.083221 125.356995 62.659992 111.145442 125.340562 ... 153.21973 167.514197 112.938234 153.068426 167.4019 112.989777 152.970371 167.256695 112.989777 152.941329

1 rows × 5919 columns

In [8]:
x.head()
Out[8]:
  0 1 2 3 ... 1969 1970 1971 1972
  acc_x acc_y acc_z acc_x acc_y acc_z acc_x acc_y acc_z acc_x ... acc_z acc_x acc_y acc_z acc_x acc_y acc_z acc_x acc_y acc_z
0 0.900011 -9.557625 -1.493466 0.897037 -9.557229 -1.48613 0.892833 -9.556668 -1.47576 0.890094 ... 5.536622 7.919033 -1.176961 5.511404 7.900317 -1.16837 5.495062 7.876116 -1.16837 5.490222

1 rows × 5919 columns

In [3]:
import os
import tensorflow as tf import numpy as np import pandas as pd 
 

convert the data

In [36]:
df_list = []
sum_df = pd.DataFrame() #sum_df = df_.fillna(0) # with 0s rather than NaNs PATH = '/home/helong/share/ML/MobiAct_Dataset_v2.0/Annotated Data/STU' for file in os.listdir(PATH): # print(file) df = pd.read_csv(os.path.join(PATH,file)) if not df.empty: df_list.append(df) for df in df_list: x = df[['acc_x','acc_y','acc_z']].apply(transform_rgb) x = x.stack().to_frame().T # print(x.head()) sum_df = sum_df.append(x) #sum_df.insert(idx, col_name, value) sum_df.insert(loc=0, column='A', value=0) print(sum_df.head()) #print(sum_df.info()) sum_df.to_csv('/home/helong/share/ML/MobiAct_Dataset_v2.0/tran_data_transform/STU.csv',index=False) #final_df = df.append(df for df in df_list) #final_df[0].count() print("done") 
 
   A           0                                   1                          \
           acc_x       acc_y       acc_z       acc_x       acc_y       acc_z   
0  0  132.343160  178.774379  108.683075  132.389976  178.857848  108.755623   
0  0  119.607388  179.420339  113.534330  119.567409  179.404633  113.488640   
0  0  121.276736  178.583105  117.924215  121.318685  178.552728  117.906857   
0  0  124.149364  179.019596  117.656289  124.163629  179.028155  117.670554   
0  0  106.486053  177.582995  116.405081  106.416345  177.555113  116.419023   

            2                          ...   1994  1995              1996  \
        acc_x       acc_y       acc_z  ...  acc_z acc_x acc_y acc_z acc_x   
0  132.450588  178.888155  108.785929  ...    NaN   NaN   NaN   NaN   NaN   
0  119.527375  179.388905  113.442886  ...    NaN   NaN   NaN   NaN   NaN   
0  121.360383  178.522533  117.889603  ...    NaN   NaN   NaN   NaN   NaN   
0  124.178146  179.036865  117.685071  ...    NaN   NaN   NaN   NaN   NaN   
0  106.340443  177.524753  116.434203  ...    NaN   NaN   NaN   NaN   NaN   

               1997              
  acc_y acc_z acc_x acc_y acc_z  
0   NaN   NaN   NaN   NaN   NaN  
0   NaN   NaN   NaN   NaN   NaN  
0   NaN   NaN   NaN   NaN   NaN  
0   NaN   NaN   NaN   NaN   NaN  
0   NaN   NaN   NaN   NaN   NaN  

[5 rows x 5995 columns]
done
In [2]:
def get_all_data():
    PATH = '/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform' fs = os.listdir(PATH) all_data = pd.DataFrame() for f in fs: file_path = os.path.join(PATH, f) print(file_path) if 'csv' in f: data = pd.read_csv(file_path, index_col=False, nrows=5, low_memory=False) data = data.iloc[1:,0:1201] #print(data.head()) #break all_data = all_data.append(data) #for fast test #break #count_row = all_data.shape[0] #print(count_row) np.random.shuffle(all_data.values) return all_data 
In [4]:
def get_test_data():
    PATH = '/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform' fs = os.listdir(PATH) all_data = pd.DataFrame() for f in fs: file_path = os.path.join(PATH, f) print(file_path) if 'csv' in f: data = pd.read_csv(file_path, index_col=False, low_memory=False) data = data.iloc[1:,0:1201] #print(data.head()) #break all_data = all_data.append(data) #for fast test #break #count_row = all_data.shape[0] #print(count_row) np.random.shuffle(all_data.values) return all_data 
In [46]:
data = get_all_data()
print(data.shape[0]) #all_data.to_csv('/home/helong/share/ML/MobiAct_Dataset_v2.0/all_data_transform.csv',nrows=10, index=False) #all_data.to_csv('/home/helong/share/ML/MobiAct_Dataset_v2.0/all_data_transform.csv',index=False) 
 
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/CSO.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SIT.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/STN.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/JUM.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SLH.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/JOG.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/STD.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SBE.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/WAL.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/BSC.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SLW.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/CSI.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/CHU.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SCH.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/STU.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SRH.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SBW.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/FOL.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/FKL.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SDL.csv
80
In [5]:
CLASS_NUM = 1
LEARNING_RATE = 0.001 TRAIN_STEP = 10000 BATCH_SIZE = 50 _index_in_epoch = 0 _epochs_completed = 0 _num_examples = 0 MODEL_SEVE_PATH = '../model/model.ckpt' 
In [6]:
def wights_variable(shape):
    '''  权重变量tensor  :param shape:  :return:  ''' wights = tf.truncated_normal(shape=shape,stddev=0.1) return tf.Variable(wights,dtype=tf.float32) def biases_variable(shape): '''  偏置变量tensor  :param shape:  :return:  ''' bias = tf.constant(0.1,shape=shape) return tf.Variable(bias,dtype=tf.float32) def conv2d(x,kernel): '''  网络卷积层  :param x: 输入x  :param kernel: 卷积核  :return: 返回卷积后的结果  ''' return tf.nn.conv2d(x,kernel,strides=[1,1,1,1],padding='SAME') def max_pooling_2x2(x): '''  最大赤化层  :param x: 输入x  :return: 返回池化后数据  ''' return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME') def lrn(x): '''  local response normalization  局部响应归一化,可以提高准确率  :param x: 输入x  :return:  ''' return tf.nn.lrn(x,4,1.0,0.001,0.75) def fall_net(x): '''  跌到检测网络  :param x: 输入tensor,shape=[None,]  :return:  ''' with tf.name_scope('reshape'): x = tf.reshape(x,[-1,20,20,3]) #x = x / 255.0 * 2 - 1 with tf.name_scope('conv1'): # value shape:[-1,18,18,32] conv1_kernel = wights_variable([5,5,3,32]) conv1_bias = biases_variable([32]) conv1_conv = conv2d(x,conv1_kernel)+conv1_bias conv1_value = tf.nn.relu(conv1_conv) with tf.name_scope('max_pooling_1'): # value shape:[-1,10,10,32] mp1 = max_pooling_2x2(conv1_value) with tf.name_scope('conv2'): # value shape:[-1,8,8,64] conv2_kernel = wights_variable([5,5,32,64]) conv2_bias = biases_variable([64]) conv2_conv = conv2d(mp1,conv2_kernel)+conv2_bias conv2_value = tf.nn.relu(conv2_conv) with tf.name_scope('max_pooling_2'): # value shape:[-1,5,5,64] mp2 = max_pooling_2x2(conv2_value) with tf.name_scope('fc1'): fc1_wights = wights_variable([5*5*64,512]) fc1_biases = biases_variable([512]) fc1_input = tf.reshape(mp2,[-1,5*5*64]) fc1_output = tf.nn.relu(tf.matmul(fc1_input,fc1_wights)+fc1_biases) with tf.name_scope('drop_out'): keep_prob = tf.placeholder(dtype=tf.float32) drop_out = tf.nn.dropout(fc1_output,keep_prob) with tf.name_scope('fc2'): fc2_wights = wights_variable([512,CLASS_NUM]) fc2_biases = biases_variable([CLASS_NUM]) fc2_output = tf.matmul(drop_out,fc2_wights)+fc2_biases return fc2_output,keep_prob 
In [6]:
def next_batch(self, batch_size): '''  获取size份数据  :param size: batchsize  :return:  ''' # TODO: 需要实现从数据中随机获取size份数据,采用抽样不放回策略 start = self._index_in_epoch if start + batch_size > self._num_examples: # Finished epoch self._epochs_completed += 1 # Get the rest examples in this epoch rest_num_examples = self._num_examples - start if rest_num_examples != 0: x_rest_part = self.train_x[start:self._num_examples] y_rest_part = self.train_y[start:self._num_examples] # Start next epoch start = 0 self._index_in_epoch = batch_size - rest_num_examples end = self._index_in_epoch x_new_part = self.train_x[start:end] y_new_part = self.train_y[start:end] batch_x,batch_y = np.concatenate((x_rest_part, x_new_part), axis=0), np.concatenate((x_rest_part, y_new_part), axis=0) else: # Start next epoch start = 0 self._index_in_epoch = batch_size - rest_num_examples end = self._index_in_epoch batch_x = self.train_x[start:end] batch_y = self.train_y[start:end] else: self._index_in_epoch += batch_size end = self._index_in_epoch batch_x = self.train_x[start:end] batch_y = self.train_y[start:end] return np.array(batch_x),np.array(batch_y) 
In [5]:
def train_model():
    '''
    训练模型,并将训练的模型参数进行保存
 :return: 返回训练好模型参数  ''' with tf.name_scope('input_dataset'): x = tf.placeholder(tf.float32,[None,1200]) y = tf.placeholder(tf.float32,[None,1]) y_,keep_prob = fall_net(x) with tf.name_scope('loss'): cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=y_) loss = tf.reduce_mean(cross_entropy) tf.summary.scalar("loss", loss) with tf.name_scope('optimizer'): train = tf.train.AdamOptimizer(LEARNING_RATE).minimize(loss) with tf.name_scope('accuracy'): correct_prediction = tf.equal(tf.argmax(y_,1),tf.argmax(y,1)) correct_prediction = tf.cast(correct_prediction,tf.float32) accuracy = tf.reduce_mean(correct_prediction) tf.summary.scalar("accuracy", accuracy) #data = dataset.DataSet('../data/dataset',CLASS_LIST) data = get_all_data() _train_x = [] _train_y = [] count = data.shape[0] for i in range(0,count): #label = data.iloc[i, 0] _train_x.append(data.iloc[i, 1:1201]) _train_y.append(data.iloc[i, 0:1]) batch_x = _train_x[0:count+1] batch_y = _train_y[0:count+1] saver = tf.train.Saver() merged = tf.summary.merge_all() with tf.Session() as sess: sess.run(tf.global_variables_initializer()) train_writer = tf.summary.FileWriter("../log/", sess.graph) for step in range(1, 4): #for step in range(1, TRAIN_STEP+1): #batch_x, batch_y = next_batch(self, BATCH_SIZE) #batch_x = data.iloc[0:,1:1201] batch_x_1 = np.array(batch_x) batch_y_1 = np.array(batch_y) # print(batch_x_1) if step<100: train_accuracy = accuracy.eval(feed_dict={x: batch_x, y: batch_y, keep_prob: 1.0}) print('训练第 %d次, 准确率为 %f' % (step, train_accuracy)) summ = sess.run(merged, feed_dict={x:batch_x, y:batch_y, keep_prob: 1.0}) train_writer.add_summary(summ, global_step=step) #np.array(batch_x),np.array(batch_y) train.run(feed_dict={x: batch_x, y: batch_y, keep_prob: 0.5}) train_writer.close() save_path = saver.save(sess, MODEL_SEVE_PATH) print("训练完毕,权重保存至:%s"%(save_path)) 
In [6]:
train_model()
 
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/CSO.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SIT.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/STN.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/JUM.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SLH.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/JOG.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/STD.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SBE.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/WAL.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/BSC.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SLW.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/CSI.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/CHU.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SCH.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/STU.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SRH.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SBW.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/FOL.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/FKL.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SDL.csv
训练第 1次, 准确率为 1.000000
训练第 2次, 准确率为 1.000000
训练第 3次, 准确率为 1.000000
训练完毕,权重保存至:../model/model.ckpt
In [7]:
import time
def test_model():
    '''  使用测试数据集对训练好的模型进行测试  :return: 测试结果  ''' data = get_test_data() _train_x = [] _train_y = [] count = data.shape[0] for i in range(0,count): #label = data.iloc[i, 0] _train_x.append(data.iloc[i, 1:1201]) _train_y.append(data.iloc[i, 0:1]) test_x = _train_x[0:count+1] test_y = _train_y[0:count+1] tf.reset_default_graph() with tf.name_scope('input'): x = tf.placeholder(tf.float32,[None,1200]) y = tf.placeholder(tf.float32,[None,CLASS_NUM]) y_,keep_prob = fall_net(x) with tf.name_scope('accuracy'): correct_prediction = tf.equal(tf.argmax(y_,1),tf.argmax(y,1)) correct_prediction = tf.cast(correct_prediction,tf.float32) accuracy = tf.reduce_mean(correct_prediction) start_time = time.time() saver = tf.train.Saver() with tf.Session() as sess: saver.restore(sess, "../model/model.ckpt") p_y = np.argmax(sess.run(y_,feed_dict={x: test_x,keep_prob: 1.0}),1) print("准确率为 %f" % accuracy.eval(feed_dict={x: test_x, y: test_y, keep_prob: 1.0})) test_time = str(time.time() - start_time) print('测试时间为:',test_time) 
In [8]:
test_model()
 
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/CSO.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SIT.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/STN.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/JUM.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SLH.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/JOG.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/STD.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SBE.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/WAL.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/BSC.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SLW.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/CSI.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/CHU.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SCH.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/STU.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SRH.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SBW.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/FOL.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/FKL.csv
/home/helong/share/ML/MobiAct_Dataset_v2.0/train_data_transform/SDL.csv
INFO:tensorflow:Restoring parameters from ../model/model.ckpt
准确率为 1.000000
测试时间为: 4.959960460662842
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 

猜你喜欢

转载自www.cnblogs.com/ljstu/p/10184417.html