如何获得batch_size的真实形状,这在keras中是没有的

时间:2019-05-23 20:48:18

标签: keras reshape keras-layer autoencoder tf.keras

在Keras中实现自定义层时,我需要知道batch_size的实际大小。我的形状是(?,20)

问题:

1。。将(?,20)更改为(batch_size,20)的最佳方法是什么。

我调查了this,但它不能适应我的问题。

我可以将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),这就是为什么我无法进行计算的原因。

谢谢:)

0 个答案:

没有答案