【问题标题】:tensorflow dynamically create placeholderstensorflow 动态创建占位符
【发布时间】:2016-10-03 23:03:17
【问题描述】:

在每次迭代中,我想动态地提供我想要的占位符数量,然后将数据提供给它们。这可能吗?如何?我试图在 epoch 循环中创建整个模型(占位符、损失、优化器),但这给出了未初始化变量错误。

目前我在一个列表中有 n=5 个占位符,每个 shape=(1, k) 并且我向它们提供数据。但 n 需要在 epoch 循环内的数据馈送期间动态定义。

【问题讨论】:

  • 不能有1个形状为[None, k]的占位符,可以随意调整第一个维度吗?
  • @OlivierMoindrot 这两个是一回事吗?考虑用例:这 5 个占位符是具有 dim=k 和 5 个时间步长的词向量,我正在训练一个 RNN。如果我考虑你的,BPTT 会起作用吗?
  • 如果你的输入是一个未知长度的词向量序列(大小k)(称之为N),你的占位符应该是[None, k]。如果它是 RNN,那么您的模型应该能够处理可变大小的输入。
  • @OlivierMoindrot 是的,我知道。但是 BPTT 在这种情况下会起作用吗?以及如何遍历占位符内的 N 个向量?
  • 我不熟悉 tensorflow 模型,但也许 this tutorialthis post 可能会有所帮助!

标签: tensorflow


【解决方案1】:

也许你误解了张量是什么。

如果您将张量想象为多维列表,您可以理解动态数量的占位符的形状为[1, k] 是没有意义的。

相反,您必须使用单个张量。

因此,将您的输入占位符定义为形状为 [None, 1, k] 的张量。

placeholder_ = tf.placeholder(tf.float32, [None, 1, k])

使用此语句,您可以定义一个具有 tf.float32 类型的占位符和未定义数量的元素(None 部分),其形状为 [1,k]

在每次迭代中,您都必须为占位符提供正确的值。比如跑步

result = sess.run(defined_op, feed_dict={
    placeholder_: numpy_ndarray_with_N_elements_with_shape_1_k
})

这样,您无需在计算图中定义新变量(这根本行不通),而是为其提供所需的值。

【讨论】:

  • 当我有 n [1,k] 个占位符时,我可以在图中遍历它们。现在我可以用单个 [None, 1, k] 占位符做什么?
  • 一切?您可以在图形内部进行迭代,提取占位符的切片。提取的每个切片在逻辑上与没有第一个维度的单个占位符相同。
  • 酷。但是在提取幻灯片时,我怎么知道要提取多少张幻灯片,因为第一个维度是无。
  • 您为占位符提供定义数量的形状为 [1,k] 的元素。因此,您知道该占位符中有多少元素。上瘾,您可以提取张量的真实形状,从而知道有多少元素动态地存在。只需调用_placeholder.get_shape()[0].value 即可获取占位符第一个维度值(当占位符已送入时)
  • 那么我在创建图形时需要该形状,因为首先我创建了一个形状为 [None,1, k] 的占位符,然后将从每个形状 [1, ķ]。可能吗?
猜你喜欢
  • 2018-04-23
  • 2022-01-24
  • 1970-01-01
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多