Почему слой сцепления в Керасе делает обучение очень медленным? - PullRequest
0 голосов
/ 08 января 2019

Это на самом деле следует из моего предыдущего вопроса Как применить свертку к последним трем измерениям 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)

Код, похоже, правильный. Но у него есть следующие недостатки:

  1. Сводный отчет по модели становится довольно сложным. Это будет список слоев для каждого я.
  2. Обучение сети станет очень медленным (для N = 320), даже если количество весов не очень велико. Я не уверен, что это из-за кода в цикле или из-за уровня сцепления.

Любые предложения будут очень признательны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...