В Julia и с импортом HDF5, как поддерживать нулевое заполнение при чтении - PullRequest
0 голосов
/ 19 марта 2020

Моя общая задача - объединить 4 существующих файла hdf5 в новый файл hdf5. В каждом файле hdf5 есть 6 наборов данных, и я успешно создал новый файл hdf5, используя некоторый код Julia, который я собрал. Однако, когда я go использовал этот объединенный файл hdf5 в качестве источника для обучения алгоритму машинного обучения, я столкнулся с проблемой, пытаясь прочитать один из 6 наборов данных.

Пример одного из 4 введите hdf5-файлы для набора поврежденных данных:

DATASET "/train/gt" {
DATATYPE  H5T_STRING {
  STRSIZE 105;
  STRPAD H5T_STR_NULLPAD;
  CSET H5T_CSET_ASCII;
  CTYPE H5T_C_S1;
}
DATASPACE  SIMPLE { ( 8711 ) / ( 8711 ) }

Обратите внимание, что типом является строка с нулевым символом, дополненная 105 символами. Когда мне это нравится:

dataj = h5read(r, "/train/gt")

Это заполнение потеряно, и каким-то образом мне нужно сохранить это нулевое заполнение. Вторичная проблема заключается в том, что CSET меняется на UTF8 с ASCII. Так что в моем новом комбинированном hdf5 я получаю

DATASET "/train/gt" {
   DATATYPE  H5T_STRING {
      STRSIZE H5T_VARIABLE;
      STRPAD H5T_STR_NULLTERM;
      CSET H5T_CSET_UTF8;
      CTYPE H5T_C_S1;
   }
   DATASPACE  SIMPLE { ( 14868 ) / ( 14868 ) }

Так что при обучении модели (python, а не Джулии) используется функция декодирования, которая не работает, потому что это рассматривается как строковый тип и декодирование не работает со строковыми переменными (в Python 3). То есть я не сохранил ожидаемый формат строки при создании этого нового hdf5.

Так можно ли сохранять нулевое заполнение при чтении в файлах hdf5, или мне нужно его пополнять? Если говорить более конкретно, есть ли функция импорта hdf5 для Julia, которая позволяет мне сохранять это нулевое заполнение при чтении (или записи во время конкатенации)?

...