Я настроил слой, объединил batch_size и первое измерение, остальные измерения остались неизменными, но compute_output_shape, похоже, не оказал никакого влияния, в результате чего последующий слой не смог получить точную информацию о форме, что привело к ошибке.Как заставить compute_output_shape работать?
import keras
from keras import backend as K
class BatchMergeReshape(keras.layers.Layer):
def __init__(self, **kwargs):
super(BatchMergeReshape, self).__init__(**kwargs)
def build(self, input_shape):
super(BatchMergeReshape, self).build(input_shape)
def call(self, x):
input_shape = K.shape(x)
batch_size, seq_len = input_shape[0], input_shape[1]
r = K.reshape(x, (batch_size*seq_len,)+input_shape[2:])
print("call_shape:",r.shape)
return r
def compute_output_shape(self, input_shape):
if input_shape[0] is None:
r = (None,)+input_shape[2:]
print("compute_output_shape:",r)
return r
else:
r = (input_shape[0]*input_shape[1],)+input_shape[2:]
return r
a = keras.layers.Input(shape=(3,4,5))
b = BatchMergeReshape()(a)
print(b.shape)
# call_shape: (?, ?)
# compute_output_shape: (None, 4, 5)
# (?, ?)
Мне нужно получить (Нет, 4,5), но получить (Нет, Нет), почему compute_output_shape не работает.Моя версия keras - 2.2.4