Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何解决使用keras';安装发电机';什么是多处理模式?_Python_Python 3.x_Keras_Io_Multiprocessing - Fatal编程技术网

Python 如何解决使用keras';安装发电机';什么是多处理模式?

Python 如何解决使用keras';安装发电机';什么是多处理模式?,python,python-3.x,keras,io,multiprocessing,Python,Python 3.x,Keras,Io,Multiprocessing,所以基本上我写了一个keras生成器,在它训练的时候从web服务器下载图像。这是一次加速训练的尝试,这样训练就不必等到整批图像下载后再开始训练 为了加快速度,我想在keras fit_生成器函数上启用多处理。然而,有时keras会尝试一次下载同一个图像多次。这不仅效率低下,而且由于多个进程试图同时写入同一个文件,程序也会崩溃。当多重处理错误时,即使有多个工作进程,也不会发生此问题。我想这是因为GIL 通常,您可以使用锁来确保同一文件只写入一次。但是,我不知道如何使用keras来实现这一点。如果有

所以基本上我写了一个keras生成器,在它训练的时候从web服务器下载图像。这是一次加速训练的尝试,这样训练就不必等到整批图像下载后再开始训练

为了加快速度,我想在keras fit_生成器函数上启用多处理。然而,有时keras会尝试一次下载同一个图像多次。这不仅效率低下,而且由于多个进程试图同时写入同一个文件,程序也会崩溃。当多重处理错误时,即使有多个工作进程,也不会发生此问题。我想这是因为GIL

通常,您可以使用锁来确保同一文件只写入一次。但是,我不知道如何使用keras来实现这一点。如果有人能给我一些建议那就太好了。谢谢你的阅读

以下是崩溃的代码:

 image_name = str(image['image'])
 try:
     obj = self.client.get_object(Bucket=S3_BUCKET, Key=SRC_IMG_FOLDER + image_name)
     obj_image = Image.open(obj['Body'])

     if self.image_extension not in image_name:
         image_name += self.image_extension
     obj_image.save(self.image_path(image_index))

文件的保存是我遇到问题的地方。

好吧,所以我想如果将来有人遇到类似问题,我会解决的。我只需使用
os.open(file_path,os.O_create | os.O_EXCL)
即可自动打开文件。我捕获文件existerror,并在该过程中等待文件完成下载。这确保了同一个文件不能被下载两次。

好的,所以我想如果将来有人有类似的问题,我会解决的。我只需使用
os.open(file_path,os.O_create | os.O_EXCL)
即可自动打开文件。我捕获文件existerror,并在该过程中等待文件完成下载。这样可以确保同一文件不能下载两次。

第一次下载后再重新使用如何?在这种情况下,您只需要根据文件名检查文件是否存在。这是我能想到的最简单的解决方案,问题是即使在第一个纪元keras也可以重用相同的图像。事实上,默认行为是我无法控制keras选择下载哪些图像。我想在继续之前检查一下图像是否已经下载,我实现了它,它似乎基本上解决了这个问题。然而,在执行检查之后,另一个进程仍有可能开始下载图像,就好像语句不是原子的一样。更不用说每次选择一个图像时检查整个文件夹中的现有图像是很昂贵的。你提到的是对的。但是如果我们运行更多的历代,图像可能会被一次又一次地下载,对吗?如果我们不执行任何检查?您是否可以共享在您创建的自定义数据生成器中执行多线程的代码部分?据我所知,时代在这里并不重要,keras只是在需要时使用和重用它想要的任何图像。据我所知,这意味着我们必须在keras每次选择新图像时进行检查。我只是不知道如何原子化地执行这项检查。我不手动执行任何多线程处理。我正在使用keras fit_生成器,它允许我传入multiprocessing=True。这允许keras启动多个进程,所有进程都并行访问我的生成器。不过,我会用崩溃的部分编辑我的帖子。在第一个epoch上下载,然后重新使用怎么样?在这种情况下,您只需要根据文件名检查文件是否存在。这是我能想到的最简单的解决方案,问题是即使在第一个纪元keras也可以重用相同的图像。事实上,默认行为是我无法控制keras选择下载哪些图像。我想在继续之前检查一下图像是否已经下载,我实现了它,它似乎基本上解决了这个问题。然而,在执行检查之后,另一个进程仍有可能开始下载图像,就好像语句不是原子的一样。更不用说每次选择一个图像时检查整个文件夹中的现有图像是很昂贵的。你提到的是对的。但是如果我们运行更多的历代,图像可能会被一次又一次地下载,对吗?如果我们不执行任何检查?您是否可以共享在您创建的自定义数据生成器中执行多线程的代码部分?据我所知,时代在这里并不重要,keras只是在需要时使用和重用它想要的任何图像。据我所知,这意味着我们必须在keras每次选择新图像时进行检查。我只是不知道如何原子化地执行这项检查。我不手动执行任何多线程处理。我正在使用keras fit_生成器,它允许我传入multiprocessing=True。这允许keras启动多个进程,所有进程都并行访问我的生成器。不过,我会用崩溃的部分编辑我的帖子。