在tensorflow2.0版本之前,1.x版本的tensorflow的基本数据类型有计算图(Computation Graph)和张量(Tensor)两种,但tensorflow2.0之后的版本取消了Graph和Session的概念。今天简单记录一下Tensor的相关内容。

从Tensorflow的命名就不难看出,Tensor(张量)在整个tensorflow的框架体系中都是一个重要的概念,它可以称为Tensorflow的数据模型,因为Tensor是tensorflow管理数据的形式,换句话说,在tensorflow中,所有的数据都可以借助张量的形式来表示。在张量出现之前,我们比较熟悉这样两种数据类型:list和np.array。list就不多说了,对于大量数据list的表现并不是很好,假设有一个维度[64,24,24,3]的数据,它在深度学习中其实是一个比较小的数据,但是对于list来说却是一个很庞大的数据,占用的内存空间更是无法估量。而为了解决大数据的吞吐,对于相同类型的数据载体,np.numpy有很好的表现,但是numpy是在tensorflow之前出现的一个科学计算库,对GPU并不支持,也不支持自动求导,为了更好的解决深度学习中的问题,tensorflow开始出现。

在数学中,一个0维的数据(dim=0),即1.1,2.2等等被称为一个标量(scalar),一个一维的数据(dim=1),即[1.1],[2.2,3.3,……]等被称作向量(vector),一个维度大于2的数据,如[[1,2],[3,4]]被称为矩阵(matrix),而Tensor一般是指维度大于2的向量(矩阵),但是在tensorflow中,以上所有的类型都可以被称为tensor。

创建不同类型的数据:

# int型
a = tf.constant(1)
# float型
b = tf.constant(1.)
# double型
c = tf.constant(2.,dtype=tf.float64)
# bool型
d = tf.constant([True,False])
# string型
e = tf.constant('hello world')

得到结果如下:

常用属性如下:

# 使用numpy声明一个数据
a=np.arange(5)
# 将其转化为tensor
aa=tf.convert_to_tensor(a)
# 强制类型转换 int——float
bb=tf.cast(aa,dtype=tf.float32)
# .numpy()将tensor返回numpy显示数据
print(aa.numpy())

得到

如何创建一个tensor:

# 通过numpy创建数据转换
a = tf.convert_to_tensor(np.ones([2,3]))
# list转换
b = tf.convert_to_tensor([1,2])
# 初始化全为0的tensor(tf.ones()用法同tf.zeros())
c = tf.zeros([2,2])
# 以指定tensor的shape为基础创建新的tensor(同tf.zeros(c.shape))
d = tf.zeros_like(c)
# 填充任意元素
e = tf.fill([2,2],9)
# 随机化初始化:
# 正态分布,mean指定均值,stddev指定方差
f = tf.random.normal([2,2],mean=1,stddev=1)
# 截断正态分布
g = tf.random.truncated_normal([2,2],mean=1,stddev=1)
# 均匀分布
h = tf.random.uniform([2,2],minval=0,maxval=1)

捎带提一点打乱顺序函数的用法:

# 随机打散
i = tf.range(10)
i = tf.random.shuffle(i)
x = tf.random.uniform([10],maxval=10,dtype=tf.int32)
y = tf.random.uniform([10],maxval=10,dtype=tf.int32)
print(i.numpy())
print("x:",x.numpy())
print("y:",y.numpy())
# .gather指定按照某一索引序列取值
x = tf.gather(x,i)
y = tf.gather(y,i)
print("x:",x.numpy())
print("y:",y.numpy())

可以看到按照同一打乱序列取值后,x和y仍然是一一对应的关系

tensor中scalar最常用的部分:loss和accuracy

损失(loss)和精度(accuracy)在前面回归和mnist实战都已经提过,这里不再解释其概念,简单说明一下loss的求值方法

# 生成一组数据用来模拟四张图片的网络输出
out = tf.random.uniform([4,10])
print(out)
# 模拟四张图片对应的label
y = tf.range(4)
print(y)
# 使用one_hot对label进行编码
y = tf.one_hot(y,depth=10)
print(y)
# 调用keras的api来计算损失(MSE均方误差)
loss = tf.keras.losses.mse(y,out)
print(loss)
# 求loss的均值
loss = tf.reduce_mean(loss)
print(loss)

Tensor--tensorflow的数据类型的更多相关文章

  1. tensorflow基础-数据类型

    一:tensorflow中的计算定义和执行 首先,对于tensorflow来说,最重要的概念就是图(Graph)和会话(Session),tensorflow的计算思想是:以图的形式来表示模型,表示和 ...

  2. TensorFlow使用基础-Tensor

    使用 TensorFlow 之前你需要了解关于 TensorFlow 的以下基础知识 :• 使用图 (graphs) 来表示计算 .• 在会话 ( Session ) 中执行图 .• 使用张量 (te ...

  3. TensorFlow中的Session、Graph、operation、tensor

    TensorFlow中的Session.Graph.operation.tensor

  4. pytorch和tensorflow的爱恨情仇之基本数据类型

    自己一直以来都是使用的pytorch,最近打算好好的看下tensorflow,新开一个系列:pytorch和tensorflow的爱恨情仇(相爱相杀...) 无论学习什么框架或者是什么编程语言,最基础 ...

  5. 学习笔记TF048:TensorFlow 系统架构、设计理念、编程模型、API、作用域、批标准化、神经元函数优化

    系统架构.自底向上,设备层.网络层.数据操作层.图计算层.API层.应用层.核心层,设备层.网络层.数据操作层.图计算层.最下层是网络通信层和设备管理层.网络通信层包括gRPC(google Remo ...

  6. TensorFlow框架之Computational Graph详解

    1. Getting Start 1.1 import TensorFlow应用程序需要引入编程架包,才能访问TensorFlow的类.方法和符号.如下所示的方法: import tensorflow ...

  7. TensorFlow框架(1)之Computational Graph详解

    1. Getting Start 1.1 import TensorFlow应用程序需要引入编程架包,才能访问TensorFlow的类.方法和符号.如下所示的方法: import tensorflow ...

  8. TensorFlow 基础知识

    参考资料: 深度学习笔记目录 向机器智能的TensorFlow实践 TensorFlow机器学习实战指南 Nick的博客 TensorFlow 采用数据流图进行数值计算.节点代表计算图中的数学操作,计 ...

  9. [译]与TensorFlow的第一次接触(三)之聚类

    转自 [译]与TensorFlow的第一次接触(三)之聚类 2016.08.09 16:58* 字数 4316 阅读 7916评论 5喜欢 18 前一章节中介绍的线性回归是一种监督学习算法,我们使用数 ...

  10. 05基于python玩转人工智能最火框架之TensorFlow基础知识

    从helloworld开始 mkdir mooc # 新建一个mooc文件夹 cd mooc mkdir 1.helloworld # 新建一个helloworld文件夹 cd 1.helloworl ...

随机推荐

  1. Codeforces 1065C Make It Equal (差分+贪心)

    题意:n个塔,第i个塔由$h_i$个cube组成,每次可以切去某高度h以上的最多k个cube,问你最少切多少次,可以让所有塔高度相等 k>=n, n<=2e5 思路:差分统计每个高度i有的 ...

  2. 使用GitHub+Travis-CI+Docker打造自动化流水线

    全文采用的是阿里云的ESC服务器,系统是CentOS 7 示例项目是NodeJS编写,本文主要是Docker的使用,在文章前2/3都是Docker命令介绍,最后我们会完成一个自动化的示例. 准备 注册 ...

  3. 数据算法 --hadoop/spark数据处理技巧 --(7.共同好友 8. 使用MR实现推荐引擎)

    七,共同好友. 在所有用户对中找出“共同好友”. eg: a    b,c,d,g b    a,c,d,e map()->  <a,b>,<b,c,d,g> ;< ...

  4. logstash 安装插件multiline

    一.安装multiline 在使用elk 传输记录 java 日志时,如下 一个java的报错 在elk中会按每一行 产生多条记录,不方便查阅 这里修改配置文件 使用  multiline   插件 ...

  5. php 安装扩展插件实例-gd库

    今天给php 安装一个扩展插件 gd库   一.gd库是什么 gd库是一个开源的图像处理库,它通过提供一系列用来处理图片的API,使其可以用来创建图表.图形.缩略图以及其他图像的处理操作. gd库支持 ...

  6. 1163 - Bank Robbery

    1163 - Bank Robbery   In one very cold morning, Mark decides to rob a bank. But while trying hacking ...

  7. android应用开发错误:Your project contains error(s),please fix them before running your

    重新打开ECLIPSE运行android项目,或者一段时间为运行ECLIPSE,打开后,发现新建项目都有红叉,以前的项目重新编译也有这问题,上网搜索按下面操作解决了问题 工程上有红叉,不知道少了什么, ...

  8. 简易音乐播放器主界面设计 - .NET CORE(C#) WPF开发

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. 简易音乐播放器主界面设计 - .NET CORE(C#) WPF开发 阅读导航 本文背景 代码 ...

  9. java开发病房管理系统

    开发环境: Windows操作系统开发工具: Myeclipse+Jdk+Tomcat+MySQL数据库 运行效果图 源码及原文链接:https://javadao.xyz/forum.php?mod ...

  10. java面向对象入门(1)-入门介绍

    在本 Java OOPs 概念教程中,我们将学习四种主要的面向对象原则 -- 抽象.封装.继承和多态性.它们也被称为面向对象编程范式的四大支柱. _抽象_是在不考虑无关细节的情况下公开实体基本细节的过 ...