自己一直以来都是使用的pytorch,最近打算好好的看下tensorflow,新开一个系列:pytorch和tensorflow的爱恨情仇(相爱相杀。。。)

无论学习什么框架或者是什么编程语言,最基础的就是其基本的数据类型了,接下来我们就一一看看吧。

1、python基本数据类型

数字型:整型、浮点型、布尔型、复数型。

非数字型:字符串、列表、元组、字典。

使用type可以查看变量的类型:type(变量名)

2、numpy中的数据类型

名称 描述
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,等等。

这里简要的看下例子,一般情况下我们是这么定义一个数组的:

当然,我们也可以使用如下方式定义:先指定数组中元素的类型,再创建数组

为什么我们要这么定义呢,这么定义不是没有第一种简便吗?这是因为,通过这种方式,我们可以定义自己的数据类型:

这里的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

3、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类型。

3、tensorflow基本数据类型

定义一个张量:

使用tf.constant建立一个常量,注意:常量是不进行梯度更新的。

(1)张量之间的类型转换:可以使用tf.to_类型()或者tf.cast(),不过前者将要被移除,最好使用tf.cast()

(2) 张量和numpy之间的类型转换

numpy转张量:使用tf.convert_to_tensor()

张量转numpy:由Session.runeval返回的任何张量都是NumPy数组。

(3)tensorflow好像不存在什么gpu张量和cpu张量类型

如果有什么错误还请指出,有什么遗漏的还请补充,会进行相应的修改。

pytorch和tensorflow的爱恨情仇之基本数据类型的更多相关文章

  1. pytorch和tensorflow的爱恨情仇之定义可训练的参数

    pytorch和tensorflow的爱恨情仇之基本数据类型 pytorch和tensorflow的爱恨情仇之张量 pytorch版本:1.6.0 tensorflow版本:1.15.0 之前我们就已 ...

  2. pytorch和tensorflow的爱恨情仇之张量

    pytorch和tensorflow的爱恨情仇之基本数据类型:https://www.cnblogs.com/xiximayou/p/13759451.html pytorch版本:1.6.0 ten ...

  3. pytorch和tensorflow的爱恨情仇之参数初始化

    pytorch和tensorflow的爱恨情仇之基本数据类型 pytorch和tensorflow的爱恨情仇之张量 pytorch和tensorflow的爱恨情仇之定义可训练的参数 pytorch版本 ...

  4. pytorch和tensorflow的爱恨情仇之一元线性回归例子(keras插足啦)

    直接看代码: 一.tensorflow #tensorflow import tensorflow as tf import random import numpy as np x_data = np ...

  5. Menu与ActionBar的爱恨情仇

    最近在开发一款音乐播放器,在开发过程中遇到了一点小麻烦,通过android API搞清楚了Menu与ActionBar的爱恨情仇,写了个小Demo祭奠一下那些年我们陷进去的坑,有不对的地方请大神们批评 ...

  6. web移动端fixed布局和input等表单的爱恨情仇 - 终极BUG,完美解决

    [问题]移动端开发,ios下当fixed属性和输入框input(这里不限于input,只要可以调用移动端输入法的都包括,如:textarea.HTML5中contenteditable等),同时存在的 ...

  7. 注解:大话AOP与Android的爱恨情仇

    转载:大话AOP与Android的爱恨情仇 1. AOP与OOP的区别 平时我接触多的就是OOP(Object Oriented Programming面向对象).AOP(Aspect Oriente ...

  8. 除了love和hate,还能怎么表达那些年的“爱恨情仇”?

    实用英语 帮你全面提高英语水平 关注 童鞋们每次刷美剧的时候,相信都会被CP感满满的男女主角虐得体无完肤吧. 可是,一到我们自己表达爱意或者恨意的时候,却苦于词穷,只会用love, like, hat ...

  9. 对json的爱恨情仇

    本文回想了对json的爱恨情仇. C++有风险,使用需慎重. 本文相关代码在:http://download.csdn.net/detail/baihacker/7862785 当中的測试数据不在里面 ...

随机推荐

  1. [PKUWC2018]Minimax 题解

    根据题意,若一个点有子节点,则给出权值:否则可以从子节点转移得来. 若没有子节点,则直接给出权值: 若只有一个子节点,则概率情况与该子节点完全相同: 若有两个子节点,则需要从两个子节点中进行转移. 如 ...

  2. h5c3

    HTML5 第一天 一.什么是 HTML5 HTML5 的概念与定义 定义:HTML5 定义了 HTML 标准的最新版本,是对 HTML 的第五次重大修改,号称下一代的 HTML 两个概念: 是一个新 ...

  3. JAVA开源软件的技术选型--开源软件诞生2

    技术准备--第2篇 用日志记录“开源软件”的诞生 赤龙ERP开源地址,点亮星标,支持一下,万分感谢 码云:https://gitee.com/redragon/redragon-erp github: ...

  4. python接口测试自动化之python基础语法

    一.pycharm的使用和python基本语法 (一).pycharm的使用和python环境 1.python以及pycharm的安装 python 的版本选择:3.x 版本,不要安装2.x 版本, ...

  5. Angular 之我见

    很久没有写过技术软文了,虽然 Angular 发布已有四年,得到了越来越多人的关注,但是仍然有很多人不分青红皂白的进行诋毁.我打算结合自己的经历从客观的角度说聊一聊我眼中的 Angular. 本人刚做 ...

  6. 招新裁老,两面派互联网大厂,培训三个月,就拿15K,凭什么?

    看到一位朋友在发帖子求问:亲身经历,(如有谎言我名字倒过来写)一个大学同学18年毕业的.在兰州一个二本学的兽医农牧,毕业难找工作,去深圳一个机构培训了三个月吧,然后就去做大数据 算法了,然后又去做ja ...

  7. App性能测试前需要了解的内存原理

    这两天在研究性能中内存方面的一块,网上也零散看了挺多文章,写得很细但是感觉不够整体,所以这篇算是总结一下吧,当个复习资料. 那么这里个人分为两个大部分,第一部分应用内的内存管理,主要是oom的理解,G ...

  8. 判断Java程序是否在jar中运行

    URL url = TextRenderer.class.getResource(""); String protocol = url.getProtocol(); boolean ...

  9. C#中TextBox设置readonly不能读取数据问题

    在ASP.NET中前端设置控件TextBox的属性为Readonly="True"时,如果之前有设定初始值,或通过JS方式给其赋值后,在后台访问其Text值却无法获取,这种问题的解 ...

  10. python格式化输出当前时间

    import time def get_now_time(): now_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.tim ...