2012-06-28 3 views
2

Я работаю над проектом машинного обучения на Java, который будет включать в себя очень большую модель (выходной векторной машины поддержки для тех из вас, кто знаком с ней), которая будет должны быть получены довольно часто для использования конечным пользователем. Основная часть модели состоит из большого двумерного массива довольно маленьких объектов.Эффективность жесткого кодирования и ввода файлов

К сожалению, я не знаю точно, насколько велика модель (я уже работал с эталонными данными, и данные, которые я собираюсь использовать, еще не готовы), ни я знаю характеристики машины, на которой он будет работать, так как это тоже в воздухе.

У меня уже есть способ записать модель в файл как строку, но процесс записи занимает много времени, и процесс чтения занимает большую часть минуты. Я хотел бы сократить это время, поэтому у меня была либо яркая, либо безумно запутанная идея написать модель в .java-файл таким образом, чтобы ее можно было скомпилировать, а затем запустить, чтобы создать полностью сформированную модель.

Мои вопросы для вас: сохранение и компиляция модели в Java значительно быстрее, чем чтение ее из файла, в предположении, что модель имеет размер около 1 МБ? И есть ли какая-то причина, по которой я еще не видел, что это может быть фантастически глупая идея, что я не должен преследовать ни при каких обстоятельствах?

Благодарим вас за любые идеи, которые вы можете мне дать.

EDIT: по-видимому, попытка автоматически записать несколько тысяч значений в код делает метод, который примерно на два порядка больше, чем может обрабатывать компилятор. Хорошо, живите и учитесь.

ответ

1

Будет ли хранение и компиляция модели на Java значительно быстрее чем чтение ее из файла?

Это зависит от того, как вы создаете свою настраиваемую структуру данных, чтобы содержать вашу модель.

+0

Структура данных для модели уже существует; Я расширяю существующий класс без добавления полей (svm_class из библиотеки LibSVM, который был написан на C и переведен на Java, поэтому ему не хватает методов-членов). – CosmicComputer

+2

Любой шанс, что он реализует Serializable? –

+0

Он делает, но на самом деле ничего не делает с этим. – CosmicComputer

2

Вместо записи в строку или в файл java, вы можете подумать о создании компактного двоичного формата для данных.

0

Я согласен с приведенным выше ответом на использование двоичного формата ввода. Попробуем оптимизировать это в первую очередь. Можете ли вы предоставить некоторую информацию? ... или вы работаете с бинарными данными? ... буферизировать его? и т.д.?

Написание файла .java и его компиляция будет очень интересным ... но в какой-то момент оно обязательно должно дать ваши проблемы. Однако, я думаю, вы обнаружите, что он будет немного медленнее, чем оптимизированный двоичный формат, но быстрее, чем текстовый вход.

Также будьте очень осторожны при ранней оптимизации. Обычно «высококонфигурируемые» и «ослепляющие быстро» взаимно исключают друг друга. Скорее, сначала получите все, чтобы работать, а затем используйте профилировщик для оптимизации очень медленных разделов приложения.

1

Вопрос IMHO заключается в том, что чтение файла занимает много времени из-за ввода-вывода или из-за вычислительного времени (=> CPU). Если это будет позже, тогда вам удастся. Если причиной является ваш IO (например, жесткий диск), вы можете сжать файл и извлечь его после/во время чтения. Существует (конечно) поддержка ZIP в Java (даже для Streams).

Смежные вопросы