python - 使用 TensorFlow 在没有 dict_feed 的移动时间序列数据窗口上优化图形
问题描述
我试图在 Tensorflow 中设置一个优化图,避免使用feed_dict
a tf.FIFOQueue
- 至少这似乎是时间序列数据的正确方向。
我将首先使用 描述我的图表的外观(以最少的术语)feed_dict
,然后我试图将它放在哪里。
假设我的时间序列存储在一个 numpy 数组中time_series
:
wnd = 10 # window size
data_wnd = np.array([time_series[n:n+wnd] for n in range(1,time_series.size()+1)])
现在data_wnd[k]
可以表示k
时间序列中的窗口。
假设step
是我的 Tensorflow 优化器,这将经典地工作如下:
for k in range(data_wnd.shape[0]):
for n in range(epochs):
sess.run(step, feed_dict={data_:data_wnd[k]})
# Do stuff after optimization and proceed to next window frame
# the optimized variable values for this frame are the initial values for the next frame
如果我没有窗口,那么data_
我可以简单地使用 atf.constant
并摆脱feed_dict
. 所以这是不可能的。
所以进来tf.FIFOQueue
:
q = tf.FIFOQueue(capacity=5, shapes=(wnd))
nq_op = q.enqueue(data_wnd[0])
qr = tf.train.QueueRunner(q, [nq_op]*1) # nq_op is not right
tf.train.add_queue_runner(qr)
data_ = q.dequeue() # instead of a placeholder
太好了,所以现在我有一个队列,但这显然是错误的。qr
需要根据k
. 有没有办法获得enqueue
或QueueRunner
选择正确的框架?
更好的是,是否有一些专门的 Tensorflow API 可以以这种方式处理时间序列数据?
解决方案的一个重要约束要求我将所有内容保持在同一个会话中,并且不会重新初始化变量,因为一帧的优化解决方案接近前一帧的优化解决方案。
不完整的提案
我想有几个nq_op
定义如下:
nq_op = []
for k in range(data_wnd.shape[0]):
nq_op = np.append(nq_op, q.enqueue(data_wnd[0]))
但这仍然需要QueueRunner
正确选择enqueue
。
另一个提议
显然 Tensorflow 现在有一个tf.data
API,但我不知道从哪里开始 - 或者就此而言,结束 - 使用这个 API。
解决方案
我发现 FIFOQueue 不是正确的方向。
相反,此页面在Preloaded Data下提供了正确的方法。
我们可以使用占位符和变量的组合,而不是简单地使用占位符data_
:
data_init = tf.placeholder(tf.float32, data_wnd.shape[0])
data_ = tf.Variable(data_init, trainable=False, collection=0)
适当定义的位置VarType
和位置。TensorShape
然后在我们的循环中:
for k in range(data_wnd.shape[0]):
sess.run(data_.initializer, feed_dict={data_:data_wnd[k]})
for n in range(epochs):
sess.run(step)
请注意,我们不再需要为每个 提供数据n
,而只是在我们将窗口向前移动时。
推荐阅读
- javascript - 如何通过nextjs中不同元素的onClick修改元素?
- javascript - 安排 node-cron 作业每天运行一次而不指定时间(每 24 小时一次)
- python - Pandas subsetting two dataframes based on rows that meet condition in one
- node.js - 从 webjob 调用 webapp 中的 API
- json - 自己的 toJSON 将对象对象放在本地存储中
- python - 在 MacOS Mojave 上从 PyInstaller 运行应用程序后如何修复 msgcat::mc 错误?
- python - boto3 dynamodb batch_writer 如何执行回滚
- docker - 一台主机上有两个带有 Traefik 的 docker 容器
- php - 如何在特定数据的 foreach 中进行下拉
- javascript - 具有动态绑定的 iFrame 不起作用