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

AttributeError:“NoneType”对象没有特性“”_inbound_nodes“”
EN

Stack Overflow用户
提问于 2018-07-25 10:43:01
回答 1查看 606关注 0票数 2

我想实现这里定义的loss function。我使用fcn-VGG16获得一个map,并添加一个激活层。( x是fcn vgg16网的输出)。然后只需要一些操作来获得提取的特征。

代码语言:javascript
复制
co_map = Activation('sigmoid')(x)
#add mean values
img = Lambda(AddMean, name = 'addmean')(img_input)
#img map multiply
img_o = Lambda(HighLight,  name='highlightlayer1')([img, co_map])
img_b = Lambda(HighLight,  name='highlightlayer2')([img, 1-co_map])

extractor = ResNet50(weights = 'imagenet', include_top = False, pooling = 'avg')
extractor.trainable = False
extractor.summary()

o_feature = extractor(img_o)
b_feature = extractor(img_b)
loss = Lambda(co_attention_loss,name='name')([o_feature,b_feature])
model = Model(inputs=img_input, outputs= loss ,name='generator')

我在这一行得到的错误是model = Model(inputs=img_input, outputs= loss ,name='generator'),我认为是因为我计算损失的方式使得它不是keras模型的可接受输出。

代码语言:javascript
复制
def co_attention_loss(args):
loss = []
o_feature,b_feature = args
c = 2048
for i in range(5):
    for j in range(i,5):
        if i!=j:
            print("feature shape : "+str(o_feature.shape))
            d1 = K.sum(K.pow(o_feature[i] - o_feature[j],2))/c
            d2 = K.sum(K.pow(o_feature[i] - b_feature[i],2))
            d3 = K.sum(K.pow(o_feature[j] - b_feature[j],2))
            d4 = d2 + d3/(2*c)
            p = K.exp(-d1)/K.sum([K.exp(-d1),K.exp(-d4)])
            loss.append(-K.log(p)) 
return K.sum(loss)

我如何修改我的损失函数才能使其正常工作?

EN

回答 1

Stack Overflow用户

发布于 2018-07-25 11:34:06

代码语言:javascript
复制
loss = Lambda(co_attention_loss,name='name')([o_feature,b_feature])

表示您输入的args是一个列表,但您将args作为元组调用

代码语言:javascript
复制
o_feature,b_feature = args

您可以将损失代码更改为

代码语言:javascript
复制
def co_attention_loss(args):
    loss = []
    o_feature = args[0]
    b_feature = args[1]
    c = 2048
    for i in range(5):
        for j in range(i,5):
            if i!=j:
                print("feature shape : "+str(o_feature.shape))
                d1 = K.sum(K.pow(o_feature[i] - o_feature[j],2))/c
                d2 = K.sum(K.pow(o_feature[i] - b_feature[i],2))
                d3 = K.sum(K.pow(o_feature[j] - b_feature[j],2))
                d4 = d2 + d3/(2*c)
                p = K.exp(-d1)/K.sum([K.exp(-d1),K.exp(-d4)])
                loss.append(-K.log(p)) 
return K.sum(loss)

注意事项:不测试

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51510091

复制
相关文章

相似问题

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