针对神经网络tens的1个标签对多个实例的数据进行预处理

2024-04-23 13:30:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我在训练一个神经网络,根据帖子数量、帖子类别(视频、链接、状态等)和分享数量,比如每个帖子的评论,来预测Facebook页面的粉丝数量增长。因此,有一个标签对应多个实例,因为每天都在计算标签(fan_growth)(不是针对每个帖子): enter image description here

因此,如果我对分类数据使用一种热编码: enter image description here

在这里,日期、日期、链接、视频、状态、反应、评论和分享都是特色,而“粉丝成长”则是标签。如何对多个实例使用单个标签?由于再次使用“100”,所有前3个实例将不正确。在


Tags: 实例数量视频facebook链接状态评论神经网络
2条回答

如果我理解正确的话,基本上你有一个可变数量的事件可以在一天内发生(每次发布视频、链接或状态0次或更多次),并且对于每一个事件,你都有相关的反应、评论和分享。在这个基础上预测你每天要采取的行动的数量。如果我错了,请纠正我。在

你能做的是训练一个关于可变长度数据序列的递归神经网络。输入数据的结构如下:

x_ij = [category, reactions, comments, shares]_i for day j
i = 1, 2, ..., n_j (number of posts in day "j")
j = 1, 2, ..., N (number of days in dataset)

您可以将每个x_ij看作是一天中的一个时间步j。然后,一天的完整输入序列如下所示:

^{pr2}$

输出向量是Y = [y_1, y_2, ..., y_N],其中每个y_j是第j天的粉丝增长。基本上,训练过程包括使用tf.nn.dynamic_rnn建立你的递归神经网络,并使用sequence_length来指定每个输入序列的长度。它看起来像这样(这里将跳过许多实现细节):

cell = tf.contrib.rnn.GRUCell(num_hidden)
# Any additional things like tf.contrib.rnn.DropoutWrapper you want here
cell = tf.contrib.rnn.OutputProjectionWrapper(cell, 1)  # only one output number, right?
output, _ = tf.nn.dynamic_rnn(cell, data, sequence_length=sequence_length)

请注意,我在这里使用GRU cellsTF docs)而不是LSTMTF docs)。这部分是偏好,但基本上GRU可以做LSTM所能做的一切,但效率更高。然后,您将运行训练过程,传递一批[batch_size, num_steps_per_day, num_features]大小的数据和一个sequence_length张量,该张量给出了每天的步数。比如:

with tf.Session() as sess:
  for epoch in range(num_epochs):
    shuffle_training_set()
    for batch in range(num_batches):
      d = get_next_batch()
      t = get_next_target_batch()
      s = # length of each data sample in your batch
      sess.run(optimize, feed_dict={data: d, targets: t, sequence_length: s})
      # periodically validate and stop when you stop improving

在这里,optimize可以定义为:

cost = # your cost function here...
optimizer = tf.train.AdamOptimizer()  # I usually have luck with this optimizer
optimize = optimizer.minimize(cost)

请查看this excellent example(不是我的内容)以开始了解一些实现细节。这个例子展示了序列标记,但是修改它来预测风扇的增长应该相当简单。在

在这种情况下,我不认为RNN应该每天都适用。在

你可以简单地把一天的所有信息加起来吗?在

例如: enter image description here

你可以:

{1st row: {day:1,
        link: 2,
        video: 1,
        status: 0,
        reactions: 489+964+964,
        comments: 0,
        shares: 0},
 2nd row: {day: 3,
        link:1,
        video: 1,
        status: 0,
        reactions: 685,
        comments: 0,
        shares: 0}}

RNN的可能是把每一天都看成一个序列,看看事物是如何随着时间演变的。在

相关问题 更多 >