Java: Сериализация огромного объема данных в единственный файл

В Android вы можете использовать TensorFlow Lite , облегченное решение для TensorFlow.

  1. Вы можете преобразовать модель TensorFlow или модель Keras в модель TF Lite (.tflite). См. здесь .
  2. Эта модель TF Lite может быть выведена на устройство Android или iOS с использованием Java и Swift API TF Lite.
  3. Он может не поддерживать некоторые уровни, такие как LSTM или BatchNormalization. Плотный и все слои Conv работают хорошо.
  4. Другой метод использует Tensorflow Mobile.
  5. TensorFlow Mobile запускает файл буферов протокола (.pb). Это устарело, но все еще может быть использовано. Но Google предлагает своим разработчикам использовать TF Lite.

Вы можете найти полное руководство здесь .

5
задан Javier 24 September 2008 в 20:22
поделиться

8 ответов

Вы смотрели на буферы протокола Google? Походит на вариант использования для него.

4
ответ дан 14 December 2019 в 09:05
поделиться

Я не знаю, почему Сериализация Java была провалена, это - совершенно жизнеспособный механизм.

Это не ясно из исходного сообщения, но является всем 2G данных в "куче" одновременно? Или Вы выводите что-то еще?

Из поля Сериализация не является "идеальным" решением, но если Вы реализуете Externalizable на своих объектах, Сериализация может работать просто великолепно. Большой расход сериализации выясняет, что записать и как записать это. Путем реализации Externalizable Вы вынимаете те решения из его рук, таким образом получая настоящее повышение производительности и пространство сбережения.

В то время как ввод-вывод является основной стоимостью записи больших объемов данных, несущественные затраты на преобразование данных могут также быть очень дорогими. Например, Вы не хотите преобразовывать все свои числа, чтобы написать сообщение и затем обратно снова, лучше сохранить их в более собственном формате, если это возможно. ObjectStream имеет методы к чтению-записи собственные типы в Java.

Если все Ваши данные разработаны, чтобы быть загруженными в в единственную структуру, Вы могли просто сделать ObjectOutputStream.writeObject(yourBigDatastructure) после реализации Externalizable.

Однако Вы могли также выполнить итерации по своей структуре и назвать writeObject на отдельных объектах.

Так или иначе Вы испытываете необходимость в некоторой "objectToFile" стандартной программе, возможно, несколько. И это эффективно, что Externalizable обеспечивает, а также платформа для обхода структуры.

Другой проблемой, конечно, является управление версиями и т.д. Но так как Вы реализуете все стандартные программы сериализации сами, Вы имеете полный контроль над этим также.

4
ответ дан 14 December 2019 в 09:05
поделиться

Самый простой подход, происходящий сразу по моему мнению, использует буфер с отображенной памятью NIO (java.nio. MappedByteBuffer). Используйте единственный буфер (приблизительно) соответствующий размеру одного объекта, и сбросьте/добавьте их к выходному файлу при необходимости. Буферы с отображенной памятью очень эффективны.

0
ответ дан 14 December 2019 в 09:05
поделиться

Вы попробовали сериализацию Java? Вы записали бы им использование ObjectOutputStream и считали бы их назад в использовании ObjectInputStream. Конечно, классы должны были бы быть Serializable. Это было бы низкое решение для усилия и, потому что объекты хранятся в двоичном файле, это было бы компактно и быстро.

0
ответ дан 14 December 2019 в 09:05
поделиться

Если производительность очень импортирует затем, Вы должны записать это сам. Необходимо использовать компактный двоичный формат. Поскольку с 2 ГБ диск операция ввода-вывода очень важны. При использовании какого-либо человекочитаемого формата как XML или другие сценарии, Вы изменяете размер данных с фактором 2 или больше.

В зависимости от данных это может быть, убыстряются, если Вы сжимаете данные на лету с низким уровнем сжатия.

Общее количество никакие, движение является сериализацией Java, потому что при чтении Java проверяют каждый объект, если это - ссылка на существующий объект.

0
ответ дан 14 December 2019 в 09:05
поделиться

Я разработал JOAFIP как альтернативу базы данных.

0
ответ дан 14 December 2019 в 09:05
поделиться

буферы протокола: имеет смысл. вот выборка от их Wiki: http://code.google.com/apis/protocolbuffers/docs/javatutorial.html

Получение большей скорости

По умолчанию буферный компилятор протокола пытается генерировать меньшие файлы при помощи отражения для реализации большей части функциональности (например, парсинг и сериализация). Однако компилятор может также сгенерировать код, оптимизированный явно для Ваших типов сообщений, часто обеспечивая повышение производительности порядка величины, но также и удвоив размер кода. При профилировании шоу, что приложение проводит много времени в буферной библиотеке протокола, необходимо попытаться изменить режим оптимизации. Просто добавьте следующую строку к своему .proto файлу:

опция optimize_for = СКОРОСТЬ;

Повторно выполните компилятор протокола, и он генерирует чрезвычайно быстро парсинг, сериализацию и другой код.

0
ответ дан 14 December 2019 в 09:05
поделиться

Необходимо, вероятно, рассмотреть решение для базы данных - все базы данных делают, оптимизируют их информацию, и если Вы используете, в спящем режиме, Вы сохраняете свою объектную модель, как, и действительно даже не думайте о своем DB (я верю вот почему, что это называют, в спящем режиме, просто хранят Ваши данные прочь, затем возвращают его),

-1
ответ дан 14 December 2019 в 09:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: