代码之家  ›  专栏  ›  技术社区  ›  Karim Mohamed Hasebou

keras'NoneType'对象没有属性'u inbound'u nodes'

  •  0
  • Karim Mohamed Hasebou  · 技术社区  · 6 年前

    我正试图写一个鉴别器,评估一个图像的补丁。

    我使用时间分布层的原因是,在最后,鉴别器应该判断整个图像是真是假。因此,我尝试分别对每个补丁执行前向传递,然后通过lambda层平均每个补丁的鉴别器输出:

    def my_average(x):
        x = K.mean(x, axis=1)
        return x
    
    def my_average_shape(input_shape):
        shape = list(input_shape)
        del shape[1]
        return tuple(shape)
    
    
    def defineD(input_shape):
        a = Input(shape=(256, 256, 1))
    
        cropping_list = []
    
        n_patches = 256/32
        for x in range(256/32):
            for y in  range(256/32):
    
                cropping_list += [
                 K.expand_dims(
                    Cropping2D((( x * 32,  256 - (x+1) * 32), ( y * 32,  256 - (y+1) * 32)))(a)
                    , axis=1)
                ]
    
        x = Concatenate(1)(cropping_list)
    
        x = TimeDistributed(Conv2D(4 * 8, 3, padding='same'))(x) # 
        x = TimeDistributed(MaxPooling2D())(x)
        x = TimeDistributed(LeakyReLU())(x)                  # 16
    
        x = TimeDistributed(Conv2D(4 * 16, 3, padding='same'))(x)
        x = TimeDistributed(MaxPooling2D())(x)
        x = TimeDistributed(LeakyReLU())(x)                  # 8
    
        x = TimeDistributed(Conv2D(4 * 32, 3, padding='same'))(x)
        x = TimeDistributed(MaxPooling2D())(x)
        x = TimeDistributed(LeakyReLU())(x)                  # 4
    
    
        x = TimeDistributed(Flatten())(x)
        x = TimeDistributed(Dense(2, activation='sigmoid'))(x)
        x = Lambda(my_average, my_average_shape)(x)
    
        return keras.models.Model(inputs=a, outputs=x)
    

    出于某种原因,我得到以下错误:

    File "testing.py", line 41, in <module>
        defineD((256,256,1) )
      File "testing.py", line 38, in defineD
        return keras.models.Model(inputs=a, outputs=x)
      File "/usr/local/lib/python2.7/dist-packages/keras/legacy/interfaces.py", line 91, in wrapper
        return func(*args, **kwargs)
      File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 93, in __init__
        self._init_graph_network(*args, **kwargs)
      File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 237, in _init_graph_network
        self.inputs, self.outputs)
      File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1353, in _map_graph_network
        tensor_index=tensor_index)
      File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
        node_index, tensor_index)
      File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
        node_index, tensor_index)
      File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
        node_index, tensor_index)
      File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
        node_index, tensor_index)
      File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
        node_index, tensor_index)
      File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
        node_index, tensor_index)
      File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
        node_index, tensor_index)
      File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
        node_index, tensor_index)
      File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
        node_index, tensor_index)
      File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
        node_index, tensor_index)
      File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
        node_index, tensor_index)
      File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
        node_index, tensor_index)
      File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1312, in build_map
        node = layer._inbound_nodes[node_index]
    AttributeError: 'NoneType' object has no attribute '_inbound_nodes'
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   today    6 年前

    您需要将裁剪操作放在函数中,然后在 Lambda

    def my_cropping(a):
        cropping_list = []
        n_patches = 256/32
        for x in range(256//32):
            for y in  range(256//32):
    
                cropping_list += [
                 K.expand_dims(
                    Cropping2D((( x * 32,  256 - (x+1) * 32), ( y * 32,  256 - (y+1) * 32)))(a)
                    , axis=1)
                ]
        return cropping_list
    

    使用它:

    cropping_list = Lambda(my_cropping)(a)
    
        2
  •  0
  •   Julian    6 年前

    我遇到了同样的问题,它确实通过在张量周围包裹一层Lambda层来解决,正如@today建议的那样。

    我想把一个向量和一个正方形的图像连接起来,然后把这个向量转换成一个对角矩阵。它使用了以下代码片段:

    def diagonalize(vector):
      diagonalized = tf.matrix_diag(vector) # make diagonal matrix from vector
      out_singlechan = tf.expand_dims(diagonalized, -1) # append 1 channel to get compatible to the multichannel image dim
      return out_singlechan
    
    lstm_out = Lambda(diagonalize, output_shape=(self.img_shape[0],self.img_shape[1],1))(lstm_out)