Перенос модели из Torch в Keras

#deep-learning #keras #torch

#глубокое обучение #keras #torch

Вопрос:

Я пытаюсь перенести приведенное ниже определение модели из Torch в Keras.

  • Сценарий Torch lua
 local model = nn.Sequential();
-- input 3x12x12
model:add(nn.SpatialConvolution(3, 16, 3, 3))
-- outputs 16x10x10
model:add(nn.SpatialMaxPooling(3, 3, 2, 2))
model:add(nn.ReLU())
-- outputs 16x4x4
model:add(nn.SpatialConvolution(16, 16, 4, 4))
model:add(nn.ReLU())
-- outputs 16x1x1
model:add(nn.SpatialConvolution(16, 2, 1, 1))
-- outputs 2x1x1
model:add(nn.SpatialSoftMax())
  

https://github.com/IggyShone/fast_face_detector/blob/master/12net.lua

  • Портированный Keras — скрипт на Python
 model = Sequential()
model.add(Convolution2D(16, 4, 4, input_shape=(3, 12, 12), border_mode='valid', subsample=(1, 1)))
model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2)))
model.add(Activation('relu'))
model.add(Convolution2D(16, 4, 4, input_shape=(16, 4, 4), border_mode='valid', subsample=(1, 1), activation='relu'))
model.add(Convolution2D(2, 1, 1, input_shape=(16, 1, 1), border_mode='valid', subsample=(1, 1), activation='softmax'))
  

Но когда я запустил перенесенный скрипт, произошла следующая ошибка.

 Exception: Cannot apply softmax to a tensor that is not 2D or 3D. Here, ndim=4
  

Похоже, keras не позволяет применять активацию softmax для слоя свертки. Как я должен сделать, чтобы передать эту ошибку? Спасибо.

Комментарии:

1. Работает ли это для вашего варианта использования, если вы сгладите выходные данные вашего последнего слоя conv в один длинный вектор (используя слой Flatten() ), а затем примените softmax?

2. Я попробовал и без ошибок. Спасибо 🙂