在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. Go语言实现:【剑指offer】翻转单词顺序列

    该题目来源于牛客网<剑指offer>专题. 例如,"student. a am I",正确的句子应该是"I am a student." Go语言实 ...

  2. Go语言实现:【剑指offer】序列化二叉树

    该题目来源于牛客网<剑指offer>专题. 请实现两个函数,分别用来序列化和反序列化二叉树. 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建 ...

  3. 不同宿主的iterator不能进行比较

    int main() { string str1, str2; auto it1 = str1.begin(), it2 = str2.begin(); it1 == it2; ; }

  4. CSS实现按钮点击后根据背景色加深效果-一颗优雅草bigniu

    具体代码如下 button{ position: relative; } button:active::before { display: block; content: ''; position: ...

  5. 使用docker19.03.6部署zabbix

    可参考官方文档:https://www.zabbix.com/documentation/4.0/zh/manual/installation/containers 1)启动一个空的mysql服务器实 ...

  6. 阿里云服务器ECS Ubuntu18.04 建立新用户

    昨天花了好长时间终于把界面功能弄好了,今天找时间再折腾一下: 1.建立新的用户: ssh连接上,用以下命令建立新用户,并设置密码: 创建普通用户“myname”成功,接下来为用户“myname”赋予s ...

  7. yum 升级php版本

    centos默认安装的php都是 5.3的  ,现在需要 5.6以上的版本 手动安装比较麻烦,直接用yum升级了. 一.准备工作 首先检查当前php版本 #php -v 查看安装的php扩展包 #yu ...

  8. 动态获取bind dns日志IP脚本

    #!/usr/bin/env python #_*_coding:utf-8_*_ ''' python deny_dns_allip.py your_filelog_name 动态获取dns日志的I ...

  9. 杭电-------2041超级楼梯(c语言写)

    /* 当未走的楼梯大于1时,可以选择走一步或者走两步,每次所做的选择相似, 符合分治法的特性,因此选择分治法,又测试用例有多组,为了避免多组 用例的重复计算,可用一个数组将已经知道的剩下的楼梯可以走的 ...

  10. 搭建fastdfs文件服务器

    一.安装FastDFS环境 1.跟踪服务器(Tracker Server) tracker1:192.168.2.134 tracker2:192.168.2.135 2.存储服务器(Storage ...