2016-05-31 83 views
1

我对tensorflow很新颖。我用tensorflow做了线性回归。 当我跑下面的代码时,我得到了类似于这样的错误:。 'Op的类型float64与参数的类型float32不匹配

TypeError:'Mul'的输入'y'Op的类型float64与参数'x'的类型float32不匹配。

用了几个小时,但找不到原因。 它出错了?非常感谢帮助。非常感谢。

import tensorflow as tf 
import numpy as np 

training_epoch = 1000 
display_epoch=50 
learning_rate = 0.01 
train_X = np.asarray([3.3,4.4,5.5,6.71,6.93,4.168,9.779,6.182,7.59,2.167, 
         7.042,10.791,5.313,7.997,5.654,9.27,3.1]) 
train_Y = np.asarray([1.7,2.76,2.09,3.19,1.694,1.573,3.366,2.596,2.53,1.221, 
         2.827,3.465,1.65,2.904,2.42,2.94,1.3]) 
n_samples = train_X.shape[0] 
X = tf.placeholder('float') 
Y= tf.placeholder ('float') 
w = tf.Variable(np.random.randn(2)) 
pred = tf.add(tf.mul(X,w[0]), w[1]) 

loss = tf.reduce_sum(tf.pow(pred-Y, 2))/(2*n_samples) 
init = tf.initialize_all_variables() 
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss) 

with tf.Session() as session: 
    session.run(init) 
    for epoch in range(training_epoch): 
     for x, y in zip(train_X, train_Y): 
      session.run(optimizer, feed_dict={X:x, Y:y}) 
     if (epoch+1) % display_epoch == 0: 
      weight = session.run(w) 
      bias = session.run(b) 
      cost = session.run(loss, feed_dict={X:train_X, Y:train_Y}) 
      print('epoch: {0:.2f}, weight: {1:.9f}. bias: {2:.9f}, cost: {3:.9f}'.format(epoch+1,weight[0], weight[1], cost)) 
    print('optimization complete') 

回答

2

TL; DR:占位符X和可变w具有不同的元件类型,以及TensorFlow不会自动投运算参数,所以tf.mul()运算失败。

你的占位符X具有类型tf.float32,因为它被定义为具有D型细胞'float',其被定义为是指“32位浮点”,在这一行:

X = tf.placeholder('float') 

你的可变w具有类型tf.float64因为它是从np.random.randn(2),其具有np.float64一个D型细胞初始化,在此行:

w = tf.Variable(np.random.randn(2)) 

的最简单的解决方案是定义w具有tf.float32类型:

w = tf.Variable(np.random.randn(2).astype(np.float32)) 

或者,你可以定义X具有tf.float64类型:

X = tf.placeholder(tf.float64) 

还有一个tf.cast()运作出明确的转换,但我不会”建议使用它,因为它不可区分,因此可能会干扰计算梯度。


PS。更惯用的方式做这将是使用tf.random_normal()运算,从而避免将大常数图:

w = tf.Variable(tf.random_normal([2])) 

虽然没有多大意义的小变量(如2元矢量这里)对于更大的重量矩阵来说,它变得更重要。

+0

非常感谢您的详细解释! – zesla

相关问题