Multithreading HDF5读取和拟合生成器多处理错误

Multithreading HDF5读取和拟合生成器多处理错误,multithreading,tensorflow,parallel-processing,keras,deep-learning,Multithreading,Tensorflow,Parallel Processing,Keras,Deep Learning,我正在尝试对fit_生成器进行多处理 这些就是我面临的问题 trainable_model.fit_generator(load_random_cached_bottlenecks(BATCH_SIZE, label_map, training_addr_label_map, train_npy_dir, 'h5py', h5py_file_train),epochs = EPOCHS, steps_per_epoch=iterations_per_epoch_t, validation_dat

我正在尝试对fit_生成器进行多处理

这些就是我面临的问题

trainable_model.fit_generator(load_random_cached_bottlenecks(BATCH_SIZE, label_map, training_addr_label_map, train_npy_dir, 'h5py', h5py_file_train),epochs = EPOCHS, steps_per_epoch=iterations_per_epoch_t, validation_data = load_random_cached_bottlenecks(BATCH_SIZE, label_map, validation_addr_label_map, val_npy_dir, 'h5py', h5py_file_val), validation_steps=iterations_per_epoch_v, workers = 1, callbacks = callback_list, use_multiprocessing = True, max_queue_size = 32)
导致问题的主要参数:
工作者
使用多处理

worker=1
时,
use\u multiprocessing=True/False
运行没有问题

如果
workers=5
使用\u multiprocessing=True
其抛出错误。奇怪的是它正在运行,但在一些随机的迭代中,我得到了如下错误

KeyError: 'Unable to open object (bad local heap signature)'

我用h5py来读取文件。我已经为此编写了自定义生成器

def load_random_cached_bottlenecks(batch_size, label_map,
 addr_label_map, dirs, comp_type = 'h5py', hdf5_file = None):
'''
Parameters
----------
batch_size: Number of bottlenecks to be loaded along with the labels
label_map: The dictionary that maps the class_names and the index
addr_label_map: The dictionary that maps addrs of bottlenecks and the labels
hdf5_file: This is the hdf5 file object with reading enabled.
Returns
-------
batch: (bottlenecks_train, bottlenecks_labels) a batch of them which is equal to batch_size
'''
while True:
    chosen_h5py = np.random.choice(dirs, size = batch_size)
    # chosen_h5py = [dirs[i] for i in batch_index]
    labels_for_chosen_h5py = [label_map[addr_label_map[i]] for i in chosen_h5py]
    h5py_data = np.array([hdf5_file[i] for i in chosen_h5py])
    h5py_onehot = to_categorical(labels_for_chosen_h5py, num_classes = LABEL_LENGTH)
    # print (h5py_data.shape)
    yield (h5py_data, h5py_onehot)
我已经提到了,但无法解决我的问题

Traceback (most recent call last):
File "/opt/anaconda3/lib/python3.6/site-packages/keras/utils/data_utils.py", line 677, in _data_generator_task
generator_output = next(self._generator)
File "general_model.py", line 263, in load_random_cached_bottlenecks
h5py_data = np.array([hdf5_file[i] for i in chosen_h5py])
File "/opt/anaconda3/lib/python3.6/site-packages/keras/utils/data_utils.py", line 677, in _data_generator_task
generator_output = next(self._generator)
File "general_model.py", line 263, in load_random_cached_bottlenecks
h5py_data = np.array([hdf5_file[i] for i in chosen_h5py])
File "general_model.py", line 263, in <listcomp>
h5py_data = np.array([hdf5_file[i] for i in chosen_h5py])
File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
File "general_model.py", line 263, in <listcomp>
h5py_data = np.array([hdf5_file[i] for i in chosen_h5py])
File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
File "/opt/anaconda3/lib/python3.6/site-packages/h5py/_hl/group.py", line 177, in __getitem__
oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
File "h5py/h5o.pyx", line 190, in h5py.h5o.open
File "/opt/anaconda3/lib/python3.6/site-packages/h5py/_hl/group.py", line 177, in __getitem__
oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
KeyError: 'Unable to open object (wrong B-tree signature)'
File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
File "h5py/h5o.pyx", line 190, in h5py.h5o.open
KeyError: 'Unable to open object (bad symbol table node signature)'
Traceback (most recent call last):
File "general_model.py", line 437, in <module>
train_with_bottlenecks(args, label_map, trainable_model, non_trainable_model, iterations_per_epoch_t, iterations_per_epoch_v)
File "general_model.py", line 326, in train_with_bottlenecks
validation_steps=iterations_per_epoch_v, workers = 4, callbacks = callback_list, use_multiprocessing = True, max_queue_size = 32)
File "/opt/anaconda3/lib/python3.6/site-packages/keras/legacy/interfaces.py", line 91, in wrapper
return func(*args, **kwargs)
File "/opt/anaconda3/lib/python3.6/site-packages/keras/engine/training.py", line 2194, in fit_generator
generator_output = next(output_generator)
File "/opt/anaconda3/lib/python3.6/site-packages/keras/utils/data_utils.py", line 793, in get
six.reraise(value.__class__, value, value.__traceback__)
File "/opt/anaconda3/lib/python3.6/site-packages/six.py", line 693, in reraise
raise value
   KeyError: 'Unable to open object (wrong B-tree signature)'
回溯(最近一次呼叫最后一次):
文件“/opt/anaconda3/lib/python3.6/site packages/keras/utils/data_utils.py”,第677行,在数据生成器任务中
发电机输出=下一个(自发电机)
文件“general\u model.py”,第263行,在load\u random\u cached\u中
h5py_data=np.array([hdf5_文件[i]表示所选_h5py中的i])
文件“/opt/anaconda3/lib/python3.6/site packages/keras/utils/data_utils.py”,第677行,在数据生成器任务中
发电机输出=下一个(自发电机)
文件“general\u model.py”,第263行,在load\u random\u cached\u中
h5py_data=np.array([hdf5_文件[i]表示所选_h5py中的i])
文件“general_model.py”,第263行,在
h5py_data=np.array([hdf5_文件[i]表示所选_h5py中的i])
文件“h5py/_objects.pyx”,第54行,在h5py._objects.with_phil.wrapper中
文件“general_model.py”,第263行,在
h5py_data=np.array([hdf5_文件[i]表示所选_h5py中的i])
文件“h5py/_objects.pyx”,第54行,在h5py._objects.with_phil.wrapper中
文件“h5py/_objects.pyx”,第55行,在h5py._objects.with_phil.wrapper中
文件“h5py/_objects.pyx”,第55行,在h5py._objects.with_phil.wrapper中
文件“/opt/anaconda3/lib/python3.6/site packages/h5py/_-hl/group.py”,第177行,在__
oid=h5o.open(self.id,self.\u e(名称),lapl=self.\u lapl)
文件“h5py/_objects.pyx”,第54行,在h5py._objects.with_phil.wrapper中
文件“h5py/_objects.pyx”,第55行,在h5py._objects.with_phil.wrapper中
文件“h5py/h5o.pyx”,第190行,位于h5py.h5o.open中
文件“/opt/anaconda3/lib/python3.6/site packages/h5py/_-hl/group.py”,第177行,在__
oid=h5o.open(self.id,self.\u e(名称),lapl=self.\u lapl)
KeyError:“无法打开对象(错误的B树签名)”
文件“h5py/_objects.pyx”,第54行,在h5py._objects.with_phil.wrapper中
文件“h5py/_objects.pyx”,第55行,在h5py._objects.with_phil.wrapper中
文件“h5py/h5o.pyx”,第190行,位于h5py.h5o.open中
KeyError:“无法打开对象(错误符号表节点签名)”
回溯(最近一次呼叫最后一次):
文件“general_model.py”,第437行,在
带瓶颈的训练(参数、标签映射、可训练模型、不可训练模型、每个历元的迭代次数、每个历元的迭代次数)
文件“general\u model.py”,第326行,在带有\u瓶颈的\u列中
验证步骤=迭代次数/历元,工人=4,回调=回调列表,使用多处理=真,最大队列大小=32)
文件“/opt/anaconda3/lib/python3.6/site packages/keras/legacy/interfaces.py”,第91行,在包装器中
返回函数(*args,**kwargs)
文件“/opt/anaconda3/lib/python3.6/site packages/keras/engine/training.py”,第2194行,在fit_生成器中
发电机输出=下一个(输出发电机)
get中的文件“/opt/anaconda3/lib/python3.6/site packages/keras/utils/data_utils.py”,第793行
六、重放(值、类、值、值、回溯)
文件“/opt/anaconda3/lib/python3.6/site packages/six.py”,第693行,重新登录
增值
KeyError:“无法打开对象(错误的B树签名)”

感谢您的帮助!提前谢谢

这本身不是一个解决方案,但这为我解决了这个问题

我遇到了一个类似的错误:
OSError:无法读取数据(错误的B树签名)
当尝试使用
fit_generator
时,当此生成器从
hdf5_文件中读取数据时,也在
anaconda3
虚拟环境中


在我的例子中,我创建了一个新的虚拟环境,并重新安装了它应该在其中工作的特定版本所需的依赖项,这样我的代码可以顺利运行

我也有同样的问题。。。有人找到解决办法了吗?
Traceback (most recent call last):
File "/opt/anaconda3/lib/python3.6/site-packages/keras/utils/data_utils.py", line 677, in _data_generator_task
generator_output = next(self._generator)
File "general_model.py", line 263, in load_random_cached_bottlenecks
h5py_data = np.array([hdf5_file[i] for i in chosen_h5py])
File "/opt/anaconda3/lib/python3.6/site-packages/keras/utils/data_utils.py", line 677, in _data_generator_task
generator_output = next(self._generator)
File "general_model.py", line 263, in load_random_cached_bottlenecks
h5py_data = np.array([hdf5_file[i] for i in chosen_h5py])
File "general_model.py", line 263, in <listcomp>
h5py_data = np.array([hdf5_file[i] for i in chosen_h5py])
File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
File "general_model.py", line 263, in <listcomp>
h5py_data = np.array([hdf5_file[i] for i in chosen_h5py])
File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
File "/opt/anaconda3/lib/python3.6/site-packages/h5py/_hl/group.py", line 177, in __getitem__
oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
File "h5py/h5o.pyx", line 190, in h5py.h5o.open
File "/opt/anaconda3/lib/python3.6/site-packages/h5py/_hl/group.py", line 177, in __getitem__
oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
KeyError: 'Unable to open object (wrong B-tree signature)'
File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
File "h5py/h5o.pyx", line 190, in h5py.h5o.open
KeyError: 'Unable to open object (bad symbol table node signature)'
Traceback (most recent call last):
File "general_model.py", line 437, in <module>
train_with_bottlenecks(args, label_map, trainable_model, non_trainable_model, iterations_per_epoch_t, iterations_per_epoch_v)
File "general_model.py", line 326, in train_with_bottlenecks
validation_steps=iterations_per_epoch_v, workers = 4, callbacks = callback_list, use_multiprocessing = True, max_queue_size = 32)
File "/opt/anaconda3/lib/python3.6/site-packages/keras/legacy/interfaces.py", line 91, in wrapper
return func(*args, **kwargs)
File "/opt/anaconda3/lib/python3.6/site-packages/keras/engine/training.py", line 2194, in fit_generator
generator_output = next(output_generator)
File "/opt/anaconda3/lib/python3.6/site-packages/keras/utils/data_utils.py", line 793, in get
six.reraise(value.__class__, value, value.__traceback__)
File "/opt/anaconda3/lib/python3.6/site-packages/six.py", line 693, in reraise
raise value
   KeyError: 'Unable to open object (wrong B-tree signature)'