本身一直以来都是使用的pytorch,最近打算好好的看下tensorflow,新开一个系列:pytorch和tensorflow的爱恨情仇(相爱相杀。。。)html
不管学习什么框架或者是什么编程语言,最基础的就是其基本的数据类型了,接下来咱们就一一看看吧。python
pytorch版本:0.4.1,准备以后换成1.x版本的。编程
tensorflow版本:1.15.0,虽然目前tensorflow已经出到2.x版本了,但听说2.x版本的还存在一些bug,就使用目前的1.x版本的了。数组
一、python基本数据类型框架
数字型:整型、浮点型、布尔型、复数型。编程语言
非数字型:字符串、列表、元组、字典。函数
使用type能够查看变量的类型:type(变量名)学习
二、numpy中的数据类型ui
名称 | 描述 |
---|---|
bool_ | 布尔型数据类型(True 或者 False) |
int_ | 默认的整数类型(相似于 C 语言中的 long,int32 或 int64) |
intc | 与 C 的 int 类型同样,通常是 int32 或 int 64 |
intp | 用于索引的整数类型(相似于 C 的 ssize_t,通常状况下仍然是 int32 或 int64) |
int8 | 字节(-128 to 127) |
int16 | 整数(-32768 to 32767) |
int32 | 整数(-2147483648 to 2147483647) |
int64 | 整数(-9223372036854775808 to 9223372036854775807) |
uint8 | 无符号整数(0 to 255) |
uint16 | 无符号整数(0 to 65535) |
uint32 | 无符号整数(0 to 4294967295) |
uint64 | 无符号整数(0 to 18446744073709551615) |
float_ | float64 类型的简写 |
float16 | 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位 |
float32 | 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位 |
float64 | 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位 |
complex_ | complex128 类型的简写,即 128 位复数 |
complex64 | 复数,表示双 32 位浮点数(实数部分和虚数部分) |
complex128 | 复数,表示双 64 位浮点数(实数部分和虚数部分) |
numpy 的数值类型其实是 dtype 对象的实例,并对应惟一的字符,包括 np.bool_,np.int32,np.float32,等等。spa
这里简要的看下例子,通常状况下咱们是这么定义一个数组的:
固然,咱们也可使用以下方式定义:先指定数组中元素的类型,再建立数组
为何咱们要这么定义呢,这么定义不是没有第一种简便吗?这是由于,经过这种方式,咱们能够定义本身的数据类型:
这里的i1指代的是int8,
每一个内建类型都有一个惟必定义它的字符代码,以下:
字符 | 对应类型 |
---|---|
b | 布尔型 |
i | (有符号) 整型 |
u | 无符号整型 integer |
f | 浮点型 |
c | 复数浮点型 |
m | timedelta(时间间隔) |
M | datetime(日期时间) |
O | (Python) 对象 |
S, a | (byte-)字符串 |
U | Unicode |
V | 原始数据 (void) |
因而乎,请看如下例子:
说到数据类型,就不得不涉及到数据类型之间的转换,天然而然首先想到的是经过修改dtype的类型来修改数据的类型,可是这存在一些问题,请看如下例子:
>>> a=np.array([1.1, 1.2]) >>> a.dtype dtype('float64') >>> a.dtype=np.int16 >>> a.dtype dtype('int16') >>> a array([-26214, -26215, -26215, 16369, 13107, 13107, 13107, 16371], dtype=int16) #原来float64至关于4个int16的位宽,这样强制转换后会将他们直接拆开成4个数, #所以原来的两个float64成了8个int16
咱们要使用astype来修改数据类型,看一下例子:
>>> a=np.array([1.1, 1.2]) >>> a.dtype dtype('float64') >>> a.astype(np.int16) array([1, 1], dtype=int16) >>> a.dtype dtype('float64') #a的数据类型并无变 >>> a=a.astype(np.int16) #赋值操做后a的数据类型变化 >>> a.dtype dtype('int16') >>> a array([1, 1], dtype=int16)
参考:
https://www.runoob.com/numpy/numpy-dtype.html
https://blog.csdn.net/miao20091395/article/details/79276721
三、pytorch中的数据类型
看如下例子:默认使用的数据类型是torch.float32
固然,你也能够指定生成张量的类别,经过如下方式:
在多数状况下,咱们都会使用pytorch自带的函数创建张量,看如下例子:
经过如下两种方式能够查看张量的数据类型:
接下来仍是要看下数据类型之间的转换,主要有三点:张量之间的数据类型的转换、张量和numpy数组之间的转换、cuda张量和cpu张量的转换
(1) 不一样张量之间的类型转换
直接使用(.类型)便可:
咱们还可使用type()来进行转换:
咱们一样可使用type_as()将某个张量的数据类型转换为另外一个张量的相同的数据类型:
(2)张量和numpy之间的转换
将numpy数组转换为张量:使用from_numpy()
将张量转换为numoy数组:使用.numpy()
(3) cuda类型和cpu类型之间的转换
cpu类型转换成cuda类型:
a.cuda()或者a.to(device):这里的device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
cuda类型转换为cpu类型:
a.cpu()
这里须要提一句的是,要先将cuda类型转换为cpu类型,才能进一步将该类型转换为numpy类型。
三、tensorflow基本数据类型
定义一个张量:
使用tf.constant创建一个常量,注意:常量是不进行梯度更新的。
(1)张量之间的类型转换:可使用tf.to_类型()或者tf.cast(),不过前者将要被移除,最好使用tf.cast()
(2) 张量和numpy之间的类型转换
numpy转张量:使用tf.convert_to_tensor()
张量转numpy:由Session.run
或eval
返回的任何张量都是NumPy数组。
(3)tensorflow好像不存在什么gpu张量和cpu张量类型
若是有什么错误还请指出,有什么遗漏的还请补充,会进行相应的修改。