Это на самом деле следует из моего предыдущего вопроса Как применить свертку к последним трем измерениям 5D-тензора с использованием Conv2D в Keras?
Я хотел бы свернуть 2D слой с размером batch_size * N * n * n * channel_size
для каждого значения i в N. Ожидается, что результат будет batch_size * N * m * m * channel_size2
. Вес для каждого я должен быть разным. После ответа на предыдущий вопрос я сделал следующее:
set=[]
for i in range(N):
conv = Conv2D(2,(4,4), strides = (4,4), activation = 'relu') \
(Lambda(lambda x : x[:,i,:,:,:])(input_layer)) # split the tensor and apply the convolution
resh = Reshape((1,4,4,2))(conv) #expand the dimension for concatenation
set.append(resh)
conv_layer = Concatenate(axis = 1)(set)
Код, похоже, правильный. Но у него есть следующие недостатки:
- Сводный отчет по модели становится довольно сложным. Это будет список слоев для каждого я.
- Обучение сети станет очень медленным (для N = 320), даже если количество весов не очень велико. Я не уверен, что это из-за кода в цикле или из-за уровня сцепления.
Любые предложения будут очень признательны.