Существует ли легкий модуль Python для загрузки предварительно установленных модулей ML и выполнения прогноза? - PullRequest
1 голос
/ 22 мая 2019

Я внедряю модуль машинного обучения, который должен работать в Raspberry Pi, который в настоящее время используется несколькими службами.Моя идея состоит в том, чтобы хранить в устройстве только код, отвечающий за извлечение входов модуля ML и выполнение прогноза, вместе с файлом, содержащим модель нейронной сети, уже установленную с использованием Keras.Другими словами, я хотел бы избежать установки всех пакетов Keras / Tensorflow и зависимостей, если моя цель - только выполнить прогнозирование для обученной модели, а не обучать новую модель.Есть способ сделать это?Существуют ли какие-либо облегченные библиотеки, которые позволяют загружать модель нейронной сети (со всеми настройками весов и смещений) и выполнять прогнозирование с учетом входных данных?

Что я могу сделать сейчас, так это загрузить вRaspberry Pi - файл .h5, содержащий модель, веса и смещения, но все же я должен объявить функцию построения модели через Keras.

from tensorflow.keras.models import load_model
from tensorflow.keras.wrappers.scikit_learn import KerasRegressor
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

def NN_model():
'''
Definition of the Neural Network model
'''
model = Sequential()
model.add(Dense(7, input_dim=6, kernel_initializer='normal', activation='relu'))
model.add(Dense(15, kernel_initializer='normal', activation='relu'))
model.add(Dense(24, kernel_initializer='normal'))
# Compile model
model.compile(loss='mean_squared_error', optimizer='adam')
return model

'''
Load NN model and use it to predict the radiation values
for the next 24 hours, hour by hour
'''
regr = KerasRegressor(build_fn=NN_model, epochs=1000, batch_size=5, verbose=0)
regr.model = load_model('saved_model.h5')
pred=regr.predict(input_row)

Поскольку встроенная нейронная сеть - это только вопросвесов и смещений (и функций активации), я ожидаю, что, как только эти параметры будут определены, мне не понадобится вся среда Tensforflow и Keras для сопоставления вывода с входами, которые я даю NN.

То, что я хотел бы иметь, это что-то вроде:

import lightweight_module as lm
regression_model = lm.load_model('saved_model.h5')
prediction=regression_model.predict(inputs)

1 Ответ

0 голосов
/ 24 мая 2019

Что вы можете сделать, это обрезать свою нейронную сеть, сохраняя при этом ту же точность.Он удаляет все нежелательные связи между различными нейронами, которые не изучают ничего существенного.Это не только уменьшает сложность вашего NN, но и значительно уменьшает необходимое пространство для хранения, а также сокращает время вывода.В Keras я не знаю ни одного такого модуля (хотя я думаю, что люди сделали свою собственную версию), но такие модули, как pytorch & caffe, имеют некоторую реализацию AlexNets & VGGNets, они могут уменьшить размер вашей модели NN даже в 49 раз.Вы можете найти одну такую ​​реализацию здесь.

https://github.com/felzek/AlexNet-A-Practical-Implementation/blob/master/testModel.py

...