读取 .h5 格式的文件并在数据集中使用
Reading files with .h5 format and using it in dataset
我有两个文件夹(一个用于训练,一个用于测试),每个文件夹都有大约 10 个 h5 格式的文件。我想阅读它们并在数据集中使用它们。我有读取它们的功能,但我不知道如何使用它来读取我 class.
中的文件
def read_h5(path):
data = h5py.File(path, 'r')
image = data['image'][:]
label = data['label'][:]
return image, label
class Myclass(Dataset):
def __init__(self, split='train', transform=None):
raise NotImplementedError
def __len__(self):
raise NotImplementedError
def __getitem__(self, index):
raise NotImplementedError
你有什么建议吗?
提前谢谢你
这可能是您想要做的事情的开始。我实现了 __init__()
,但没有实现 __len__()
或 __get_item__()
。用户提供路径,init函数调用class方法read_h5()
获取图片和标签数据数组。从 2 个不同的 H5 文件创建一个 class 对象有一个简短的主要部分。使用所有训练和测试数据的文件夹和文件名修改 paths
列表。
class H5_data():
def __init__(self, path): #split='train', transform=None):
self.path = path
self.image, self.label = H5_data.read_h5(path)
@classmethod
def read_h5(cls,path):
with h5py.File(path, 'r') as data:
image = data['image'][()]
label = data['label'][()]
return image, label
paths = ['train_0.h5', 'test_0.h5']
for path in paths:
h5_test = H5_data(path)
print(f'For HDF5 file: {path}')
print(f'image data, shape: {h5_test.image.shape}; dtype: {h5_test.image.dtype}')
print(f'label data, shape: {h5_test.label.shape}; dtype: {h5_test.label.dtype}')
恕我直言,使用数组数据创建 class 有点矫枉过正(如果您的数据集非常大,可能会导致内存问题)。创建 h5py 数据集对象并在需要时访问数据的内存效率更高。下面的示例与上面的代码相同,没有使用 numpy 数组创建 class 对象。
paths = ['train_0.h5', 'test_0.h5']
for path in paths:
with h5py.File(path, 'r') as data:
image = data['image']
label = data['label']
print(f'For HDF5 file: {path}')
print(f'image data, shape: {image.shape}; dtype: {image.dtype}')
print(f'label data, shape: {label.shape}; dtype: {label.dtype}')
我有两个文件夹(一个用于训练,一个用于测试),每个文件夹都有大约 10 个 h5 格式的文件。我想阅读它们并在数据集中使用它们。我有读取它们的功能,但我不知道如何使用它来读取我 class.
中的文件def read_h5(path):
data = h5py.File(path, 'r')
image = data['image'][:]
label = data['label'][:]
return image, label
class Myclass(Dataset):
def __init__(self, split='train', transform=None):
raise NotImplementedError
def __len__(self):
raise NotImplementedError
def __getitem__(self, index):
raise NotImplementedError
你有什么建议吗? 提前谢谢你
这可能是您想要做的事情的开始。我实现了 __init__()
,但没有实现 __len__()
或 __get_item__()
。用户提供路径,init函数调用class方法read_h5()
获取图片和标签数据数组。从 2 个不同的 H5 文件创建一个 class 对象有一个简短的主要部分。使用所有训练和测试数据的文件夹和文件名修改 paths
列表。
class H5_data():
def __init__(self, path): #split='train', transform=None):
self.path = path
self.image, self.label = H5_data.read_h5(path)
@classmethod
def read_h5(cls,path):
with h5py.File(path, 'r') as data:
image = data['image'][()]
label = data['label'][()]
return image, label
paths = ['train_0.h5', 'test_0.h5']
for path in paths:
h5_test = H5_data(path)
print(f'For HDF5 file: {path}')
print(f'image data, shape: {h5_test.image.shape}; dtype: {h5_test.image.dtype}')
print(f'label data, shape: {h5_test.label.shape}; dtype: {h5_test.label.dtype}')
恕我直言,使用数组数据创建 class 有点矫枉过正(如果您的数据集非常大,可能会导致内存问题)。创建 h5py 数据集对象并在需要时访问数据的内存效率更高。下面的示例与上面的代码相同,没有使用 numpy 数组创建 class 对象。
paths = ['train_0.h5', 'test_0.h5']
for path in paths:
with h5py.File(path, 'r') as data:
image = data['image']
label = data['label']
print(f'For HDF5 file: {path}')
print(f'image data, shape: {image.shape}; dtype: {image.dtype}')
print(f'label data, shape: {label.shape}; dtype: {label.dtype}')