keras'NoneType'对象没有属性'_inbound_nodes'

我正在尝试编写一个鉴别器,用于评估图像的色块。因此,我从输入生成32x32不重叠的色块,然后将它们串联在新轴上。


我使用时间分布层的原因是最后,鉴别器应该将整个图像评估为真还是假。因此,我试图分别对每个补丁执行前向传递,然后通过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)

  

www说
浏览 163回答 2
2回答

LEATH

您需要将裁剪操作放在一个函数中,然后在Lambda图层中使用该函数:def my_cropping(a):&nbsp; &nbsp; cropping_list = []&nbsp; &nbsp; n_patches = 256/32&nbsp; &nbsp; for x in range(256//32):&nbsp; &nbsp; &nbsp; &nbsp; for y in&nbsp; range(256//32):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cropping_list += [&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;K.expand_dims(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Cropping2D((( x * 32,&nbsp; 256 - (x+1) * 32), ( y * 32,&nbsp; 256 - (y+1) * 32)))(a)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; , axis=1)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]&nbsp; &nbsp; return cropping_list要使用它:cropping_list = Lambda(my_cropping)(a)

眼眸繁星

我遇到了同样的问题,它确实通过在 @today 提议的张量周围包裹一个 Lambda 层来解决。感谢您的提示,它为我指明了正确的方向。我想将向量变成对角矩阵我想将矢量与正方形图像连接起来,并通过在diag矩阵中旋转矢量来实现。它适用于以下代码段:def diagonalize(vector):&nbsp; diagonalized = tf.matrix_diag(vector) # make diagonal matrix from vector&nbsp; out_singlechan = tf.expand_dims(diagonalized, -1) # append 1 channel to get compatible to the multichannel image dim&nbsp; return out_singlechanlstm_out = Lambda(diagonalize, output_shape=(self.img_shape[0],self.img_shape[1],1))(lstm_out)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python