LSTM 多任务学习函数 api keras

LSTM multi task learning functional api keras

我有 2 个火车值 X_data、B_data。我想要 2 个共享的 lstm 层来预测 X_data 和 B_data

的 2 个输出
l1 = layers.LSTM(40)(X_data)
flat_layer = Flatten()(l1)
l2 = layers.LSTM(20)(B_data)
flat_layer2 = Flatten()(l2)


output1 = Dense(1, activation='sigmoid')(flat_layer)
output2 = Dense(1, activation='sigmoid')(flat_layer2)

model = keras.Model(inputs=[X_data,B_data], outputs=[output1,output2])

我认错了 AttributeError: Tensor.op is meaningless when eager execution is enabled. 有什么建议吗?

错误是keras.Model(inputs)没有接受输入data而是输入layer(就像你做的一样使用 outputs 正确)。数据通过 model.fit() 传递。所以首先,你需要两个 Input 层:

X_data = np.random.uniform(0,1,(3,100,40))
B_data = np.random.uniform(0,1,(3,100,20))

y1 = np.random.uniform(0,1,(3,1))
y2 = np.random.uniform(0,1,(3,1))

i1 = Input((100,40)) # you need input layers
i2 = Input((100,20))

l1 = LSTM(40)(i1)
flat_layer = Flatten()(l1)
l2 = LSTM(20)(i2)
flat_layer2 = Flatten()(l2)


output1 = Dense(1, activation='sigmoid')(flat_layer)
output2 = Dense(1, activation='sigmoid')(flat_layer2)

model = tf.keras.Model(inputs=[i1,i2], outputs=[output1,output2])
model.compile('sgd', 'mse')
model.fit(x=[X_data,B_data], y=[y1,y2]) # this is where you pass input (data) and output (labels)

我的数据框就是这样,我转换为输入数据

trainxx=np.array(trainn3)
X_data = trainxx.reshape((trainxx.shape[0], 1, trainxx.shape[1]))

y 值是 numpy 数组

ytrainxx=np.array(ytrains)

而你的输入法我无法转换