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 Gyires-Tóth Bálint: Deep Learning a gyakorlatban
LÉPCSŐZÉS 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
10719
37
8
69
10833
61
20515
20
70
20666
STANDING
1
13
1510
7
1531
WALKING
47
17
11
14534
14609
10828
20582
1549
14680
47639
True BIKE CAR
All
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!
[email protected]
http://smartlab.tmit.bme.hu