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]:
 timestamprel_timeacc_xacc_yacc_zgyro_xgyro_ygyro_zazimuthpitchrolllabel
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_xacc_yacc_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_xacc_yacc_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]:
 0123...1969197019711972
 acc_xacc_yacc_zacc_xacc_yacc_zacc_xacc_yacc_zacc_x...acc_zacc_xacc_yacc_zacc_xacc_yacc_zacc_xacc_yacc_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]:
 0123...1969197019711972
 acc_xacc_yacc_zacc_xacc_yacc_zacc_xacc_yacc_zacc_x...acc_zacc_xacc_yacc_zacc_xacc_yacc_zacc_xacc_yacc_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 [ ]:
 
posted @ 2018-12-27 13:19  调皮的贝叶斯  阅读(408)  评论(0编辑  收藏  举报