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