Более легкая альтернатива tensorflow- python для распространения - PullRequest
0 голосов
/ 17 июня 2020

Я пытался скомпилировать файл py в двоичный файл, который просто считывает модель из файла json и прогнозирует результат через импортированную модель. Теперь проблема в том, что когда я пытаюсь скомпилировать программу через pyinstaller, результирующий файл составляет около 290 МБ, поскольку он пытается скомпилировать весь пакет tenorflow и его нежелательные зависимости. Не говоря уже о том, что он очень-очень медленно запускается, поскольку пытается извлечь файлы.

Как вы можете видеть, это просто простой код, который проходит через папку с изображениями и идентифицирует их как мем или содержимое без мемов для очистки моей папки WhatsApp.

import os
from tensorflow.keras.preprocessing.image import ImageDataGenerator 
from tensorflow.keras.models import model_from_json
import shutil

BATCH_SIZE = 8
SHAPE = (150,150,3)

p = input("Enter path of folder to extract memes from")
p = p.replace("'","")
p = p.replace('"','')

json_file = open('model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
model = model_from_json(loaded_model_json)
model.load_weights('weights.best.hdf5')
test_datagen = ImageDataGenerator(rescale=1./255)
generator = test_datagen.flow_from_directory(
        p,
        target_size=SHAPE[:-1],
        batch_size=BATCH_SIZE,
        class_mode=None,
        shuffle=False)

pred = model.predict_generator(generator)
# print(pred)
# print(model.summary())
pred[pred>0.5] = 1
pred[pred<=0.5] = 0
d = ["garbage","good"]
for i in range(len(pred)):
  filename = generator.filenames[i].split('\\')[1]
  if(pred[i][0] == 0):
    shutil.move(generator.filepaths[i],os.path.join(os.path.join('test',str(int(pred[i][0]))),filename))

Итак, мой вопрос в том, есть ли альтернатива функции model.predict, которая может быть намного легче, чем у одного тензорного потока, поскольку я не хочу включить в свой дистрибутив весь пакет tenorflow размером 600 МБ.

1 Ответ

3 голосов
/ 17 июня 2020

Почему вы не используете квантование в своих моделях Tensorflow? Размер модели можно уменьшить до 75%. Это обработка, которая позволяет Tensorflow Lite делать прогнозы для изображений в режиме реального времени, используя не более чем процессор мобильного телефона. или 8-битные целые числа. Tensorflow обычно рекомендует 16-битные числа с плавающей запятой для ускорения графического процессора и 8-битные целые числа для выполнения CPU. Прочтите руководство здесь .

Квантование приносит улучшения за счет сжатия модели и уменьшения задержки. При использовании значений API по умолчанию размер модели уменьшается в 4 раза, и мы обычно видим от 1,5 до 4 раз улучшения задержки ЦП в протестированных серверных модулях. В конце концов, улучшения задержки можно увидеть на совместимых ускорителях машинного обучения, таких как EdgeTPU и NNAPI. снижение точности модели. Эти методы могут быть выполнены на уже обученной модели TensorFlow с плавающей запятой и применены во время преобразования TensorFlow Lite.

Подробнее о квантовании модели после обучения здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...