Я создал список 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
Как получить доступ к группе?