При реализации пользовательского слоя в 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), и поэтому я не могу сделать свой расчет.
Спасибо:)