Я создал модель Keras, которую я преобразовал в TensorFlow, а затем преобразовал в TensorFlow lite. Я хочу использовать свою модель TFLite для прогнозирования человеческой деятельности с помощью сигнала ускорителя с мобильного телефона. Вот последовательность моей модели:
N_FEATURES = 3
PERIOD = 80
model = Sequential()
model.add(Reshape((const.PERIOD, const.N_FEATURES), input_shape=(const.PERIOD * const.N_FEATURES,)))
model.add(Conv1D(100, 10, activation='relu', input_shape=(const.PERIOD, const.N_FEATURES)))
model.add(Conv1D(100, 10, activation='relu'))
model.add(MaxPooling1D(const.N_FEATURES))
model.add(Conv1D(160, 10, activation='relu'))
model.add(Conv1D(160, 10, activation='relu'))
model.add(Flatten())
model.add(Dropout(0.2))
model.add(Dense(7, activation='softmax'))
model.summary()
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
x_test.shape = (12369, 240)
y_test.shape = (12369, 7)
x_train.shape = (49476, 240)
y_train.shape = (49476, 7)
Я хочу спросить о форме данных, которые мне нужно передать модели в приложении для Android, чтобы предсказать активность. Я использую функцию Interpreter.runForMultipleInputsOutputs
. Мне нужно использовать массив с тремя списками? Каждый из них должен иметь данные от одной оси от ускорителя (x, y и z), или мне нужно создать что-то еще?
Это моя первая модель, поэтому любые другие советы приветствуются.
Редактировать:
List<Sample> samples = collector.getSamples();
float[][] floatInputBuffer = new float[200][3];
for(int i = 0; i < 200; i++) {
floatInputBuffer[i][0] = samples.get(i).getX();
floatInputBuffer[i][1] = samples.get(i).getY();
floatInputBuffer[i][2] = samples.get(i).getZ();
}
Object[] inputArray = {floatInputBuffer, new int[]{5000}};
Map<Integer, Object> outputMap = new HashMap<>();
outputMap.put(0, new float[1][labels.size()]);
Interpreter interpeter = null;
try {
interpeter = new Interpreter(loadModel(getAssets(), MODEL_PATH.split("file:///android_asset/", -1)[1]));
} catch (IOException e) {
e.printStackTrace();
}
interpeter.runForMultipleInputsOutputs(inputArray, outputMap);