我有一个模型,我需要每N次迭代为权重(可训练变量)分配新的外部值。
我可以想到一些解决方案:
保存并恢复
不好,因为我需要序列化,通过文件系统调用等(即使我使用像tmpfs这样的东西)
使用占位符和分配操作
我会创建一个占位符并为每个可训练变量分配op。每次我想为权重分配一些内容时,我都会运行assign ops。
但是,我知道这意味着我将被迫在每个feed_dict中考虑这些占位符并每次传递虚拟值 我在图中运行任何操作。
此外,我将使用比必要更多的内存..
将feed_dict用于可训练变量并触发将每个变量分配给自身的操作?
这有用吗?有什么缺点吗?
在编写某些内容之前,我认为提问是个好主意? 有效(内存/时间)为变量分配新外部值的推荐方法是什么?
答案 0 :(得分:3)
你的第三个选项听起来是最好的选择。
您可以将值提供给tensors that aren’t placeholders。
TensorFlow的Feed机制允许您将数据注入到任何Tensor中 计算图。因此,python计算可以直接提供数据 进入图表。
任何可喂食的张量都可以喂食。要检查张量是否可以进食,请使用:tf.Graph.is_feedable(tensor)
。
答案 1 :(得分:1)
您可以使用占位符分配操作。
每次在我的图表中运行任何操作时,我都会被迫在每个feed_dict中考虑这些占位符并传递虚拟值
此外,我将使用比必要更多的内存..
没有。运行assign操作时,只需要向占位符提供值。不要将分配操作作为训练图的一部分,只有在想要分配新值时才运行它们。
如果分配结果是瓶颈(对于小N,它可能会减慢您的程序),您可以考虑other methods将数据导入TensorFlow。
答案 2 :(得分:1)
在最新版本的Tensorflow Variable
类中有load
方法。它完全符合您的要求。