2017-11-07 6 views
0

最初にRBMを構築し、それをデータセットでテストしたところ、うまくいきました。それから、スタックRBMを使用してDBNを作成し、同じデータセットでそれを訓練しました。 2番目のRBMを訓練しようとすると、プログラムは次のエラーで停止しました。Tensorflowエラー「深い信念ネット」の2番目のRBMで「プレースホルダテンソルの値を入力する」

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) 

I出力batch_xの種類及び形状を:

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"]()]] 

エラーは、次の関数で発生します。全体のトレーニングプロセスでは形状は同じです。タイプはfloat64、最初のrbmをトレーニングするときはfloat32をトレーニングするときです。それはどこで停止し、エラーを投げ捨てます。私は(または要約なし)シングルRBMを訓練する場合、それはまた、よく働い

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

:私は要約を計算し、ちょうど次のコードを使用していなかったとき DBNがうまく働きました。 第2のRBMを訓練するために使用されるbatch_xは、第1のRBMにおける隠れ層の確率である。 誰かが私にこの問題を解決するのに役立つでしょうか? float64が問題なのかどうかはわかりません。

答えて

0

誰かが私が与える2つのコードで問題を解決するのは難しいと思います。笑。完全なコードは長すぎてここに投稿することはできません。

私は最初のRBMの出力を保存し、それを別のRBMを訓練するための入力として使用します。それはうまくいく。したがって、問題はフィードのbatch_xのタイプや形状ではなく、DBNの構造、または集計の方法であると私は考えています。

私の状況は、同様の問題を抱えている他の人に役立つことを願っています。

関連する問題