Gyires-Tóth Bálint Deep Learning a gyakorlatban Python és LUA alapon Felhasználói viselkedés modellezés http://smartlab.tmit.bme.hu
Modellezés célja A telefon szenzoradatai alapján egy általános viselkedési modell kialakítása. Szenzorok és interakciók: Gyorsulás és orientációs Fényérzékelő GPS, cellainformációk WiFi, Bluetooth, NFC Beszélgetések, kivel, mikor, mennyit Telefonnal való interakciók Most: tevékenység azonosítás gyorsulás és orientációs szenzor alapján. Gyires-Tóth Bálint: Deep Learning a gyakorlatban 2/99
Tevékenység azonosítás Feltevésünk: A felhasználók zsebében/táskájában a telefon hasonló tevékenységek esetén hasonló mozgást végeznek. Például gyorsulásérzékelő egyik iránya: SÉTA KOCSI LÉPCSŐZÉS Gyires-Tóth Bálint: Deep Learning a gyakorlatban 3/99
Szenzoradatok rögzítése 1. Mivel nem állnak rendelkezésre, ezért nekünk kell rögzíteni adatokat Android/iPhone segítségével + címkét előre megadni. // szenzorok inicializálása public class SensorService extends Service implements SensorEventListener { private SensorManager msensormanager; private Sensor maccelerometer; // listener elindítás msensormanager = (SensorManager) getsystemservice(this.sensor_service); maccelerometer = msensormanager.getdefaultsensor(sensor.type_accelerometer); // adatok fogadása @Override public void onsensorchanged(sensorevent event) { if (event.sensor.equals(maccelerometer)) {... Gyires-Tóth Bálint: Deep Learning a gyakorlatban 4/99
Szenzoradatok rögzítése 2. // gravitáció eltávolítása (aluláteresztő szűrő) private float[] removegravityfromacceleration(float[] values) { final float alpha = 0.8f; gravity[0] = alpha * gravity[0] + (1 - alpha) * values[0]; gravity[1] = alpha * gravity[1] + (1 - alpha) * values[1]; gravity[2] = alpha * gravity[2] + (1 - alpha) * values[2]; linear_acceleration[0] = values[0] - gravity[0]; linear_acceleration[1] = values[1] - gravity[1]; linear_acceleration[2] = values[2] - gravity[2]; return linear_acceleration; } // az adatok orientációjának kinyerése a "0"-ba való forgatáshoz private void calculateorientation(sensorevent event) { System.arraycopy(event.values, 0, mvaluesaccel, 0, 3); } SensorManager.getRotationMatrix(mRotationMatrix, null, mvaluesaccel, mvaluesmagnet); SensorManager.getOrientation(mRotationMatrix, mvaluesorientation); Gyires-Tóth Bálint: Deep Learning a gyakorlatban 5/99
Szenzoradatok rögzítése 3. // CSV-be írás csvwriter.addtoline(csvwriter.acceleration_x, String.format("%.8f", linear_acceleration[0])); csvwriter.addtoline(csvwriter.acceleration_y,... csvwriter.addtoline(csvwriter.acceleration_z,... csvwriter.addtoline(csvwriter.orientation_x, String.format("%.8f", mvaluesorientation[0] * 180/PI)); csvwriter.addtoline(csvwriter.orientation_y,... csvwriter.addtoline(csvwriter.orientation_z,... Gyires-Tóth Bálint: Deep Learning a gyakorlatban 6/99
Szenzoradatok vizsgálata Gyires-Tóth Bálint: Deep Learning a gyakorlatban 7/99
Szenzoradatok vizsgálata Gyires-Tóth Bálint: Deep Learning a gyakorlatban 8/99
Szenzoradatok előkészítése 1) Elmentett CSV-ket beolvassuk és javítjuk: Címkézési hibák manuális keresése Kezdeti és vég részek törlése 2) Osztályok kiegyenlítése 3) Véletlen keverés 4) Standardizálás, normalizálás Bemenet: standardizálás (0 mean, 1 variance) from sklearn.preprocessing import StandardScaler Tanító adatokon fit_transform, teszt adataokon transform Kimenet: OneHot kódolt kategóriák (pl. séta, bicikli, lépcsőzés) 5) Újraformázzuk (batch x FrameSize x nframe) 6) HDF5-be mentjük Gyires-Tóth Bálint: Deep Learning a gyakorlatban 9/99
1D konvolúciós háló-architektúra 1. model = Sequential() model.add(convolution1d(input_shape=(x.shape[-2],x.shape[-1]), nb_filter=32, filter_length=3, subsample_length=1, border_mode='same', init='glorot_uniform', activation='relu')) model.add(convolution1d(nb_filter=96, filter_length=5, border_mode='same', init='glorot_uniform', subsample_length=2, activation='relu')) model.add(maxpooling1d(pool_length=2, stride=2)) model.add(convolution1d(nb_filter=128, filter_length=7, border_mode='same', init='glorot_uniform', subsample_length=3, activation='relu')) model.add(convolution1d(nb_filter=128, filter_length=1, border_mode='same', init='glorot_uniform', activation='relu')) model.add(maxpooling1d(pool_length=2, stride=2)) Gyires-Tóth Bálint: Deep Learning a gyakorlatban 10/99
1D konvolúciós háló-architektúra 2. # 2 fully connected réteg a háló végén model.add(flatten()) model.add(dense(512, activation='relu')) model.add(dropout(0.5)) model.add(dense(512, activation='relu')) model.add(dropout(0.5)) model.add(dense(classes, activation='softmax') Gyires-Tóth Bálint: Deep Learning a gyakorlatban 11/99
Tanítás szenzoradatokkal Early stoping, patience = 32 SoftMax, Categorical Cross Entropy ADAM / RMSprop Batch size = 256 Adat mennyiség: 190555 tanító, 47639 validációs Osztályok: {'CAR': 103353, 'WALKING': 72682, 'BIKE': 54684, 'STANDING': 7475} Tanítási idő: ~1 óra 20 perc Gyires-Tóth Bálint: Deep Learning a gyakorlatban 12/99
Kiértékelés tévesztési mátrix Predicted BIKE CAR STANDING WALKING All True BIKE 10719 37 8 69 10833 CAR 61 20515 20 70 20666 STANDING 1 13 1510 7 1531 WALKING 47 17 11 14534 14609 All 10828 20582 1549 14680 47639 Gyires-Tóth Bálint: Deep Learning a gyakorlatban 13/99
Kiértékelés metrikák precision recall f1-score support BIKE 0.99 0.99 0.99 10833 CAR 1.00 0.99 0.99 20666 STANDING 0.97 0.99 0.98 1531 WALKING 0.99 0.99 0.99 14609 avg / total 0.99 0.99 0.99 47639 Gyires-Tóth Bálint: Deep Learning a gyakorlatban 14/99
Ensemble modellek 1. Gyires-Tóth Bálint: Deep Learning a gyakorlatban 15/99
Ensemble modellek 2. Ensemble modellek építése: 1) a tanítóadatok különböző részeivel random módra elméleti szempontból csoportosított 2) Közel optimális hiperparaméterek mellett különböző súlyokkal / módszerekkel inicializálva 3) Közel optimális és n-1 darab szuboptimális hiperparaméterrel tanított háló 4) Különböző epoch számnál elmentett hálók 5) Különböző architektúrájú hálók (FC, CNN, LSTM, stb.) 6) FC ensemble esetén a részt vevő hálók eltérő rétegeit kötjük be. Gyires-Tóth Bálint: Deep Learning a gyakorlatban 16/99
Ensemble modellek 3. Gyires-Tóth Bálint: Deep Learning a gyakorlatban 17/99
Köszönöm a figyelmet! toth.b@tmit.bme.hu http://smartlab.tmit.bme.hu