#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. Я попробовал и без ошибок. Спасибо 🙂