TensorFlow学习中遇到的坑(二)

np.float32 和 tf.float32有什么区别

因为熟悉了numpy,所以在tensorflow中张量初始化更喜欢用numpy来做,可是你这么写:

a = tf.Variable(np.random.random([2,3]),np.float32)
x = tf.placeholder(tf.float32,[None,3])
y = tf.placeholder(tf.float32,[None,3])
y = x*a

就会始终报错!显示数据类型错误,可是你已经注明了float32了,还能有什么类型错误呢?
print一下a和x:

print(a,'\n',x)

显示:

<tf.Variable 'Variable_171:0' shape=(2, 3) dtype=float64_ref> 
 Tensor("Placeholder_146:0", shape=(?, 3), dtype=float32)

发现a 是float64,明明注明了是32位的,这可能是TensorFlow 的一个bug?

解决办法:

需要强制转换:

a = tf.cast(a,tf.float32)

其实转换为 tf.cast(a,np.float32)也是可以的,也就是说np.float32 和 tf.float32没有区别!
这样就通过了:

a = tf.Variable(np.random.random([2,3]))
a = tf.cast(a,tf.float32)
x = tf.placeholder(tf.float32,[None,3])
y = tf.placeholder(tf.float32,[None,3])
y = x*a

无报错!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容