我正在尝试使用tf.layers.dense接口在tensorflow中构建神经网络。我想弄清楚如何让tensorflow将所有功能看作一组功能。
一个例子:
将一群人分类为优秀/糟糕的篮球队(0-差劲,1-好)。 每个人都有自己的特征(性别,年龄,身高,体重,打篮球年数)。要将整个团队分类为好或坏,神经网络必须看到5人的特征,输出应该是0或1。
现在在此示例中,如何让网络查看与不同人员关联的所有不同功能并输出单个分类数字?
我认为它与输入张量的形状有关,我尝试制作形状的张量[batch_size,number_of_players,number_of_features],如下所示:
[
[[gender, age, height, weight, years_playing_basketball],
[gender, age, height, weight, years_playing_basketball],
[gender, age, height, weight, years_playing_basketball], //team1
[gender, age, height, weight, years_playing_basketball],
[gender, age, height, weight, years_playing_basketball]],
[[gender, age, height, weight, years_playing_basketball],
[gender, age, height, weight, years_playing_basketball],
[gender, age, height, weight, years_playing_basketball], //team2
[gender, age, height, weight, years_playing_basketball],
[gender, age, height, weight, years_playing_basketball]]
]
当然,在将这个张量传递到几个tf.layers.dense图层之后,输出也将是一个3D张量,而我只需要一个数字作为输出。另一方面,如果我将所有团队功能放在一个阵列中,我相信网络无法知道这些实际上是5个不同人的特征。感谢您的帮助!
答案 0 :(得分:1)
当然,在将这个张量传递到几个tf.layers.dense图层之后,输出也将是一个3D张量,而我只需要一个数字作为输出。
你需要一个具有batch_size
个不同输出的1D张量,对吗?批处理中每个完整团队一个输出。
另一方面,如果我将所有团队功能放入一个阵列中,我相信网络无法知道这些功能实际上是由5个不同的人组成的。
这是最常见的解决方案,也可能是最好的解决方案。绝对是最简单的。只有当你确定每个团队总共有5个人时,这个解决方案才有效,我想这是一个安全的假设吗?
此解决方案通常被称为“展平”(在许多框架中,您可以使用名为(number_of_players, number_of_features)
的函数将(number_of_players * number_of_features)
张量转换为flatten
张量。是的,你是正确的,神经网络无法“知道”团队成员X的年龄特征在某种程度上与团队成员Y的年龄特征同样重要,或者“知道”年龄和团队成员X的性别特征在某种程度上比团队成员X的年龄特征和团队成员Y的性别特征更加密切相关......但这通常很好。如果事实证明这样做很重要,那么它仍然可以这样做。
另外一个提示:如果不同的人出现在同一个团队中的顺序无关紧要(例如,如果没有一些重要的,一致的基于位置的排序或类似的东西),我建议扩充您的数据还包括您已拥有的数据团队的随机播放版本。例如,如果您的数据包含一个团队[P1,P2,P3,P4,P5](其中每个P是一个与一个人相对应的特征序列),我还会通过添加团队来扩充数据集[P2,P1 ,P3,P4,P5]和团队[P3,P1,P2,P4,P5]等。您基本上可以添加所有可能的排列。