为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

www说 2021-05-25 21:23:00
我正在尝试编写一个鉴别器,用于评估图像的色块。因此,我从输入生成32x32不重叠的色块,然后将它们串联在新轴上。我使用时间分布层的原因是最后,鉴别器应该将整个图像评估为真还是假。因此,我试图分别对每个补丁执行前向传递,然后通过lambda层平均各个补丁的鉴别器输出:def my_average(x):    x = K.mean(x, axis=1)    return xdef 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)  
查看完整描述

2 回答

?
LEATH

TA贡献1936条经验 获得超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)


查看完整回答
反对 回复 2021-06-01
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

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


感谢您的提示,它为我指明了正确的方向。我想将向量变成对角矩阵


我想将矢量与正方形图像连接起来,并通过在diag矩阵中旋转矢量来实现。它适用于以下代码段:


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)


查看完整回答
反对 回复 2021-06-01
  • 2 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号