Python Keras在迭代训练多个模型时冻结

Python Keras在迭代训练多个模型时冻结,python,tensorflow,keras,Python,Tensorflow,Keras,我正在使用Windows10、Keras(2.3.1版)和Tensorflow(2.1.0版)以及CUDA(10.1版、V10.1.243版)对20个受试者的数据训练20个剩余网络模型 不幸的是,对于模型k(k

我正在使用Windows10、Keras(2.3.1版)和Tensorflow(2.1.0版)以及CUDA(10.1版、V10.1.243版)对20个受试者的数据训练20个剩余网络模型

不幸的是,对于模型k(k<20),训练在第一个历元期间随机停止。有时k=3,有时k=7,有时k=19。我得到的唯一输出如下:

Train on 50634 samples, validate on 5626 samples
Epoch 1/200
CPU的工作负载一直保持在20%(如果我允许的话,甚至是几天),而GPU的工作负载一直保持在1%。从任务管理器中可以看出,导致此工作负载的任务是Python。我已尝试添加以下代码,但没有成功:

import tensorflow as tf
configproto = tf.compat.v1.ConfigProto() 
configproto.gpu_options.allow_growth = True
sess = tf.compat.v1.Session(config=configproto) 
tf.compat.v1.keras.backend.set_session(sess)
任何想法都将受到高度赞赏

更新1 以下是我的培训循环的一个片段:

    for testSubjectID in patientIDsForTesting:
        [testX,testY,trainX,trainY] = PrepareData.groupAndReturnDataAndBinaryAnnotationsForCurrentSubject()
        [scaledTrainX,scaledTestX] = PrepareData.scaleTrainingAndTestingData(trainX,testX)
        x_trainScaledWithoutValidationSet,x_validTrainScaled,y_trainWithoutValidationSet,y_validTrain = train_test_split(scaledTrainX,trainY,test_size=0.1,shuffle= True) 
        nb_classes = len(np.unique(np.concatenate((trainY,testY),axis =0)))
        y_true = np.array(testY, dtype=np.int64)

        y_trainWithoutValidationSetNumpyArray = np.array(y_trainWithoutValidationSet)
        testYNumpyArray = np.array(testY)
        y_validTrainNumpyArray = np.array(y_validTrain)
        trainXNumpyArray = np.array(trainX)

        enc = sklearn.preprocessing.OneHotEncoder()
        enc.fit(np.concatenate((y_trainWithoutValidationSetNumpyArray,testY),axis =0).reshape(-1,1))
        y_trainWithoutValidationSet = enc.transform(y_trainWithoutValidationSetNumpyArray.reshape(-1,1)).toarray()
        y_test = enc.transform(testYNumpyArray.reshape(-1,1)).toarray()
        y_valid = enc.transform(y_validTrainNumpyArray.reshape(-1,1)).toarray()

        scaledTestX = scaledTestX.reshape((scaledTestX.shape[0],scaledTestX.shape[1],1))
        x_validScaled = x_validTrainScaled.reshape((x_validTrainScaled.shape[0],x_validTrainScaled.shape[1],1))

        input_shape = x_trainScaledWithoutValidationSet.shape[1:] #x_trainScaled.shape[1:]
        Classifier = getResNetClassifier()
        Classifier.fit(x_trainScaledWithoutValidationSet,y_trainWithoutValidationSet,x_validScaled,y_valid,y_true) 

如果您需要
tf1
configs来修复
tf2
问题,这会很奇怪,所以我认为这不是问题所在。你能发布你的(最好是压缩的)训练循环(比如训练多个模型的循环+定义
tf.data.Dataset
/input\u data)吗?关于t1配置,你是对的。我以前没有意识到那个错误。我还添加了一个精简版的训练循环,希望我没有忘记包含任何重要的内容。你没有在循环中的任何地方使用
testSubjectId
,但它仍然可以工作。嗯,这个很难。这可能是一百万件事。我认为您最好的选择是在一个单独的进程中运行每个循环。它相当脏,但至少你知道垃圾收集(因为这是某种内存/GPU分配问题)应该可以工作:
subprocess.call('python3 loop\u body.py--testSubjectd{}.format(testSubjectId)
类似的东西。“testSubjectId”没有使用,因为我人为地压缩了代码。实际上,它是被使用的。我会尝试一下你的方法。非常感谢。