После того, как слой перестановок, размеры становятся (Нет, Нет, 12, 16), я хочу суммировать последние два измерения с помощью LSTM (48 единиц) с input_shape (12, 16), чтобы общий размер стал (Нет, Нет, 48)
В настоящее время у меня есть обходной путь с пользовательским lstm & lstmcell, однако он очень медленный , так как я использовал другой LSTM в ячейке и т. Д.
То, что я хотел бы иметь, это:
(None, None, 12, 16)
(None, None, 48)
(None, None, 60)
Последние два сделаны в пользовательском lstm (в настоящее время), есть ли способ разделить их?
Каков правильный способ сделатьэтот?Можем ли мы создать разные (или несколько) lstm для клеток, которые имеют одинаковый вес, но разные состояния клеток?Не могли бы вы дать мне какое-нибудь направление?
входы (InputLayer) (нет, 36, нет, 1) 0
convlayer (Conv2D) (нет, 36, нет, 16) 160входы [0] [0]
mp (MaxPooling2D) (None, 12, None, 16) 0 convlayer [0] [0]
permute_1 (Permute)(Нет, Нет, 12, 16) 0 mp [0] [0]
reshape_1 (Reshape) (Нет, Нет, 192) 0 permute_1 [0] [0]
custom_lstm_extended_1 (CustomL (None, None, 60) 26160 reshape_1 [0] [0]
Custom LSTM вызывается так: CustomLSTMExtended (unit = 60, sumrizeUnits = 48, return_sequence = True, return_state)= Ложь, input_shape = (Нет, 192)) (внутренний)
LSTM class:
self.summarizeUnits = summarizeUnits
self.summarizeLSTM = CuDNNLSTM(summarizeUnits, input_shape=(None, 16), return_sequences=False, return_state=True)
cell = SummarizeLSTMCellExtended(self.summarizeLSTM, units,
activation=activation,
recurrent_activation=recurrent_activation,
use_bias=use_bias,
kernel_initializer=kernel_initializer,
recurrent_initializer=recurrent_initializer,
unit_forget_bias=unit_forget_bias,
bias_initializer=bias_initializer,
kernel_regularizer=kernel_regularizer,
recurrent_regularizer=recurrent_regularizer,
bias_regularizer=bias_regularizer,
kernel_constraint=kernel_constraint,
recurrent_constraint=recurrent_constraint,
bias_constraint=bias_constraint,
dropout=dropout,
recurrent_dropout=recurrent_dropout,
implementation=implementation)
RNN.__init__(self, cell,
return_sequences=return_sequences,
return_state=return_state,
go_backwards=go_backwards,
stateful=stateful,
unroll=unroll,
**kwargs)
Cell class:
def call(self, inputs, states, training=None):
#cell
reshaped = Reshape([12, 16])(inputs)
state_h = self.summarizeLayer(reshaped)
inputsx = state_h[0]
return super(SummarizeLSTMCellExtended, self).call(inputsx, states, training)