人類活動識別-使用深度學(xué)習(xí)模型_第1頁
人類活動識別-使用深度學(xué)習(xí)模型_第2頁
人類活動識別-使用深度學(xué)習(xí)模型_第3頁
人類活動識別-使用深度學(xué)習(xí)模型_第4頁
人類活動識別-使用深度學(xué)習(xí)模型_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

使用加速度計等智能手機(jī)傳感器進(jìn)行人類活動識別是研究的熱門話題之一。HAR是時間序列分類問題之一。在這個項目中,已經(jīng)制定了各種機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型,以獲得最佳的最終結(jié)果。同樣,我們可以使用循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的LSTM(長短期記憶)模型來識別人類的各種活動,例如站立、爬上樓和下樓等。LSTM模型是一種循環(huán)神經(jīng)網(wǎng)絡(luò)

,能夠?qū)W習(xí)序列預(yù)測問題中的順序依賴性。使用該模型是因為這有助于記住任意時間間隔內(nèi)的值。

人類活動識別數(shù)據(jù)集可以從下面給出的鏈接下載:HAR數(shù)據(jù)集

活動:

步行樓上樓下坐著常設(shè)加速度計以矢量形式檢測適當(dāng)加速度的大小和方向,并可用于感測方向(因為重量的方向發(fā)生變化)。根據(jù)角動量守恒,陀螺儀沿軸保持方向,以便方向不受安裝傾斜或旋轉(zhuǎn)的影響。

了解數(shù)據(jù)集:

兩個傳感器都會隨著時間的推移在3D空間中生成數(shù)據(jù)。

(“XYZ”表示X、Y和Z方向的3軸信號。)可用的數(shù)據(jù)通過應(yīng)用噪聲濾波器進(jìn)行預(yù)處理,然后在固定寬度的窗口中采樣,即每個窗口有128個讀數(shù)。訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)分開,

80%志愿者的讀數(shù)作為訓(xùn)練數(shù)據(jù),其余20%志愿者的記錄作為測試數(shù)據(jù)。所有數(shù)據(jù)都存在于使用上面提供的鏈接下載的文件夾中。

階段

選擇數(shù)據(jù)集

上傳驅(qū)動器中的數(shù)據(jù)集以在GoogleColaboratory上工作數(shù)據(jù)集清理和數(shù)據(jù)預(yù)處理選擇模型并構(gòu)建深度學(xué)習(xí)網(wǎng)絡(luò)模型在AndroidStudio中導(dǎo)出。該項目使用的IDE是GoogleColaboratory,它是處理深度學(xué)習(xí)項目的時代最好的IDE。上面已將階段1解釋為數(shù)據(jù)集的下載位置。按照這個順序開始項目,首先在GoogleColaboratory中打開一個新筆記本,導(dǎo)入所有必要的庫。

代碼:導(dǎo)入庫

Python3importpandasaspdimportnumpyasnpimportpickleimportmatplotlib.pyplotaspltfromscipyimportstatsimporttensorflowastfimportseabornassnsfromsklearnimportmetricsfromsklearn.model_selectionimporttrain_test_split

%matplotlibinline第2階段:

上傳筆記本中的數(shù)據(jù)集,在此之前我們需要將筆記本安裝到驅(qū)??動器上,以便該筆記本保存在我們的驅(qū)動器上并在需要時檢索。

Python3sns.set(style="whitegrid",palette="muted",font_scale=1.5)RANDOM_SEED=42

fromgoogle.colabimportdrivedrive.mount('/content/drive')輸出:

您將看到類似于下面屏幕截圖所示的彈出窗口,打開鏈接并復(fù)制授權(quán)碼并將其粘貼到授權(quán)碼欄中,然后輸入將安裝驅(qū)動器。

代碼:上傳數(shù)據(jù)集

Python3fromgoogle.colabimportfilesuploaded=files.upload()現(xiàn)在進(jìn)入模型構(gòu)建和訓(xùn)練階段,我們需要尋找不同的模型來幫助構(gòu)建更準(zhǔn)確的模型。這里選擇循環(huán)神經(jīng)網(wǎng)絡(luò)的LSTM模型。下圖顯示了數(shù)據(jù)的外觀。

第三階段:

從數(shù)據(jù)預(yù)處理開始。這個階段大約90%的時間都消耗在實際的數(shù)據(jù)科學(xué)項目中。在這里,原始數(shù)據(jù)被獲取并轉(zhuǎn)換為一些有用且高效的格式。

代碼:進(jìn)行數(shù)據(jù)變換,對數(shù)據(jù)進(jìn)行歸一化

Python3#transformingshapereshaped_segments=np.asarray(

segments,dtype=np.float32).reshape(

-1,N_time_steps,N_features)

reshaped_segments.shape代碼:分割數(shù)據(jù)集

Python3X_train,X_test,Y_train,Y_test=train_test_split(

reshaped_segments,labels,test_size=0.2,

random_state=RANDOM_SEED)測試大小取20%,即總記錄中20%的記錄用于測試準(zhǔn)確性,而其余記錄用于訓(xùn)練模型。

類別數(shù)=6(步行、坐、站立、跑步、上樓和下樓)

第4階段:在此階段選擇的模型是RNN的LSTM模型。

代碼:模型構(gòu)建

Python3defcreate_LSTM_model(inputs):

W={

'hidden':tf.Variable(tf.random_normal([N_features,N_hidden_units])),

'output':tf.Variable(tf.random_normal([N_hidden_units,N_classes]))

}

biases={

'hidden':tf.Variable(tf.random_normal([N_hidden_units],mean=0.1)),

'output':tf.Variable(tf.random_normal([N_classes]))

}

X=tf.transpose(inputs,[1,0,2])

X=tf.reshape(X,[-1,N_features])

hidden=tf.nn.relu(tf.matmul(X,W['hidden'])+biases['hidden'])

hidden=tf.split(hidden,N_time_steps,0)

lstm_layers=[tf.contrib.rnn.BasicLSTMCell(

N_hidden_units,forget_bias=1.0)for_inrange(2)]

lstm_layers=tf.contrib.rnn.MultiRNNCell(lstm_layers)

outputs,_=tf.contrib.rnn.static_rnn(lstm_layers,

hidden,dtype=tf.float32)

lstm_last_output=outputs[-1]

returntf.matmul(lstm_last_output,W['output'])+biases['output']代碼:使用AdamOptimizer執(zhí)行優(yōu)化來修改變量的損失值,以提高準(zhǔn)確性并減少損失。

Python3L2_LOSS=0.0015l2=L2_LOSS*\

sum(tf.nn.l2_loss(tf_var)fortf_varintf.trainable_variables())loss=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(

logits=pred_y,labels=Y))+l2

Learning_rate=0.0025optimizer=tf.train.AdamOptimizer(learning_rate=Learning_rate).minimize(loss)correct_pred=tf.equal(tf.argmax(pred_softmax,1),tf.argmax(Y,1))accuracy=tf.reduce_mean(tf.cast(correct_pred,dtype=tf.float32))代碼:執(zhí)行50次模型訓(xùn)練迭代以獲得最高的準(zhǔn)確率并減少損失

Python3#epochsisnumberofiterationsperformedinmodeltraining.N_epochs=50

batch_size=1024

saver=tf.train.Saver()history=dict(train_loss=[],train_acc=[],test_loss=[],test_acc=[])sess=tf.InteractiveSession()sess.run(tf.global_variables_initializer())train_count=len(X_train)

foriinrange(1,N_epochs+1):

forstart,endinzip(range(0,train_count,batch_size),

range(batch_size,train_count+1,batch_size)):

sess.run(optimizer,feed_dict={X:X_train[start:end],

Y:Y_train[start:end]})

_,acc_train,loss_train=sess.run([pred_softmax,accuracy,loss],feed_dict={

X:X_train,Y:Y_train})

_,acc_test,loss_test=sess.run([pred_softmax,accuracy,loss],feed_dict={

X:X_test,Y:Y_test})

history['train_loss'].append(loss_train)

history['train_acc'].append(acc_train)

history['test_loss'].append(loss_test)

history['test_acc'].append(acc_test)

if(i!=1andi%10!=0):

print(f'epoch:{i}test_accuracy:{acc_test}loss:{loss_test}')predictions,acc_final,loss_final=sess.run([pred_softmax,accuracy,loss],

feed_dict={X:X_test,Y:Y_test})print()print(f'finalresults:accuracy:{acc_final}loss:{loss_final}')

輸出:

因此,使用這種方法,第50次迭代時準(zhǔn)確率幾乎達(dá)到1。這表明大多數(shù)標(biāo)簽都可以通過這種方法清楚地識別。為了獲得正確識別的活動的準(zhǔn)確計數(shù),創(chuàng)建了混淆矩陣。

代碼:準(zhǔn)確度圖

Python3plt.figure(figsize=(12,8))

plt.plot(np.array(history['train_loss']),"r--",label="Trainloss")plt.plot(np.array(history['train_acc']),"g--",label="Trainaccuracy")

plt.plot(np.array(history['test_loss']),"r--",label="Testloss")plt.plot(np.array(history['test_acc']),"g--",label="Testaccuracy")

plt.title("Trainingsession'sprogressoveriteration")plt.legend(loc='upperright',shadow=True)plt.ylabel('TrainingProgress(LossorAccuracyvalues)')plt.xlabel('TrainingEpoch')plt.ylim(0)

plt.show()

混淆矩陣:混淆矩陣不亞于二維矩陣,它有助于計算正確識別的活動的精確計數(shù)。換句話說,它描述了分類模型在測試數(shù)據(jù)集上的性能。

代碼:混淆矩陣

Python3max_test=np.argmax(Y_test,axis=1)max_predictions=np.argmax(predictions,axis=1)confusion_matrix=metrics.confusion_matrix(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論