2016-09-13 95 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?),你应该喂食。

相关问题