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))

部分结果:

 

  • 11
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值