Чтобы создать пользовательскую потерю, которая учитывает значения в поднаборе (соответствующие граням сетки)
Мне нужно вычислить базу ошибок на основе значения в каждой вершине граней.
в переменной corr у меня есть список граней для сетки (30 тыс. граней), где значение 3 int представляет лицо с соответствующим номером вершины.< /p>
Что я сделал в функции потерь:
def customLoss(y_true, y_pred):
global corr
rms2 = 0.
for i in range(len(corr)):
rms2 += (abs(y_true[corr[0]] - y_pred[corr[0]]) + abs(y_true[corr[1]] - y_pred[corr[1]]) + abs(y_true[corr[2]] - y_pred[corr[2]])) /3
print(i, rms2)
return rms2
идея состоит в том, чтобы искать каждое лицо, если три значения относительно равны.
Проблема в том, что для вычисления требуется много времени .
есть ли способ ускорить этот процесс?
например, я пытаюсь получить доступ к y_true и y_pred с помощью индексации numpy
corr = np.array(corr)
print(corr.shape) = (29984, 3)
но если я попытаюсь получить доступ к функции customloss
y_true[corr]
это выдает ошибку
ValueError: Shape must be rank 1 but is rank 3 for '{{node customLoss/strided_slice}} = StridedSlice[Index=DT_INT32, T=DT_FLOAT, begin_mask=0, ellipsis_mask=0, end_mask=0, new_axis_mask=0, shrink_axis_mask=1](IteratorGetNext:1, customLoss/strided_slice/stack_1, customLoss/strided_slice/stack_3, customLoss/strided_slice/stack_4)' with input shapes: [?,15003], [1,29984,3], [1,29984,3], [1].
Подробнее здесь: https://stackoverflow.com/questions/790 ... -neighbors