2017-12-24 13 views
0
import numpy as np 
import tensorflow as tf 

X_p = tf.placeholder(tf.float32,[None,3] ) 
y_p = tf.placeholder(tf.float32, [None,1]) 

print(X_p) 

x = [[1,2,3],[1,2,3]] 
y = [[1],[2]] 

weight = tf.Variable(tf.random_normal([3,1])) 



model = tf.nn.sigmoid(tf.matmul(X_p,weight)+1) 

error = tf.reduce_sum(y * tf.log(model)) 

optimizer = tf.train.GradientDescentOptimizer(0.01).minimize(error) 

init = tf.initialize_all_variables() 

with tf.Session() as sess: 
    sess.run(init) 

    for x in range(100): 
     sess.run(optimizer, {X_p: x, y_p:y}) 

X_p는 모양 없음 [3] x 모양 [2,3] y_p = [None, 1], y = [2,1]모양이 '(?, 3)'인 Tensor '자리 표시 자 : 0'에 대해 모양 값()을 입력 할 수 없습니다.

실제로 placeholder가 데이터를 가져 오기 위해 numpy 배열을 중지하는 이유를 알지 못합니다.

+0

이걸 재현 할 수 없습니다. 내 자신의'optimizer' 변수를 사용하여 세션을 실행할 때 잘 동작합니다. 어쩌면 다른 사람들이 실제로 문제를 재현 할 수있는보다 완벽한 예를 제공 할 수 있습니다. –

+0

@Mark_M 좋아, 해냈어. –

답변

2

x을 루프 변수로 사용하여 x 변수를 덮어 쓰는 것이 문제입니다. 따라서 x을 피드 dict에 전달하려고하면 텐서가 아닌 루프 변수를 전달하게됩니다. 루프 변수를 다음과 같은 다른 변수로 변경해보십시오.

for i in range(100): 
    sess.run(optimizer, {X_p: x, y_p:y}) 
+0

롤, 네, 내가 어떻게 알지 못했는지 믿을 수 없습니다. 감사:) –