load_model со слоем Lamda, созданным в цикле в Keras - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть функциональная модель, которая создает несколько шлюзов в цикле в кератах со слоем Lambda:

predictions = []
for ii, kk in enumerate(label_cols):
    slicer = Lambda(lambda x: x[:,:,:,ii:ii+1],
                    output_shape=gates_shape[:-2]+(1,),
                    name='slice_'+kk)
    gate_  = slicer(gates)
    ...
    prediction = Dense(n_classes[kk], activation=final_activation, name=kk)(x)
    predictions.append(prediction)

Когда я пытаюсь загрузить модель, она жалуется:

/anaconda3/lib/python3.6/site-packages/keras/layers/core.py in call(self, inputs, mask)
    691         if has_arg(self.function, 'mask'):
    692             arguments['mask'] = mask
--> 693         return self.function(inputs, **arguments)
    694 
    695     def compute_mask(self, inputs, mask=None):

/anaconda3/lib/python3.6/site-packages/keras/layers/core.py in <lambda>(x)
    334 print('gates_shape', gates_shape)
    335 for ii, kk in enumerate(prms.label_cols):
--> 336     slicer = Lambda(lambda x: x[:,:,:,ii:ii+1], 
    337                     output_shape=gates_shape[:-2]+(1,),
    338                     name='slice_'+kk)

NameError: name 'ii' is not defined

Все работало до того, как я добавил Lambda.Как правильно это сделать?

1 Ответ

0 голосов
/ 23 ноября 2018

Переменная ii не входит в область действия лямбды, поэтому вы должны передать ее через arguments.

Попробуйте:

x = Lambda(lambda x,ii: x[:,:,:,ii:ii+1], arguments={'ii':ii})  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...