当前位置:   article > 正文

【深度学习】TensorFlow的基本数据类型,tensor和numpy的相互转化,tensor的基本操作_tensorflow tensor numpy

tensorflow tensor numpy

一、常见数据类型的载体,在python语言中list是一个非常灵活的数据载体,在list中间可以添加任何类型的数据比如:[1,1.2,"hellow",(1,2)],他们分别是整形,浮点型,字符型,元组。可以随意添加、删除,类似于链表的概念。

二、为了解决大数据的吞吐,提高存储效率,我们可以用numpy来存储相同类型的数据 np.array  是专门用来解决同类型的数据载体,可以很方便的存储比如[64,224,224,3]这样的图片数据,并对其进行一些处理比如转置、加减、乘除之类。但是numpy出现在深度学习之前,是一个科学计算库,没有很好地GPU计算支持也不能够支持自动求导这个时候TensorFlow就应运而生。

三、TensorFlow在功能方面比numpy稍微偏重一点,更加偏重于神经网络的计算,但它的一些基本方面比如拼接、分裂和numpy非常类似,为了减少初学者的难度,TensorFlow的API和numpy的API的命名都是刻意的相近的。

在TensorFlow中的数据载体叫tf.tensor.

what is tensor

  • scalar: 1.1 2.2 5 这些称之为标量 ,它的维度(dimension)=0
  • vector: [1.1],[1.1,2.2,......]  这些称之为向量,dim=1
  • matrix:   [[1.1,2.2],[3.3,4.4,5.5],[6.6,7.7]] 这称为矩阵,dim=2,
  • Tensor:dim>2
  • 在工程上以上的数据类型除了scalar都可以叫做Tensor。

https://playground.tensorflow.org

很多的数据,经过很多的操作,从输入到输出完成一个flow的过程。这就是TensorFlow的由来。

TF is computing lib

  • int ,float, double
  • bool
  • string 

我们来看创建不同类型的数据。

  1. In [2]: import tensorflow as tf
  2. G:\Users\hasee\Anaconda3\lib\site-packages\h5py\__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
  3. from ._conv import register_converters as _register_converters
  4. In [3]: tf.constant(1)
  5. 2019-07-25 16:37:02.809147: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
  6. Out[3]: <tf.Tensor: id=0, shape=(), dtype=int32, numpy=1>
  7. In [4]: tf.constant(1.)
  8. Out[4]: <tf.Tensor: id=2, shape=(), dtype=float32, numpy=1.0>
  9. In [5]: tf.constant(2.2, dtype=tf.int32)
  10. ---------------------------------------------------------------------------
  11. TypeError Traceback (most recent call last)
  12. <ipython-input-5-cf6ddbb50ed9> in <module>()
  13. ----> 1 tf.constant(2.2, dtype=tf.int32)
  14. G:\Users\hasee\Anaconda3\lib\site-packages\tensorflow\python\framework\constant_op.py in constant(value, dtype, shape, name)
  15. 243 """
  16. 244 return _constant_impl(value, dtype, shape, name, verify_shape=False,
  17. --> 245 allow_broadcast=True)
  18. 246
  19. 247
  20. G:\Users\hasee\Anaconda3\lib\site-packages\tensorflow\python\framework\constant_op.py in _constant_impl(value, dtype, shape, name, verify_shape, allow_broadcast)
  21. 251 ctx = context.context()
  22. 252 if ctx.executing_eagerly():
  23. --> 253 t = convert_to_eager_tensor(value, ctx, dtype)
  24. 254 if shape is None:
  25. 255 return t
  26. G:\Users\hasee\Anaconda3\lib\site-packages\tensorflow\python\framework\constant_op.py in convert_to_eager_tensor(value, ctx, dtype)
  27. 108 return ops.EagerTensor(
  28. 109 value, handle, device, dtype, tensor)
  29. --> 110 t = ops.EagerTensor(value, handle, device, dtype)
  30. 111 scalar_cache[cache_key] = t
  31. 112 return t
  32. TypeError: Cannot convert provided value to EagerTensor. Provided value: 2.2 Requested dtype: int32
  33. In [6]: tf.constant(2.2, dtype=tf.double)
  34. Out[6]: <tf.Tensor: id=5, shape=(), dtype=float64, numpy=2.2>
  35. In [7]: tf.constant([True, False])
  36. Out[7]: <tf.Tensor: id=7, shape=(2,), dtype=bool, numpy=array([ True, False])>
  37. In [2]: tf.constant('hellow,world')
  38. Out[2]: <tf.Tensor: id=0, shape=(), dtype=string, numpy=b'hellow,world'>

tf.constant 的含义是创建一个常量, 可以理解为一个普通的tensor,这个常量的类型是根据你给的参数决定的,在定义的时候可以将float升级为double型但不可以将float降为int型。

将tensor转化为numpy,ndim是获得它的维度,rank获得变量的详细信息

  1. In [3]: b=tf.range(4)
  2. In [4]: b.numpy()
  3. Out[4]: array([0, 1, 2, 3])
  4. In [5]: b.shape
  5. Out[5]: TensorShape([4])
  6. In [6]: b.ndim
  7. Out[6]: 1
  8. In [7]: tf.rank(b)
  9. Out[7]: <tf.Tensor: id=7, shape=(), dtype=int32, numpy=1>

检查一个变量是不是tensor,和它的数据类型

  1. In [8]: tf.is_tensor(b)
  2. Out[8]: True
  3. In [9]: b.dtype
  4. Out[9]: tf.int32

numpy型数据转化成tensor型数据的两种方法:一种是tf.conver_to_tensor()

另一种是cast(,)

  1. import numpy as np
  2. In [13]: a=np.arange(5)
  3. In [14]: a.dtype
  4. Out[14]: dtype('int32')
  5. In [15]: aa=tf.convert_to_tensor(a)
  6. In [16]: aa
  7. Out[16]: <tf.Tensor: id=9, shape=(5,), dtype=int32, numpy=array([0, 1, 2, 3, 4])>
  8. In [17]: aa=tf.convert_to_tensor(a,dtype=tf.int64)
  9. In [18]: aa
  10. Out[18]: <tf.Tensor: id=11, shape=(5,), dtype=int64, numpy=array([0, 1, 2, 3, 4], dtype=int64)>
  11. In [19]: tf.cast(aa,dtype=tf.float32)
  12. Out[19]: <tf.Tensor: id=13, shape=(5,), dtype=float32, numpy=array([0., 1., 2., 3., 4.], dtype=float32)>
  13. In [20]: aaa=tf.cast(aa,dtype=tf.double)
  14. In [21]: aaa
  15. Out[21]: <tf.Tensor: id=15, shape=(5,), dtype=float64, numpy=array([0., 1., 2., 3., 4.])>
  16. In [22]: tf.cast(aaa,dtype=tf.int32)
  17. Out[22]: <tf.Tensor: id=17, shape=(5,), dtype=int32, numpy=array([0, 1, 2, 3, 4])>

常见的bool转换成int

  1. b=tf.constant([0,1])
  2. In [4]: b
  3. Out[4]: <tf.Tensor: id=0, shape=(2,), dtype=int32, numpy=array([0, 1])>
  4. In [5]: tf.cast(b,dtype=tf.bool)
  5. Out[5]: <tf.Tensor: id=2, shape=(2,), dtype=bool, numpy=array([False, True])>
  6. In [6]: bb=tf.cast(b,dtype=tf.bool)
  7. In [7]: bb
  8. Out[7]: <tf.Tensor: id=4, shape=(2,), dtype=bool, numpy=array([False, True])>
  9. tf.cast(bb,tf.int32)
  10. Out[10]: <tf.Tensor: id=6, shape=(2,), dtype=int32, numpy=array([0, 1])>

tf.variable

专门神经网络的参数所设定的数据类型,为了更好地跟踪变量的信息,求导,和更新

  1. In [11]: a=tf.range(5)
  2. In [12]: b=tf.Variable(a)
  3. In [13]: b.name
  4. Out[13]: 'Variable:0'
  5. In [14]: b.trainable
  6. Out[14]: True
  7. In [15]: tf.is_tensor(b)
  8. Out[15]: True

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/96026
推荐阅读
相关标签
  

闽ICP备14008679号