鉴于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()