Как запустить обучение на графическом процессореPython

Программы на Python
Anonymous
Как запустить обучение на графическом процессоре

Сообщение Anonymous »


Я пытаюсь провести обучение на своем графическом процессоре с помощью Cuda. Но когда я начинаю обучение, я получаю эту ошибку: Невозможно определить тип Numba

Вот код:`

импортировать ОС импортировать систему импортировать numpy как np импортировать matplotlib.pyplot как график импортировать cls_data_generator импортировать оценочные_метрики импортировать keras_model параметр импорта импортировать утилиты время импорта из импорта IPython, встраивание plot.switch_backend('agg') #------------------------------------- CUDA ----------- ----------------------------------- из numba import jit, cuda из импорта numba NumbaDeprecationWarning, NumbaPendingDeprecationWarning импортировать предупреждения alerts.simplefilter('игнорировать', категория=NumbaDeprecationWarning) alerts.simplefilter('игнорировать', категория=NumbaPendingDeprecationWarning) # -------------------------------------------------- --------------------------------------- ...

@cuda.jit(nopython=True) def Training(nb_epoch,model,data_gen_train,data_gen_test,params,tr_loss,val_loss,sed_loss, doa_loss,sed_gt,doa_gt,epoch_metric_loss,unique_name,patience_cnt,conf_mat,best_conf_mat,best_metric): для epoch_cnt в диапазоне (nb_epoch): начало = время.время() история = model.fit_generator( генератор = data_gen_train.generate (), Steps_per_epoch=2 if params['quick_test'] else data_gen_train.get_total_batches_in_data(), validation_data=data_gen_test.generate(), validation_steps=2 if params['quick_test'] else data_gen_test.get_total_batches_in_data(), эпохи=1, подробный = 0 ) tr_loss[epoch_cnt] = hist.history.get('потеря')[-1] val_loss[epoch_cnt] = hist.history.get('val_loss')[-1] пред = model.predict_generator( генератор = data_gen_test.generate (), шаги = 2, если params['quick_test'] else data_gen_test.get_total_batches_in_data(), подробный = 2 ) если params['mode'] == 'regr': sed_pred = Assessment_metrics.reshape_3Dto2D(pred[0]) > 0,5 doa_pred = Assessment_metrics.reshape_3Dto2D(pred[1]) sed_loss[epoch_cnt,:] = Assessment_metrics.compute_sed_scores(sed_pred, sed_gt, data_gen_test.nb_frames_1s()) если параметры['azi_only']: doa_loss[epoch_cnt, :], conf_mat = Assessment_metrics.compute_doa_scores_regr_xy(doa_pred, doa_gt, sed_pred, sed_gt) еще: doa_loss[epoch_cnt, :], conf_mat = Assessment_metrics.compute_doa_scores_regr_xyz(doa_pred, doa_gt, sed_pred, sed_gt) epoch_metric_loss[epoch_cnt] = np.mean([ sed_loss[epoch_cnt, 0], 1-sed_loss[epoch_cnt, 1], 2*np.arcsin(doa_loss[epoch_cnt, 1]/2.0)/np.pi, 1 - (doa_loss[epoch_cnt, 5] / float(doa_gt.shape[0]))] ) plot_functions(unique_name, tr_loss, val_loss, sed_loss, doa_loss, epoch_metric_loss) терпение_cnt += 1 если epoch_metric_loss[epoch_cnt] < best_metric: best_metric = epoch_metric_loss[epoch_cnt] best_conf_mat = conf_mat best_epoch = epoch_cnt model.save('{}_model.h5'.format(unique_name)) терпение_cnt = 0 Распечатать( 'epoch_cnt: %d, время: %.2fs, tr_loss: %.2f, val_loss: %.2f, ' 'F1_overall: %.2f, ER_overall: %.2f,' 'doa_error_gt: %.2f, doa_error_pred: %.2f, Good_pks_ratio:%.2f, ' 'error_metric: %.2f, best_error_metric: %.2f, best_epoch: %d' % ( epoch_cnt, time.time() - начало, tr_loss[epoch_cnt], val_loss[epoch_cnt], sed_loss[epoch_cnt, 1], sed_loss[epoch_cnt, 0], doa_loss[epoch_cnt, 1], doa_loss[epoch_cnt, 2], doa_loss[epoch_cnt, 5] / float(sed_gt.shape[0]), epoch_metric_loss[epoch_cnt], best_metric, best_epoch ) ) если терпение_cnt > параметры ['терпение']: перерыв Я думаю, проблема в том, что я даю «модель» в качестве аргумента функции «обучение». model — это модель keras, определенная в «keras_model.py». Но я не могу решить эту проблему. Кто-нибудь может мне помочь?

П.С. Мне нужно использовать python 3.7, tensorflow 1.14.0, keras 2.2.4., numpy=1.16.4

Я хочу адаптировать этот код для работы на графическом процессоре с Cuda, но не понимаю, как это сделать. Я добавил Numba и jit.

Вернуться в «Python»