Python Keras在迭代训练多个模型时冻结
我正在使用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。我得到的唯一输出如下: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
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”没有使用,因为我人为地压缩了代码。实际上,它是被使用的。我会尝试一下你的方法。非常感谢。