Запись списка Python в виде файла HDF5 с использованием модуля h5py - PullRequest
0 голосов
/ 16 января 2020

Я создал список Python, содержащий случайные значения, созданные с помощью TensorFlow 2.0, которые я затем хочу сохранить в виде файла HDF5 с помощью модуля "h5py" в Python.

Код, который я использую, имеет вид следует-

# list to hold values-
wts_extracted = []

wts_extracted.append(tf.cast(tf.random.normal(shape = (4, 4), mean = 0, stddev = 1), dtype=tf.float32))
wts_extracted.append(tf.cast(tf.random.normal(shape = (4,), mean = 0, stddev = 1), dtype=tf.float32))
wts_extracted.append(tf.cast(tf.random.normal(shape = (4, 3), mean = 0, stddev = 1), dtype=tf.float32))
wts_extracted.append(tf.cast(tf.random.normal(shape = (3, ), mean = 0, stddev = 1), dtype=tf.float32))
wts_extracted.append(tf.cast(tf.random.normal(shape = (3, 1), mean = 0, stddev = 1), dtype=tf.float32))
wts_extracted.append(tf.cast(tf.random.normal(shape = (1, ), mean = 0, stddev = 1), dtype=tf.float32))

# Convert Python list to numpy array-
n = np.array(wts_extracted)

n.shape
# (6,)

type(n)
# numpy.ndarray

# Save manually created weights as '.h5' file-
with h5py.File("manually_created_weights.h5", "w") as f:
    dset = f.create_dataset("default", data = n)

Полученное сообщение об ошибке:

TypeError Traceback (последний последний вызов) в 1 с h5py.File ("manual_created_weights.h5", "w ") как f: ----> 2 dset = f.create_dataset (" по умолчанию ", data = n)

~ / .local / lib / python3 .7 / site-packages / h5py / _hl / group.py в create_dataset (self, name, shape, dtype, data, ** kwds) 134 135 с phil: -> 136 dsid = dataset.make_new_dset (self, shape, dtype, data, ** kwds) 137 dset = dataset.Dataset (dsid) 138, если имя не None:

~ / .local / lib / python3 .7 / site-packages / h5py / _hl / dataset.py в make_new_dset (parent, shape, dtype, данные, чанки, сжатие, тасование, fletcher32, maxshape, compress_opts, fillvalue, scaleoffset, track_times, external, track_order, dcpl) 116 else: 117 dtype = numpy .dtype (dtype) -> 11 8 tid = h5t.py_create (dtype, logic = 1) 119 120 # Legacy

h5py / h5t.pyx в h5py.h5t.py_create ()

h5py / h5t.pyx в h5py. h5t.py_create ()

h5py / h5t.pyx в h5py.h5t.py_create ()

TypeError: Объект dtype dtype ('O') не имеет собственного HDF5-эквивалента

Я прочитал, что для использования модуля "h5py" вы должны конвертировать объекты Pythoni c в numpy массивы, что я и сделал. Что не так?

Спасибо!

РЕДАКТИРОВАТЬ:

"h5py" не может обрабатывать различные формы / размеры, следовательно, у меня есть следующий код:

# Save the different shape arrays as separate datasets:

# Python dict-
wts_extracted_dict = {}

l = 0

while l < len(wts_extracted):
    wts_extracted_dict['layer-{0}'.format(l)] = wts_extracted[l]
    l += 1


# Create '.h5' file on HDD-
f = h5py.File("manual_weights.h5", "w")

# Create a group-
grp = f.create_group("alist")

for k, v in wts_extracted_dict.items():
    grp.create_dataset(k, data=v)

grp
# <HDF5 group "/alist" (6 members)>

f.close()

Однако, когда я пытаюсь прочитать сохраненный файл и получить доступ к группам следующим образом:

f = h5py.File("manual_weights.h5", "r")

f.keys()
# <KeysViewHDF5 ['alist']>

f['alist']
# <HDF5 group "/alist" (6 members)>

type(f['alist'])
# h5py._hl.group.Group

Как получить доступ к группе?

...