2016-09-13 54 views
2

我是tensorflow新手,想要訓練用於分類的邏輯模型。tensorflow InvalidArgumentError:您必須爲dtype float提供佔位符張量的值

# Set model weights 
W = tf.Variable(tf.zeros([30, 16])) 
b = tf.Variable(tf.zeros([16])) 
train_X, train_Y, X, Y = input('train.csv') 

#construct model 
pred = model(X, W, b) 
# Minimize error using cross entropy 
cost = tf.reduce_mean(-tf.reduce_sum(Y*tf.log(pred), reduction_indices=1)) 
# Gradient Descent 
learning_rate = 0.1 
#optimizer = tf.train.AdamOptimizer(learning_rate).minimize(cost) 
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) 
# Initializing the variables 
init = tf.initialize_all_variables() 

get_ipython().magic(u'matplotlib inline') 
import collections 
import matplotlib.pyplot as plt 

training_epochs = 200 
batch_size = 300 
train_X, train_Y, X, Y = input('train.csv') 
acc = [] 
x = tf.placeholder(tf.float32, [None, 30]) 
y = tf.placeholder(tf.float32, [None, 16]) 
with tf.Session() as sess: 
    sess.run(init) 
    # Training cycle 
    for epoch in range(training_epochs): 
     avg_cost = 0.0 
     #print(type(y_train[0][0])) 
     print(type(train_X)) 
     print(type(train_X[0][0])) 
     print X 
     _, c = sess.run([optimizer, cost], feed_dict = {x: train_X, y: train_Y}) 

的feef_dict方法不起作用,與抱怨:InvalidArgumentError:必須喂爲佔位符張量 'Placeholder_54' 的值與D型浮子 [[節點:Placeholder_54 = Placeholderdtype = DT_FLOAT,形狀= [] ,_device = 「/作業:本地主機/複製:0 /任務:0/CPU:0」]] 引起運算u'Placeholder_54' :

予檢查的數據類型,用於訓練特徵數據X:

train_X type: <type 'numpy.ndarray'> 
    train_X[0][0]: <type 'numpy.float32'> 
    train_X size: (300, 30) 
    place_holder info : Tensor("Placeholder_56:0", shape=(?, 30), dtype=float32) 

我不知道它爲什麼抱怨。希望有人可以幫助,謝謝

+0

如果你在一個jupyter筆記本,在定義你的變量之前,嘗試運行'tf.reset_default_graph()'。我遇到了一些類似的問題,這是幫助解決問題的一個方面。 – Engineero

回答

0

顯示model()的代碼 - 我敢打賭它定義了兩個佔位符:X是placeholder_56,所以placeholder_54從哪裏來?

然後通過模型X,Y進feed_dict,刪除你的X,Y的全球佔位符,一切都將工作:)

2

從你的錯誤信息,丟失的佔位符的名稱— 'Placeholder_54' —是可疑的,因爲這表明在當前的口譯員會議中至少已創建了54個佔位符。

沒有足夠的細節可以肯定地說,但我有一些懷疑。你是否在同一個解釋器會話中多次運行相同的代碼(例如使用IPython/Jupyter或Python shell)?假設是這種情況,我懷疑你的張量依賴於在該代碼的先前執行中創建的佔位符。

事實上,你的代碼創建兩個tf.placeholder()張量xy建立模型的其餘部分,因此它很可能是兩種:

  1. 丟失的佔位符在此之前執行創建代碼或

  2. input()函數在內部調用tf.placeholder(),它是這些佔位符(可能是張量XY?),你應該餵食。

相關問題