【问题标题】:'Tensor' object has no attribute '_keras_history'“张量”对象没有属性“_keras_history”
【发布时间】:2019-03-08 01:42:03
【问题描述】:

我想在输入张量的列上独立提取和应用Conv2D 层,但在添加代码之后:

accelerometer_input = Input(shape=(1400, 3))

for i in range(3):
    out = Lambda(lambda x: x[:,:, i:i+1])(accelerometer_input) # Extracting the ith channel
    out = K.expand_dims(out, axis=1)
    out = Conv2D(64, (30, 1), data_format="channels_first")(out)  
    branch_outputs.append(out)
out_put = K.concatenate(branch_outputs)

它给了我标题中的错误。我认为这是由于Lambda 层或不可区分的extraction

但是没有它我该怎么办呢?

【问题讨论】:

    标签: python tensorflow machine-learning keras tensor


    【解决方案1】:

    这是因为您在 Keras 张量(即out)上直接应用后端函数(即K.expand_dims()),因此结果将是张量(而不是 Keras 张量)。实际上,Keras 张量是张量的增强版本,并且具有帮助 Keras 构建模型的附加属性(例如_keras_history)。现在,要解决此问题,您只需将后端函数放在 Lambda 层中即可获得 Keras 张量作为输出:

    out = Lambda(lambda x: K.expand_dims(x, axis=1))(out)
    

    同样的事情也适用于使用K.concatenate()。但是在这种情况下,Keras 中有一个特定的层:

    from keras.layers import concatenate, Concatenate
    
    # use functional interface
    out_put = concatenate(branch_outputs)
    
    # or use layer class
    out_put = Concatenate()(branch_outputs)
    

    【讨论】:

    • 它是:out_put = K.concatenate(branch_outputs),我删除了 K. 并工作了。您的回答帮助我理解了它,所以如果您愿意,可以将其添加到您的回答中,我会接受它
    • @FrancescoPegoraro 哦!我什至没有看到那条线。是的,出于同样的原因,它也是错误的。您需要改用Concatenate 层。我已经更新了我的答案。
    猜你喜欢
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 2019-08-11
    • 2019-07-03
    • 2020-10-22
    • 2019-02-20
    相关资源
    最近更新 更多