У меня есть 2 тензора, тензор моего прогноза pred
имеет форму [batch, rows, cols, depth, vals]
или [32, 40, 60, 2, 2]
. Мой тензор истинности y
- это форма [batch, num_objs, vals]
или [32, 4, 10]
. Тензор y
имеет значения, которые соответствуют срезу тензора pred
. Я получаю индексы, используя
true_grid_coords = (y[:,:,:2] // params.grid_stride)
Теперь я хочу создать маску той же формы, что и мой тензор pred
, используя vals
из true_grid_coords
. Я хочу что-то вроде [batch, rows, cols, depth, vals] = 1
, если в одной паре vals в true_grid_coords
есть пара (rows, cols
) из тензора pred
. Это то, что у меня сейчас, работает, но медленно.
center_coords, wh_coords, obj_scores, class_probs = DetectNet.predict_transform(y_)
center_coords_shape = center_coords.shape
true_obj_coord_mask = tf.constant(1, shape=center_coords_shape, dtype=tf.float32)
true_obj_coord_mask = tf.Variable(true_obj_coord_mask)
true_grid_coords = (y[:,:,:2] // params.grid_stride) % 60
true_2d = tf.constant(1, shape=[2,2], dtype=tf.float32)
for i in range(true_grid_coords.shape[0]):
for j in range(true_grid_coords.shape[1]):
grid_x = int(true_grid_coords[i, j, 0].numpy())
grid_y = int(true_grid_coords[i, j, 1].numpy())
true_obj_coord_mask[i, grid_y, grid_x, :, :].assign(true_2d)
Есть ли способ получить тензор маски без использования циклов for?