как получить реальную форму batch_size, которого нет в keras - PullRequest
0 голосов
/ 23 мая 2019

При реализации пользовательского слоя в Keras мне нужно знать реальный размер batch_size.моя форма (?,20).

вопросы:

1. Как лучше всего изменить (?,20) на (batch_size,20).

Я изучил это , но он не может приспособиться к моей проблеме.

Я могу передать batch_size этому слою.В таком случае мне нужно изменить форму (?,20) на (batch_size,20), как я могу это сделать?

2. Это лучший способ или есть встроенная функциячто может получить реальное batch_size при построении и запуске модели?

Это мой слой:

from scipy.stats import entropy
from keras.engine import Layer
import keras.backend as K
import numpy as np

class measure(Layer):

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

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

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

    def rev_entropy(self, x, beta):

        entropy_p_t_w = np.apply_along_axis(entropy, 1, x)

        con = (beta / (1 + entropy_p_t_w)) ** 1.5

        new_f_w_t = x * (con.reshape(con.shape[0], 1))

        norm_const = 1e-30 + np.sum(new_f_w_t, axis=0)
        for t in range(norm_const.shape[0]):
            new_f_w_t[:, t] /= norm_const[t]

        return new_f_w_t

А вот где я называю этот слой:

encoded = measure(beta=0.08)(encoded)

Я также использую fit_generator, если он вообще может помочь:

autoencoder.fit_generator(train_gen, steps_per_epoch=num_train_steps, epochs=NUM_EPOCHS,
                                    validation_data=test_gen, validation_steps=num_test_steps, callbacks=[checkpoint])

Размерность x, переданного слою, равна (?, 20), и поэтому я не могу сделать свой расчет.

Спасибо:)

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