【问题标题】:Tensorflow error "feed a value for placeholder tensor" occurs on the second RBM in a deep belief netTensorflow 错误“为占位符张量提供值”发生在深度信念网络中的第二个 RBM 上
【发布时间】:2018-04-20 06:47:06
【问题描述】:

我首先构建了一个 RBM,并在一组数据上对其进行了测试,它运行良好。然后我用堆叠的 RBM 编写了一个 DBN,并用相同的数据集对其进行了训练。程序在尝试训练第二个 RBM 时停止并出现以下错误。

Traceback (most recent call last):
  File "D:\Python\DL_DG\analysis\debug\debug_01_ppi.py", line 44, in <module>
    ppi_dbn.fit(ppi_in)
  File "D:/Python/DL_DG/Model\dbn_test.py", line 95, in fit
    rbm.fit(input_data)
  File "D:/Python/DL_DG/Model\rbm_test.py", line 295, in fit
    self.partial_fit(batch_x, b, e)
  File "D:/Python/DL_DG/Model\rbm_test.py", line 188, in partial_fit
    feed_dict={self.x: batch_x})
  File "C:\Users\pil562\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\client\session.py", line 895, in run
    run_metadata_ptr)
  File "C:\Users\pil562\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\client\session.py", line 1124, in _run
    feed_dict_tensor, options, run_metadata)
  File "C:\Users\pil562\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\client\session.py", line 1321, in _do_run
    options, run_metadata)
  File "C:\Users\pil562\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\client\session.py", line 1340, in _do_call
    raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'input/x' with dtype float and shape [?,128]
     [[Node: input/x = Placeholder[dtype=DT_FLOAT, shape=[?,128], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

Caused by op 'input/x', defined at:
  File "<string>", line 1, in <module>
  File "C:\Users\pil562\AppData\Local\Programs\Python\Python36\lib\idlelib\run.py", line 142, in main
    ret = method(*args, **kwargs)
  File "C:\Users\pil562\AppData\Local\Programs\Python\Python36\lib\idlelib\run.py", line 460, in runcode
    exec(code, self.locals)
  File "D:\Python\DL_DG\analysis\debug\debug_01_ppi.py", line 42, in <module>
    learning_rate_rbm=[0.001,0.01],rbm_gauss_visible=True)
  File "D:/Python/DL_DG/Model\dbn_test.py", line 52, in __init__
    sample_gauss_visible=self.sample_gauss_visible, sigma=self.sigma))
  File "D:/Python/DL_DG/Model\rbm_test.py", line 358, in __init__
    xavier_const,err_function,use_tqdm,tqdm)
  File "D:/Python/DL_DG/Model\rbm_test.py", line 46, in __init__
    self.x = tf.placeholder(tf.float32, [None, self.n_visible],name='x')
  File "C:\Users\pil562\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\array_ops.py", line 1548, in placeholder
    return gen_array_ops._placeholder(dtype=dtype, shape=shape, name=name)
  File "C:\Users\pil562\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\gen_array_ops.py", line 2094, in _placeholder
    name=name)
  File "C:\Users\pil562\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 767, in apply_op
    op_def=op_def)
  File "C:\Users\pil562\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\ops.py", line 2630, in create_op
    original_op=self._default_original_op, op_def=op_def)
  File "C:\Users\pil562\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\ops.py", line 1204, in __init__
    self._traceback = self._graph._extract_stack()  # pylint: disable=protected-access

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'input/x' with dtype float and shape [?,128]
     [[Node: input/x = Placeholder[dtype=DT_FLOAT, shape=[?,128], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

错误发生在以下函数:

def partial_fit(self, batch_x, k, j):
        print(batch_x.dtype, batch_x.shape)
        summary, _ = self.sess.run([self.merged, self.update_weights + self.update_deltas],
                                feed_dict={self.x: batch_x})
        self.train_writer.add_summary(summary, k*self.batch_size+j)

我输出batch_x的类型和形状。整个训练过程中的形状都是一样的。训练第一个 rbm 时类型为 float64,训练第二个 rbm 时类型为 float32。这就是它停止并抛出错误的地方。 当我不计算摘要而只使用以下代码时,DBN 运行良好:

self.sess.run(self.update_weights + self.update_deltas,feed_dict={self.x: batch_x})

如果我只训练一个 RBM(有或没有摘要),它也很有效。 用于训练第二个 RBM 的 batch_x 是第一个 RBM 中隐藏层的概率。 有人可以帮我解决这个问题吗?我不确定 float64 是否是问题所在。

【问题讨论】:

    标签: tensorflow deep-learning tensorboard


    【解决方案1】:

    我想任何人都很难仅使用我提供的两段代码来解决问题。哈哈。完整代码太长,无法在此处发布。

    我保存第一个 RBM 的输出并将其用作训练另一个 RBM 的输入。它运作良好。因此,我认为问题不在于输入的 batch_x 的类型或形状,而在于 DBN 的结构,或者我收集摘要的方式。

    希望我的情况可以帮助其他有类似问题的人。

    【讨论】:

      猜你喜欢
      • 2011-03-04
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 2017-11-10
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多