当前位置: 首页 > news >正文

深度学习基础之《TensorFlow框架(6)—张量》

一、张量

1、什么是张量
张量Tensor和ndarray是有联系的,当我们print()打印值的时候,它返回的就是ndarray对象

TensorFlow的张量就是一个n维数组,类型为tf.Tensor。Tensor具有以下两个重要的属性:
(1)type:数据类型
(2)shape:形状(阶)

2、张量的类型
张量,在计算机当中如何存储?

标量,一个数字
向量,一维数组 [2,3,4]
矩阵,二维数组 [[2,3,4],[2,3,4]]
张量,就是n维数组
    标量,可以看做0阶张量
    向量,可以看做1阶张量
    矩阵,可以看做2阶张量
    n维数组,n阶张量

数据类型python类型描述
DT_FLOATtf.float3232位浮点数
DT_DOUBLEtf.float6464位浮点数
DT_INT64tf.int6464位有符号整数
DT_INT32tf.int3232位有符号整数
DT_INT16tf.int1616位有符号整数
DT_INT8tf.int88位有符号整数
DT_UINT8tf.uint88位无符号整数
DT_STRINGtf.string可变长度的字节数组,每一个张量元素都是一个字节数组
DT_BOOLtf.bool布尔型
DT_COMPLEX64tf.complex64由两个32位浮点数组成的复数:实数和虚数
DT_QINT32tf.qint32用于量化Ops的32位有符号整型
DT_QINT8tf.qint8用于量化Ops的8位有符号整型
DT_QUINT8tf.quint8用于量化Ops的8位无符号整型

3、张量的阶
对应到ndarray的维数

数学实例python例子
0纯量只有大小s = 483
1向量大小和方向v = [1.1, 2.2, 3.3]
2矩阵数据表m = [[1,2,3],[4,5,6],[7,8,9]]
33阶张量数据立体...
nn阶张量自己想想......
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tfdef tensorflow_demo():"""TensorFlow的基本结构"""# TensorFlow实现加减法运算a_t = tf.constant(2)b_t = tf.constant(3)c_t = a_t + b_tprint("TensorFlow加法运算结果:\n", c_t)print(c_t.numpy())# 2.0版本不需要开启会话,已经没有会话模块了return Nonedef graph_demo():"""图的演示"""# TensorFlow实现加减法运算a_t = tf.constant(2)b_t = tf.constant(3)c_t = a_t + b_tprint("TensorFlow加法运算结果:\n", c_t)print(c_t.numpy())# 查看默认图# 方法1:调用方法default_g = tf.compat.v1.get_default_graph()print("default_g:\n", default_g)# 方法2:查看属性# print("a_t的图属性:\n", a_t.graph)# print("c_t的图属性:\n", c_t.graph)# 自定义图new_g = tf.Graph()# 在自己的图中定义数据和操作with new_g.as_default():a_new = tf.constant(20)b_new = tf.constant(30)c_new = a_new + b_newprint("c_new:\n", c_new)print("a_new的图属性:\n", a_new.graph)print("b_new的图属性:\n", b_new.graph)# 开启new_g的会话with tf.compat.v1.Session(graph=new_g) as sess:c_new_value = sess.run(c_new)print("c_new_value:\n", c_new_value)print("我们自己创建的图为:\n", sess.graph)# 可视化自定义图# 1)创建一个writerwriter = tf.summary.create_file_writer("./tmp/summary")# 2)将图写入with writer.as_default():tf.summary.graph(new_g)return Nonedef session_run_demo():"""feed操作"""tf.compat.v1.disable_eager_execution()# 定义占位符a = tf.compat.v1.placeholder(tf.float32)b = tf.compat.v1.placeholder(tf.float32)sum_ab = tf.add(a, b)print("a:\n", a)print("b:\n", b)print("sum_ab:\n", sum_ab)# 开启会话with tf.compat.v1.Session() as sess:print("占位符的结果:\n", sess.run(sum_ab, feed_dict={a: 1.1, b: 2.2}))return Nonedef tensor_demo():"""张量的演示"""tensor1 = tf.constant(4.0)tensor2 = tf.constant([1, 2, 3, 4])linear_squares = tf.constant([[4], [9], [16], [25]], dtype=tf.int32)print("tensor1:\n", tensor1)print("tensor2:\n", tensor2)print("linear_squares:\n", linear_squares)return Noneif __name__ == "__main__":# 代码1:TensorFlow的基本结构# tensorflow_demo()# 代码2:图的演示#graph_demo()# feed操作#session_run_demo()# 代码4:张量的演示tensor_demo()
python3 day01_deeplearning.pytensor1:tf.Tensor(4.0, shape=(), dtype=float32)
tensor2:tf.Tensor([1 2 3 4], shape=(4,), dtype=int32)
linear_squares:tf.Tensor(
[[ 4][ 9][16][25]], shape=(4, 1), dtype=int32)

创建张量的时候,如果不指定类型:
整型:默认tf.inf32
浮点型:默认tf.float32

二、创建张量的指令

1、固定值张量
tf.zeros(shape, dtype=tf.float32, name=None)
创建所有元素设置为零的张量
此操作返回一个具有dtype、shape和所有元素设置为零的类型的张量

tf.zeros_like(tensor, dtype=None, name=None)
给定一个张量tensor,该操作返回与所有元素设置为零的tensor具有相同类型和形状的张量

tf.ones(shape, dtype=tf.float32, name=None)
创建一个所有元素设置为1的张量
此操作返回一个具有dtype、shape和所有元素设置为1的类型的张量

tf.ones_like(tensor, dtype=None, name=None)
给定一个张量tensor,该操作返回与所有元素设置为1的tensor具有相同类型和形状的张量

tf.fill(dims, value, name=None)
创建一个填充了标量值的张量
此操作创建一个张量,形状为dims,并用value填充

tf.constant(value, dtype=None, shape=None, name='Const')
创建一个常数张量

2、随机值张量

一般我们经常使用的随机函数Math.random()产生的是服从均匀分布的随机数,能够模拟等概率出现的情况
例如,仍一个骰子,1到6点的概率应该相等,但现实生活中更多的随机现象是符合正态分布的,例如20岁成年人的体重分布等

假如我们在制作一个游戏,要随机设定许许多多NPC的升高,如果还用Math.random(),生成从140到220之间的数字,就会发现每个身高段的人数是一样多的,这是比较无趣的,这样的世界也与我们习惯不同,现实应该是特别高和特别矮的都很少,处于中间的人数最多,这就要求随机函数符合正态分布

tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
从截断的正态分布中输出随机值,和tf.random_normal()一样,但是所有数字都不超过两个标准差
mean:均值
stddev:标准差

tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
从正态分布中输出随机值,由随机正态分布的数字组成的矩阵
mean:均值
stddev:标准差
 

相关文章:

  • haproxy集成国密ssl功能
  • 23-k8s中的控制器资源-DaemonSet控制器
  • PiflowX-组件UnionAll
  • 【C++】vector模拟实现+迭代器失效
  • SSH连接密码问题:原因、表现与解决方案
  • rtt的io设备框架面向对象学习-软件模拟rtc设备
  • WebGL中开发科学数据可视化应用
  • 2.20数据结构与算法学习日记(二叉树第一部分)
  • 利用MATLAB/Simulink仿真模型加速嵌入式控制系统的开发——以多学科融合的电机控制为例
  • ubuntu分辨率更改、开机被重置、ubuntu屏幕小
  • 【Git教程】(二)入门 ——关于工作区与版本库、版本提交、查看信息、克隆、推送与拉回的简单介绍 ~
  • Spring Boot项目怎么对System.setProperty(key, value)设置的属性进行读取加解密
  • 02 环境配置
  • 并发编程入门指南
  • Sectigo多域名ssl证书加域名贵吗
  • python3.6+scrapy+mysql 爬虫实战
  • Facebook AccountKit 接入的坑点
  • GitUp, 你不可错过的秀外慧中的git工具
  • JavaScript学习总结——原型
  • jdbc就是这么简单
  • vue的全局变量和全局拦截请求器
  • 前端自动化解决方案
  • 如何使用 JavaScript 解析 URL
  • 深度学习在携程攻略社区的应用
  • 数据结构java版之冒泡排序及优化
  • 微信小程序--------语音识别(前端自己也能玩)
  • 怎么把视频里的音乐提取出来
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 通过调用文摘列表API获取文摘
  • #pragma pack(1)
  • #pragma预处理命令
  • #传输# #传输数据判断#
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (第27天)Oracle 数据泵转换分区表
  • (分类)KNN算法- 参数调优
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)Sublime Text3配置Lua运行环境
  • (转)项目管理杂谈-我所期望的新人
  • .dwp和.webpart的区别
  • .Mobi域名介绍
  • .NET BackgroundWorker
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .net framework4与其client profile版本的区别
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .pub是什么文件_Rust 模块和文件 - 「译」
  • @test注解_Spring 自定义注解你了解过吗?
  • [ C++ ] 继承
  • [20190113]四校联考
  • [Android] Amazon 的 android 音视频开发文档