我有一个多示例数据集,我想使用Keras的Functional API来预测示例类别和(派生的)行李标签。简单的示例预测很有效,从中获取行李标签也很有效。但由于行李标签在模型之外,结果似乎不是最优的。
我的想法如下:
1.对于袋子中的每个示例,启动模型的一个单独分支。
1.在通过其分支运行每个示例之后,连接结果。
1.连接后,根据概率预测袋子标签
到目前为止,我已经写了-这里,n_instances
是每个包的示例数,n_feat
是每个示例的特征数,n_classes
是一个示例/包可能属于的类别数。
from keras.layers import *
inputs = []
instance_layer = [None] * n_instances
for i in range(n_instances):
inp = Input(shape=n_feat)
inputs.append(inp)
instance_layer[i] = Dense(units=256, activation='ReLU')(inp)
instance_layer[i] = Dense(units=128, activation='ReLU')(instance_layer[i])
instance_layer[i] = Dense(units=64, activation='ReLU')(instance_layer[i])
instance_layer[i] = Dense(units=n_classes + 1, activation='sigmoid')(instance_layer[i]) # output to be converted to one-hot vector
output_tensor = Concatenate()(instance_layer)
"""
Code to go from concatenated tensor to a single bag prediction
"""
model = tf.keras.models.Model(inputs, output_tensor)
问题:
- 在我看来,好像每个示例都看到一个单独的模型,而我希望保持模型相同
- Concatenate()生成长度为n_instances * n_classes的Tensor,而我感兴趣的是形状为(n_instances,n_classes)的Tensor,我更喜欢使用CategoricalCrossEntropy作为损失函数。
- 关于如何从示例预测的Tensor到袋子预测,有什么建议吗?
1条答案
按热度按时间8iwquhpp1#
为了子孙后代:
然后将其 Package 在TimeDistributed层中,该层返回具有 * n_instances * 行和 * n_classes +1 * 列的Tensor,用于 * n_instances * 行和 * n_feat * 列的输入Tensor。* n_instances * 在此处是变量,因此输入形状中为None: