получение ValueError: выходы true_fn и false_fn должны иметь одинаковый тип: int32, float32 при использовании tf.histogram_fixed_width_bins - PullRequest
0 голосов
/ 26 мая 2019

Надеюсь, что кто-то может помочь мне с этим или указать мне подсказку / идеи, которые я могу исправить эту ошибку.

Я пытаюсь создать пользовательский слой в модели SeqtoSeq. Мне нужно вызвать гистограмму в части моего кода. однако, когда он касается этой строки кода, возникает ошибка:

ValueError: Outputs of true_fn and false_fn must have the same type: int32, float32

это мой код для слоя:

class entropy_measure(Layer):

    def __init__(self, beta,batch, **kwargs):
        self.beta = beta
        self.batch = batch
        self.uses_learning_phase = True
        self.supports_masking = True
        super(entropy_measure, self).__init__(**kwargs)

    def call(self, x):
        return K.in_train_phase(self.rev_entropy(x, self.beta,self.batch), x)

    def get_config(self):
        config = {'beta': self.beta}
        base_config = super(entropy_measure, self).get_config()
        return dict(list(base_config.items()) + list(config.items()))

    def rev_entropy(self, x, beta,batch):

        value_ranges = [0.0, 10.0]
        nbins = 5   
        converted_x = tf.cast(x,tf.float32)
        new_f_w_t = tf.histogram_fixed_width_bins(converted_x, value_ranges, nbins)

        return new_f_w_t

Я называю этот слой используя:

encoded = entropy_measure(beta=0.08,batch=BATCH_SIZE)(encoded)

Этот код написан с помощью keras tenorflow backend.

Есть идеи, что является причиной ошибки?

1 Ответ

1 голос
/ 26 мая 2019

K.in_train_phase требует, чтобы self.rev_entropy(x, self.beta,self.batch) и x имели одинаковый тип в этом случае.Но tf.histogram_fixed_width_bins возвращает int32, когда ваш x равен float32.Так что вам нужно изменить тип.

new_f_w_t = tf.cast(new_f_w_t, tf.float32)
...