Я пытаюсь сделать вывод с помощью модели глубокого обучения на тестовых изображениях. Так как у меня есть gpu для генерации прогнозов на основе модели для подсчета очков костей, я должен выполнить манипулирование данными с массивами numpy, которые работают на одном процессоре и занимают часы. Чтобы ускорить процесс, я использовал библиотеку job lib, чтобы использовать мою 48-ядерную машину. Но теперь, когда я изменил свой код так, чтобы он мог работать параллельно, он не обновляет мои глобальные переменные соответствующим образом, и, следовательно, после завершения процесса значения моих numpy массивов по-прежнему равны 0. Я попытался взглянуть на некоторые документы, но не смог найти решение. Фрагмент кода прилагается ниже для справки.
def calculate_dice_all(idx):
global X_test
global y_test
global predictions
global corrput_images
global n_full
global n_core
global n_advancing
global necrosis
global edema
global noadv
#print(X_test[idx].shape,y_test[idx].shape)
label_img = y_test[idx].reshape(1,256,256,1)
test_img = X_test[idx].reshape(1,256,256,4)
#test_img_pred = model.predict(test_img)
test_img_pred = predictions[idx]
#test_img_pred = np.argmax(test_img_pred,axis=3)
label_img = label_img.reshape(256,256,1)
test_img = test_img.reshape(256,256,4)
test_img_pred = test_img_pred.reshape(256,256,1)
#print(test_img.shape,test_img_pred.shape,label_img.shape)
try:
full, core, advancing, cross_1, cross_2, cross_3 = get_dice(test_img,test_img_pred,label_img)
#print(full, core, advancing, cross_1, cross_2, cross_3)
except:
#print(test_img.shape,test_img_pred.shape,label_img.shape)
corrput_images = corrput_images + 1
return
n_full += full
n_core += core
n_advancing += advancing
necrosis += cross_1
edema += cross_2
noadv += cross_3
n_full=np.zeros(6); n_core=np.zeros(6); n_advancing=np.zeros(6); necrosis = np.zeros(6); edema = np.zeros(6); noadv = np.zeros(6)
corrput_images = 0
predictions = model.predict(X_test)
predictions = np.argmax(predictions,axis=3)
from joblib import Parallel, delayed
Parallel(n_jobs=48)(delayed(calculate_dice_all)(idx) for idx in progressbar.progressbar(range(0,X_test.shape[0])))
print(n_full, n_core, n_advancing, necrosis, edema, noadv)
print("Total Corrupt Images"+str(corrput_images))
d_full= 2*float(n_full[0]) / float(n_full[1]+n_full[2])
d_core= 2*float(n_core[0]) / float(n_core[1]+n_core[2])
d_advancing= 2*float(n_advancing[0]) / float(n_advancing[1]+n_advancing[2])
#print (architect
print ('Region_________________| Dice Coefficient')
print ('Complete Tumor_________| {0:.4f}'.format(d_full))
print ('Core Tumor_____________| {0:.4f}'.format(d_core))
print ('Enhancing Tumor________| {0:.4f}'.format(d_advancing))