Python 获取操作错误:[Errno 16]设备或资源正忙:';使用tf.keras.models.Sequential.fit_生成器时
我修改了我在这里找到的代码: 因此,它可以与Python 获取操作错误:[Errno 16]设备或资源正忙:';使用tf.keras.models.Sequential.fit_生成器时,python,tensorflow,keras,Python,Tensorflow,Keras,我修改了我在这里找到的代码: 因此,它可以与tf.keras一起工作,但是当我使用fit_generator时,会出现设备或资源忙的错误。 我尝试了tf.keras.models.Sequential.fit,但没有得到这个错误 from __future__ import print_function import numpy as np import os from keras.datasets import cifar100 from tensorflow.keras.preproces
tf.keras
一起工作,但是当我使用fit_generator
时,会出现设备或资源忙的错误。
我尝试了tf.keras.models.Sequential.fit
,但没有得到这个错误
from __future__ import print_function
import numpy as np
import os
from keras.datasets import cifar100
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten
from tensorflow.keras.layers import Conv2D, MaxPool2D, BatchNormalization
from tensorflow.keras import optimizers
from tensorflow.keras import regularizers
import tensorflow as tf
import tensorflow.keras as keras
def build_model():
def normalize(x,y):
def main():
batch_size = 128
maxepochs = 250
learning_rate = 0.1
lr_decay = 1e-6
lr_drop = 20
tf.logging.set_verbosity(tf.logging.INFO)
os.environ["CUDA_VISIBLE_DEVICES"] = '0'
(x_train, y_train), (x_test, y_test) = cifar100.load_data()
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train, x_test = normalize(x_train, x_test)
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
model = build_model()
def lr_scheduler(epoch):
return learning_rate * (0.5 ** (epoch // lr_drop))
reduce_lr = keras.callbacks.LearningRateScheduler(lr_scheduler)
datagen = ImageDataGenerator(
featurewise_center=False, # set input mean to 0 over the dataset
samplewise_center=False, # set each sample mean to 0
featurewise_std_normalization=False, # divide inputs by std of the dataset
samplewise_std_normalization=False, # divide each input by its std
zca_whitening=False, # apply ZCA whitening
rotation_range=15, # randomly rotate images in the range (degrees, 0 to 180)
width_shift_range=0.1, # randomly shift images horizontally (fraction of total width)
height_shift_range=0.1, # randomly shift images vertically (fraction of total height)
horizontal_flip=True, # randomly flip images
vertical_flip=False) # randomly flip images
datagen.fit(x_train)
sgd = optimizers.SGD(lr=learning_rate, decay=lr_decay, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
model.fit_generator(datagen.flow(x_train, y_train,
batch_size=batch_size),
steps_per_epoch=None,
epochs=maxepochs,
use_multiprocessing=False,
validation_data=(x_test, y_test), callbacks=[reduce_lr], verbose=1)
这是我在培训结束时(250个纪元之后)遇到的错误:
它试图删除一些用于进程间通信的临时目录,但该目录是通过NFS装载的,其中的一些文件是打开的。NFS不支持在文件打开时取消链接的其他常见Unix习惯用法,因此NFS客户端通过重命名文件来模拟该文件,并在文件关闭后真正将其删除 当然,递归删除也会尝试删除重命名的文件,从而克服这一问题。在某些情况下,它只是再次重命名它(如果递归删除最终尝试
rmdir
,则生成enotery
),但您得到了EBUSY
(可能表示文件正在执行?)
在某些情况下,它可能是由交互活动引起的,但如果这不是问题所在,请确保在让自动清理运行之前,已清理所有资源并加入进程。它正在尝试删除用于进程之间通信的一些临时目录,但是目录是通过NFS挂载的,其中的一些文件是打开的。NFS不支持在文件打开时取消链接的其他常见Unix习惯用法,因此NFS客户端通过重命名文件来模拟该文件,并在文件关闭后真正将其删除 当然,递归删除也会尝试删除重命名的文件,从而克服这一问题。在某些情况下,它只是再次重命名它(如果递归删除最终尝试
rmdir
,则生成enotery
),但您得到了EBUSY
(可能表示文件正在执行?)
在某些情况下,这可能是由交互活动引起的,但如果这不是问题所在,请确保在让自动清理运行之前,已清理所有资源并加入进程。感谢您澄清此问题。然而,我不太清楚你所说的“你的资源被清理,你的流程被加入”是什么意思。你能详细解释一下吗?@ShadiRahimian:我没有你所有的代码,而且可能对TensorFlow了解不够,无法准确地说出来,但是回溯显示解释器正在关闭,我们知道一个文件仍然打开。后者的罪魁祸首可能是
ImageDataGenerator
,因为fit_generator
希望它无限期地生成数据。您还可以使用pdb
获取目录名,这可能表明哪个子系统正在尝试清理。或者在.nfs…
上运行文件
,以识别其类型。感谢您澄清此问题。然而,我不太清楚你所说的“你的资源被清理,你的流程被加入”是什么意思。你能详细解释一下吗?@ShadiRahimian:我没有你所有的代码,而且可能对TensorFlow了解不够,无法准确地说出来,但是回溯显示解释器正在关闭,我们知道一个文件仍然打开。后者的罪魁祸首可能是ImageDataGenerator
,因为fit_generator
希望它无限期地生成数据。您还可以使用pdb
获取目录名,这可能表明哪个子系统正在尝试清理。或者在.nfs…
上运行文件
,以识别其类型。
Traceback (most recent call last):
File "/BS/work/anaconda3/envs/gpu/lib/python3.6/multiprocessing/util.py", line 262, in _run_finalizers
finalizer()
File "/BS/work/anaconda3/envs/gpu/lib/python3.6/multiprocessing/util.py", line 186, in __call__
res = self._callback(*self._args, **self._kwargs)
File "/BS/work/anaconda3/envs/gpu/lib/python3.6/shutil.py", line 486, in rmtree
_rmtree_safe_fd(fd, path, onerror)
File "/BS/work/anaconda3/envs/gpu/lib/python3.6/shutil.py", line 444, in _rmtree_safe_fd
onerror(os.unlink, fullname, sys.exc_info())
File "/BS/work/anaconda3/envs/gpu/lib/python3.6/shutil.py", line 442, in _rmtree_safe_fd
os.unlink(name, dir_fd=topfd)
OSError: [Errno 16] Device or resource busy: '.nfs00000000000890d30000a675'