Просмотрите пример в своем сообщении!Ваша первоначальная ошибка в строке:
array = np.array(list(hdf.get("train_happy.h5")))
train_happy.h5
- это имя файла HDF5 .Вам необходимо использовать имя набора данных изображения в файле HDF5 (с использованием номенклатуры группы / набора данных).Вывод list(hdf.keys())
указывает, что у вас есть 3 узла на корневом уровне.Каждый узел - это либо группа, либо набор данных (изображение).Не зная точно, что у вас есть, трудно написать следующий шаг.В идеале вы должны использовать .isinstance()
, чтобы получить тип узла.Ниже приведен очень простой пример для циклического повторения имен ваших узлов:
for node in list(hdf.keys()) :
print ('working on node %s' % node)
object = hdf[node]
if (isinstance(object, h5py.Group)):
print ('%s is a Group' % node )
elif (isinstance(object, h5py.Dataset)):
print ('%s is a Dataset' % node )
Или вы можете просто взломать и попробовать это (соответственно корректируя нисходящий код): [код ниже изменен согласно комментариям hpaulj]
array_x = hdf.get["train_set_x"][:]
array_y = hdf.get["train_set_y"][:]
Приведенный выше код предполагает, что train_set_x
и train_set_y
являются наборами данных изображений (аналогично "Photos/Image 1"
в вашей ссылке).
Кроме того, вам НЕ нужно второе объявление hdf2 (hdf2 = h5py.File("test_happy.h5",'r')
) для обработки второго изображения.Вы можете повторно использовать hdf
каждый раз и изменять имя ссылки на группу / набор данных, как показано для array_y
выше.