关于Keras报错AttributeError: 'NoneType' object has no attribute '_inbound_nodes'的解决方法

之前在用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)

你可能感兴趣的:(Keras,报错,Python)