[开发技巧]·TensorFlow中numpy与tensor数据相互转化(支持tf1.x-tf2.x)

个人网站–> http://www.yansongsong.cn

推荐对比阅读:[开发技巧]·PyTorch中Numpy,Tensor与Variable深入理解与转换技巧

鉴于tensorflow目前正在更新2.0版本,博主对博客也新增了适用于2.0版本动态度转换方法,更新于 --2019//09//29

图1 numpy
图2 tensorflow

- 问题描述

在我们使用TensorFlow进行深度学习训练时,很多时候都是与Numpy数据打招呼,例如我们csv或者照片数据等。
但是我们都知道,TensorFlow训练时都是使用Tensor来存储变量的,并且网络输出的结果也是Tensor。

一般情况下我们不会感受到Numpy与Tensor之间的区别,因为TensorFlow网络在输入Numpy数据时会自动转换为Tensor来处理。
但是在输出网络时,输出的结果仍为Tensor,当我们要用这些结果去执行只能由Numpy数据来执行的操作时就会出现莫名其妙的错误。

例如,当我想要用自编码器与解码器输出的结果使用matplotlib显示时就会报错

TypeError: Image data cannot be converted to float

解决方法

TF 1.x版本

有时候解决起来很简单,就是错误比较难找到,所以我推荐的方法为将数据进行显式的转化。

  • Numpy2Tensor

虽然TensorFlow网络在输入Numpy数据时会自动转换为Tensor来处理,但是我们自己也可以去显式的转换:

data_tensor= tf.convert_to_tensor(data_numpy)
  • Tensor2Numpy

网络输出的结果仍为Tensor,当我们要用这些结果去执行只能由Numpy数据来执行的操作时就会出现莫名其妙的错误。解决方法:

with tf.Session() as sess:
    data_numpy = data_tensor.eval()

TF 2.x版本(更新于2019//09//29)

  • Numpy2Tensor(与1.x版本相同)

虽然TensorFlow网络在输入Numpy数据时会自动转换为Tensor来处理,但是我们自己也可以去显式的转换:

data_tensor= tf.convert_to_tensor(data_numpy)
  • Tensor2Numpy

网络输出的结果仍为Tensor,当我们要用这些结果去执行只能由Numpy数据来执行的操作时就会出现莫名其妙的错误。解决方法,由于2.x版本取消了session机制,开发人员可以直接执行 .numpy()方法转换tensor:

data_numpy = data_tensor.numpy()

最后推荐一个[TF2.0视频教程]

我购买过了,课程质量很高,既有原理讲解也有实战演练。强烈推荐。缺点就是教的很细,看完需要挺多时间,但是深深研究下去还是有很多收获的。可以收获深度学习知识与技巧,也可以学会实战编程。
现在在做活动,可以领20元红包。。

也欢迎大家加入笔者的知识星球:「AI深度学习应用之路」

基于深度学习的理论学习与应用开发技术分享,笔者会经常分享深度学习干货内容,大家在学习或者应用深度学习时,遇到什么问题也可以与我在上面交流知无不答。

几杯奶茶的价格可以订阅一年,出自CSDN博客专家&知乎深度学习专栏作家​​​​​​​–小宋是呢

发布了168 篇原创文章 · 获赞 398 · 访问量 19万+

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie

分享到微信朋友圈

×

扫一扫,手机浏览