首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >keras“NoneType”对象没有属性“_inbound_nodes”

keras“NoneType”对象没有属性“_inbound_nodes”
EN

Stack Overflow用户
提问于 2018-08-22 17:07:27
回答 2查看 3.4K关注 0票数 1

我正在尝试编写一个鉴别器来评估图像的补丁。因此,我从输入生成32x32非重叠的面片,然后将它们连接到一个新的轴上。

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

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
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'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-22 17:28:05

您需要将裁剪操作放在一个函数中,然后在Lambda层中使用该函数:

代码语言:javascript
复制
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

要使用它:

代码语言:javascript
复制
cropping_list = Lambda(my_cropping)(a)
票数 3
EN

Stack Overflow用户

发布于 2019-01-17 17:49:33

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

谢谢你的提示,它给我指明了正确的方向。我想把一个向量变成一个对角矩阵

我想要将一个向量与一个正方形图像连接起来,并将该向量转换为一个诊断矩阵。它与以下代码片段一起工作:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51963377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档