之前在用Keras搭建网络时需要计算孪生神经网络的输出的绝对值,在编写代码时直接用了Keras的backend的函数:
diff_fea_1 = K.abs(Subtract()([feature_1_X, feature_1_Y])) # (B, H, W, 16)
但是却碰到了如下的报错:
AttributeError: 'NoneType' object has no attribute '_inbound_nodes'
这是因为在Keras的网络中一切都是要用层来表示的,因此需要利用Lambda自定义一个Abs_Layer层:
def Abs_layer(self, tensor):
return Lambda(K.abs)(tensor)
使用自定义的层计算绝对值后问题解决。
如果需要在Keras的网络中进行像Tensorflow中的一些函数操作,都需要通过自定义的Lambda层完成。比如需要对Tensor的维度进行扩展,不能直接使用backend中的expand_dims函数,而是要去定义一个Lambda层:
def Expand_Dim_Layer(self, tensor):
def expand_dim(tensor):
return K.expand_dims(tensor, axis=1)
return Lambda(expand_dim)(tensor)