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)
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)
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)
如果我理解正确的话,基本上你有一个可变数量的事件可以在一天内发生(每次发布视频、链接或状态0次或更多次),并且对于每一个事件,你都有相关的反应、评论和分享。在这个基础上预测你每天要采取的行动的数量。如果我错了,请纠正我。在
你能做的是训练一个关于可变长度数据序列的递归神经网络。输入数据的结构如下:
您可以将每个
^{pr2}$x_ij
看作是一天中的一个时间步j
。然后,一天的完整输入序列如下所示:输出向量是
Y = [y_1, y_2, ..., y_N]
,其中每个y_j
是第j
天的粉丝增长。基本上,训练过程包括使用tf.nn.dynamic_rnn
建立你的递归神经网络,并使用sequence_length
来指定每个输入序列的长度。它看起来像这样(这里将跳过许多实现细节):请注意,我在这里使用GRU cells(TF docs)而不是LSTM(TF docs)。这部分是偏好,但基本上GRU可以做LSTM所能做的一切,但效率更高。然后,您将运行训练过程,传递一批
[batch_size, num_steps_per_day, num_features]
大小的数据和一个sequence_length
张量,该张量给出了每天的步数。比如:在这里,
optimize
可以定义为:请查看this excellent example(不是我的内容)以开始了解一些实现细节。这个例子展示了序列标记,但是修改它来预测风扇的增长应该相当简单。在
在这种情况下,我不认为RNN应该每天都适用。在
你可以简单地把一天的所有信息加起来吗?在
例如:
你可以:
RNN的可能是把每一天都看成一个序列,看看事物是如何随着时间演变的。在
相关问题 更多 >
编程相关推荐