2017-10-05 7 views
1

Tensorflowを使って書いた単変量線形回帰モデルがあります。Tensorflow線形回帰モデルのSquaredを計算しようとするとエラーが発生する

私は、このモデルの決定係数(R 2乗)を計算しようとしています。

私はをtf.Variableと宣言しています(これをプレースホルダとして宣言し、普通のpython変数として宣言してみました)。

R_squared = tf.variable(0,name = 'R_squared') 
prediction = tf.add(tf.multiply(X,W),b) 
training_cost = tf.reduce_sum(tf.pow(prediction-Y,2))/(2 * n_samples) 
unexplained_cost = tf.reduce_sum(tf.square(tf.subtract(Y,prediction))) 
R_squared = tf.subtract(1.0, tf.divide(unexplained_cost, training_cost)) 

後でコードでオプティマイザを実行した後、私は R_squaredをプリントアウトしようとします。

Traceback (most recent call last): 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 1327, in _do_call 
    return fn(*args) 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 1306, in _run_fn 
    status, run_metadata) 
    File "/usr/lib/python3.4/contextlib.py", line 66, in __exit__ 
    next(self.gen) 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/framework/errors_impl.py", line 466, in raise_exception_on_not_ok_status 
    pywrap_tensorflow.TF_GetCode(status)) 
tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder' with dtype float 
    [[Node: Placeholder = Placeholder[dtype=DT_FLOAT, shape=<unknown>, _device="/job:localhost/replica:0/task:0/cpu:0"]()]] 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "./linear_regression.py", line 126, in <module> 
    print ('R squared = ', tf_session.run(R_squared)) 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 895, in run 
    run_metadata_ptr) 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 1124, in _run 
    feed_dict_tensor, options, run_metadata) 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 1321, in _do_run 
    options, run_metadata) 
    File "/usr/local/lib/python3.4/dist-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 'Placeholder' with dtype float 
    [[Node: Placeholder = Placeholder[dtype=DT_FLOAT, shape=<unknown>, _device="/job:localhost/replica:0/task:0/cpu:0"]()]] 

Caused by op 'Placeholder', defined at: 
    File "./linear_regression.py", line 78, in <module> 
    X = tf.placeholder('float') 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/array_ops.py", line 1548, in placeholder 
    return gen_array_ops._placeholder(dtype=dtype, shape=shape, name=name) 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/gen_array_ops.py", line 2094, in _placeholder 
    name=name) 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/framework/op_def_library.py", line 767, in apply_op 
    op_def=op_def) 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/framework/ops.py", line 2630, in create_op 
    original_op=self._default_original_op, op_def=op_def) 
    File "/usr/local/lib/python3.4/dist-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 'Placeholder' with dtype float 
    [[Node: Placeholder = Placeholder[dtype=DT_FLOAT, shape=<unknown>, _device="/job:localhost/replica:0/task:0/cpu:0"]()]] 

私もR_squared.eval()をプリントアウトしようとしましたが、私はまだ同じエラーを取得:

print ('R squared = ', tf_session.run(R_squared)) 

しかし、私はいつも同じエラーを取得しています。

また、runメソッドに渡すのではなく、テンソルオブジェクトのevalメソッドを呼び出すことの違いは何ですか?

助けてください。

答えて

1

Xをコードのどこかにプレースホルダとして定義しました。プレースホルダは、デフォルト値を割り当てないか、feed_dictを使用して値を入力しない限り、通常は空です。

例えば、使用してみてください:

tf_session.run(R_squared, feed_dict={X: 1}) 

あなたは明らかにあなたが望む任意の他の値についてを置き換えることができます - あなたはまた、代わりに任意のPythonの変数を使用することができます。

評価と実行の違いについては、this questionを参照してください。

関連する問題