如何设计神经网络以识别不同的特征?

3

我正在尝试使用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层,输出也将是一个三维张量,而我只需要一个单独的数字作为输出。另一方面,如果我将所有团队特征放入一个数组中,我相信网络不会知道这些实际上是5个不同人的特征。感谢您的帮助!


希望您的网络能够正确地学习输入并正确识别权重。您可以通过使用隐藏层大小为5来加快此过程,也许诱导网络将该层中的每个节点用作每个个体的总体评分。 - Evan Weissburg
1个回答

1
自然地,通过几个tf.layers.dense层传递这个张量后,输出也将是一个3D张量,而我只需要一个单独的数字作为输出。
你需要一个带有batch_size不同输出的1D张量,对吗?一批完整团队中每个人都有一个输出。
另一方面,如果我将所有团队特征放入一个数组中,我相信网络将无法知道这些实际上是5个不同人的特征。
这是最常见的解决方案,可能也是最好的。绝对是最简单的。如果您确定每个团队始终有5个人,那么这个解决方案只适用于您,我认为这是一个安全的假设?
这个解决方案通常被称为“扁平化”(在许多框架中,您可以使用名为“flatten”的函数将(number_of_players,number_of_features)张量转换为(number_of_players * number_of_features)张量)。是的,你说得对,神经网络无法“知道”团队成员X的年龄特征与团队成员Y的年龄特征有相似之处,或者“知道”团队成员X的年龄和性别特征与彼此更密切相关而不是团队成员X的年龄特征和团队成员Y的性别特征...但这通常没问题。如果发现学习这样的内容很重要,它仍然可以这样做。

另一个提示:如果同一团队中不同人员出现的顺序无关紧要(例如如果没有某种重要的、一致的基于职位排序或类似的东西),我建议通过向数据中添加已有团队的洗牌版本来增强您的数据。例如,如果您的数据包含一个团队[P1,P2,P3,P4,P5](其中每个P是对应于一个人的特征序列),我会通过添加一个团队[P2,P1,P3,P4,P5]和一个团队[P3,P1,P2,P4,P5]等来增加数据集。您可以基本上添加所有可能的排列。


是的,我实际上是指每批输出一个结果 :) 谢谢您详细的回答! - Dainius Salkauskas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接