Бэкэнд-функция Keras, которая дает единицу, только если значения находятся между a и b - PullRequest
0 голосов
/ 05 октября 2019

Я пытаюсь написать бэкэнд-функцию Keras, которая, если вход x находится между a и b, дает 1;в противном случае он дает ноль. Я не смог сделать это, используя функции, доступные в бэкэнде Keras. Если бы это был numpy, я бы написал:

def my_function(x):
    import numpy as np
    y=np.int64(np.logical_and(x>=a, x<=b))
    return y

Вопрос 1: Как я могу сделать это, используя бэкэнд Keras? Я знаю, что могу использовать что-то подобное, но это неэффективно

def my_function(x):
    from keras import backend as K
    y=x
    for i in y:
        if i<=b and i>=a:
            i=1
        else:
            i=0
 return y

Вопрос 2: Я установил TensorFlow 1.14.0 и Keras 2.2.6, так что я думаю, что бэкэндTensorflow. Если я не могу сделать это в бэкэнде Keras. Как я могу написать свою функцию в бэкэнде TensorFlow?

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Вот код, который я часто использую для изменения размера изображений с помощью opencv:

import tensorflow as tf
import cv2

def resize_function(image, target_height, target_width):
  img = cv2.resize(image, (target_height, target_width))
  return image.astype(np.float32)

image = tf.numpy_function(
    func=resize_function,
    inp=[tf.cast(image, tf.uint8),resize_height, resize_width],
    Tout=tf.float32)

tensenflow имеет tf.numpy_function для определения ваших пользовательских функций numpy. это преобразует ваши пользовательские функции в графики тензорного потока

, если от функции ожидается несколько выходов, измените как:

output_1, output_2, output_3 = tf.numpy_function(
    func=compute_input_output, 
    inp=[inp_1, inp_2, inp_3,inp4], 
    Tout=[tf.float32,tf.float32,tf.float32])

Tout должен содержать список ожидаемых данных-типы выходов.

0 голосов
/ 10 октября 2019

Для вопроса 2 по TensorFlow вы можете попробовать использовать TF.cond или TF.case для получения желаемого результата. Примерно так:

import tensorflow as tf
x = tf.constant(20)
y = tf.constant(22)
z = tf.constant(25)
result1 = tf.cond(tf.logical_and(x > y, x <z), lambda: tf.constant(1), lambda: tf.constant(0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...