Как добавить лямбда-слой для вычитания разных значений из разных осей - PullRequest
0 голосов
/ 23 июня 2018

У меня есть два CNN в каскаде, и после первого CNN я хочу выполнить некоторую последующую обработку выходных данных перед передачей второму CNN.Я пытался добавить лямбда-слой между ними с помощью следующей функции:

def pre_pro_layer(x):
    x=x*255.0
    x[..., 0] -= 103.939
    x[..., 1] -= 116.779
    x[..., 2] -= 123.68
    return x

В основном это изображения, и я увеличиваю, а затем вычитаю некоторые константы, соответствующие каналам R, G, B.

Но это показывает следующую ошибку

TypeError: 'Tensor' object does not support item assignment

Я думаю, что я не могу делать такие операции в тензоре.Пожалуйста, помогите, если есть способ обойти.Я новичок в Керасе.

1 Ответ

0 голосов
/ 23 июня 2018

Вы можете вычесть постоянное значение, но используя только тензорные операции:

def pre_pro_layer(x):
  x = x*255.0 # this is fine
  tosub = K.constant([103.939, 116.779, 123.68])
  # repeat or tile tosub based on the shape of x, depends on what you have
  # ...
  return x - tosub # element wise subtraction

Обратите внимание, что вычитание поддерживает широковещание , поэтому вам не нужно получать точно такую ​​же форму, как x но что-то, что будет передаваться в форме x при вычитании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...