代码之家  ›  专栏  ›  技术社区  ›  Dima Lituiev Tom Roth

在Keras的一个回路中创建LAMDA层的加载模型

  •  0
  • Dima Lituiev Tom Roth  · 技术社区  · 7 年前

    我有一个功能模型,它在喀拉斯的一个回路中创建了几个门 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
    

    在我添加 兰姆达 . 正确的方法是什么?

    1 回复  |  直到 7 年前
        1
  •  1
  •   lmartens    7 年前

    这个 ii 变量不在lambda的范围内,因此必须通过 arguments .

    尝试:

    x = Lambda(lambda x,ii: x[:,:,:,ii:ii+1], arguments={'ii':ii})