Keras 2.2.4 Как скопировать merge () из Keras 1.xx - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь преобразовать код Keras 1.xx в 2.2.x, с бэкэндом TensorFlow.

У меня есть ниже в Keras 1.xx, который принимает следующие входные данные:

  • org_image Изображение 256x256 на 3 цветовых каналах RGB shape=(256,256,3)
  • mask Маска 256x256 на 1 ч / б цветном канале shape=(256,256,1)

IВы хотите объединить изображение с маской, чтобы получить новое обрезанное изображение, в котором отсутствует область маски.Для этого я сначала возьму mask, используя 1 - mask, где 1 - тензор единиц.Затем я поэлементно умножаю org_image * (1 - mask), чтобы получить недавно обрезанное изображение.Код выглядит следующим образом в Keras 1.xx

from keras.layers import Input, merge

input_shape = (256,256,3)

org_img = Input(shape=input_shape)
mask = Input(shape=(input_shape[0], input_shape[1], 1))
input_img = merge([org_img, mask],
                   mode=lambda x: x[0] * (1 - x[1]),
                   output_shape=input_shape)

В Keras 2.2.x было введено критическое изменение, которое заменило функцию merge() на Add(), Subtract(), Multiply() ...и т.п.Предыдущий merge() имел убедительность mode=lambda x: x[0] * (1 - x[1]), равную mode=lambda [org_img, mask]: org_img * (1 - mask).

Как я могу повторить 1 - mask в Keras 2.2.x?Нужно ли импортировать в tf.backend.ones?

Или, может быть, мне нужно tf.enable_eager_execution()?

Я довольно новичок в этом, поэтому я знаю, что многое происходит у меня над головойЯ был бы очень признателен, если бы кто-то мог уточнить, где мое заблуждение, спасибо!

1 Ответ

0 голосов
/ 11 февраля 2019

Используйте Lambda слои для пользовательских функций или лямбда-выражений:

input_img = Lambda(lambda x: x[0] * (1 - x[1]), output_shape=input_shape)([org_img, mask])

Где output_shape необязательно, если вы используете тензор потока в качестве бэкэнда.

Другие полезные слои:

  • Concatenate(axis=...)(list_of_inputs)
  • Add()(list_of_inputs)
  • Multiply()(list_of_inputs)
...