TypeError: Input 'b' of 'MatMul' Op has type float32 that does not match type float64 of argument 'a

tensorflow学习笔记中,可能版本问题,总会遇到一些小问题,运行到矩阵相乘时会遇到上面的报错。

import tensorflow as tf
import numpy as np
batch_size = 8
Seed = 23455
rdm = np.random.RandomState(Seed)
x = rdm.rand(32,2)
y_ = [[x1+x2+(rdm.rand()/10.0-0.05)]for (x1,x2)in x]
# 1 定义神经网络的输入、参数和输出,定义前向传播过程
x_data = tf.placeholder(tf.float32,shape=([None,2]))
y_data = tf.placeholder(tf.float32,shape=([None,1]))
W = tf.Variable(tf.random_normal([2,1],stddev=1,seed =1))
y = tf.matmul(x,W)

显示,TypeError: Input 'b' of 'MatMul' Op has type float32 that does not match type float64 of argument 'a,这是由于两个相乘矩阵类型不匹配,调试一下发现x矩阵为tf.float64,W矩阵为tf.float32,改类型用tf.cast()函数,修改如下:

y = tf.matmul(tf.cast(x,tf.float32),W)

把最后一行修改即可。

整体代码:

# coding:utf-8

# 0 导入模块,生成数据集
import tensorflow as tf
import numpy as np
batch_size = 8
Seed = 23455
rdm = np.random.RandomState(Seed)
x = rdm.rand(32,2)
y_ = [[x1+x2+(rdm.rand()/10.0-0.05)]for (x1,x2)in x]
# 1 定义神经网络的输入、参数和输出,定义前向传播过程
x_data = tf.placeholder(tf.float32,shape=([None,2]))
y_data = tf.placeholder(tf.float32,shape=([None,1]))
W = tf.Variable(tf.random_normal([2,1],stddev=1,seed =1))
#y = tf.matmul(x,W)
y = tf.matmul(tf.cast(x,tf.float32),W)
# 2 定义损失函数(均方误差mse)及反向传播方法(梯度下降)
loss_mse = tf.reduce_mean(tf.square(y-y_))
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss_mse)
# 3 生成会话,训练steps轮
with tf.Session() as sess:
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
    Steps = 20000
    for i in range(20000):
        start = (i*batch_size)%32
        end = (i*batch_size)%32+batch_size
        sess.run(train_step,feed_dict={x_data:x[start:end],y_data:y_[start:end]})
        if i%500 ==0:
            print('after %d training steps,W is:'%(i))
            print(sess.run(W),'\n')
        print('final W is:\n',sess.run(W))

部分结果:

TypeError: Input 'b' of 'MatMul' Op has type float32 that does not match type float64 of argument 'a_第1张图片

 

你可能感兴趣的:(tensorflow)