2017-11-30 4 views
0

2つの入力と3つのパラメータ(m_1、m_2、b)を持つ線形モデルを最適化しようとしました。最初は、feed_dictがそれらを受け入れるような方法でデータをインポートすることに問題がありました。私はそれをnumpy配列に入れて解決しました。Tensorflowコスト関数のプレースホルダエラー

cost_val = sess.run(cost) 

それを:

とすぐに、私は最後の行でコストを返そうとして、今オプティマイザ機能がスムーズに実行されます(と、それはパラメータを最適化されるように出力が大まかに見える)が、次のエラーが返されます。

tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder_2' with dtype float and shape [?,1] 
    [[Node: Placeholder_2 = Placeholder[dtype=DT_FLOAT, shape=[?,1], _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]] 

私がその行だけをコメントアウトすると、すべてがスムーズに実行されます。

コスト関数をより複雑なものから簡単なものに変更しようとしましたが、エラーはそのままです。私はこれがおそらくデータ入力形状(?)に関係していることを知っていますが、データがオプティマイザではどのように機能するのかコスト関数では機能しないのかを理解できません。

# reading in data 
filename = tf.train.string_input_producer(["file.csv"]) 
reader = tf.TextLineReader(skip_header_lines=1) 
key, value = reader.read(filename) 
rec_def = [[1], [1], [1]] 
input_1, input_2, col3 = tf.decode_csv(value, record_defaults=rec_def) 

# parameters 
learning_rate = 0.001 
training_steps = 300 

x = tf.placeholder(tf.float32, [None,1]) 
x2 = tf.placeholder(tf.float32, [None,1]) 

m = tf.Variable(tf.zeros([1,1])) 
m2 = tf.Variable(tf.zeros([1,1])) 
b = tf.Variable(tf.zeros([1])) 

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

y = tf.matmul(x,m) + tf.matmul(x2,m2) + b 

# cost function 
# cost = tf.reduce_mean(tf.log(1+tf.exp(-y_*y))) 
cost = tf.reduce_sum(tf.pow((y_-y),2)) 
# Gradient descent optimizer 
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) 

# initializing variables 
init = tf.global_variables_initializer() 


with tf.Session() as sess: 
    coord = tf.train.Coordinator() 
    threads = tf.train.start_queue_runners(coord=coord) 
    sess.run(init) 

    for i in range(training_steps): 

     xs = np.array([[sess.run(input_1)]]) 
     ys = np.array([[sess.run(input_2)]]) 
     label = np.array([[sess.run(col3)]]) 

     feed = {x:xs, x2:ys, y_:label} 
     sess.run(optimizer, feed_dict=feed) 
     cost_val = sess.run(cost) 

    coord.request_stop() 
    coord.join(threads) 

答えて

1

costテンソルはプレースホルダテンソルの関数であり、これには値が必要です。 sess.run(cost)への呼び出しがそれらのプレースホルダーに給餌されていないため、エラーが表示されています。 (それを別の方法を置く - あなたはコストを計算したいんxy_のどんな値?)

ですから、ライン変更したい:に

cost_val = sess.run(cost) 

を:

cost_val = sess.run(cost, feed_dict=feed) 

希望が役立ちます。

+0

* facepalm *シンプルでありながら、私はおそらくそれを理解していないでしょう。どうもありがとう! – Lyyoness

関連する問題