【问题标题】:AttributeError: 'Tensor' object has no attribute 'compile'AttributeError:“张量”对象没有“编译”属性
【发布时间】:2018-12-15 20:14:09
【问题描述】:

当我尝试运行它时:

p0 = Sequential()
p0.add(Embedding(vocabulary_size1, 50, weights=[embedding_matrix_passage], 
input_length=50, trainable=False))
p0.add(LSTM(64))
p0.add(Dense(256,name='FC1'))
p0.add(Activation('relu'))
p0.add(Dropout(0.5))
p0.add(Dense(50,name='out_layer'))
p0.add(Activation('sigmoid'))

q0 = Sequential()
q0.add(Embedding(vocabulary_size2,50,weights=embedding_matrix_query], 
input_length=50, trainable=False))
q0.add(LSTM(64))
q0.add(Dense(256,name='FC1'))
q0.add(Activation('relu'))
q0.add(Dropout(0.5))
q0.add(Dense(50,name='out_layer'))
q0.add(Activation('sigmoid'))

model = concatenate([p0.output, q0.output])
model = Dense(10)(model)
model = Activation('softmax')(model)
model.compile(loss='categorical_crossentropy',optimizer='rmsprop', metrics= 
['accuracy'])

它给了我这个错误:

AttributeError             
--->  model.compile(loss='categorical_crossentropy',optimizer='rmsprop', metrics=['accuracy'])

【问题讨论】:

标签: python machine-learning keras lstm


【解决方案1】:

如 cmets 中所述,您需要使用 Keras Functional API 来创建具有分支、多个输入/输出的模型。但是,不需要对所有代码都执行此操作,只需对最后一部分执行此操作即可:

concat = concatenate([p0.output, q0.output])
x = Dense(10)(concat)
out = Activation('softmax')(x)

model = Model([p0.input, q0.input], out)

model.compile(loss='categorical_crossentropy',optimizer='rmsprop', metrics=['accuracy'])

【讨论】:

  • 有趣...那么,即使p0q0 是顺序模型,我们可以以这种方式使用p0.inputq0.input?跨度>
  • @desertnaut 当然,它们是有效属性,因为已经定义了相应的模型,而且它们毕竟是(占位符)张量。
  • 当之无愧的赞成票 - 看来你让我自己和马蒂亚斯都措手不及 ;)
猜你喜欢
  • 1970-01-01
  • 2020-10-22
  • 2019-02-20
  • 2017-12-06
  • 2018-07-02
相关资源
最近更新 更多