TensorFlow 基础 (01)
以前都自嘲什么码农, 搬砖啥的, 倒不如 "工具人" 这个词更加贴切. 我现在就是一个完完全全的工具人. 上班真的是没有太大乐趣, 如果不下班后培养自己的兴趣爱好, 或者技术精进的话, 那确实很快就变成社畜了, 虽然谈什么, 遭受社会的毒打啥的, 有些过分, 但确实, 这种日子也不算太友好. 要么就很容易消磨斗志, 甘于平庸, 要么就自怨自艾, 归根到底, 其实就是对于自己庸碌而不甘的无奈感...
不扯了...
数据类型
跟其他的编程一样, 也将 TensorFlow 看做一门 "编程语言" 来看待, 这样就能很好理解所谓的数据类型了. 即经常谈及的, 数值类型, 字符串, 布尔类型等.
数值类型
张量 (tensor) 是 tensorflow 的主要数据载体, 根据 维度 Dimension 可划分为:
- 标量 (Scalar) 单个的实数, 如 1, 2, 3, 4 等, 其 维度 Dimension 为 0, shape 为 [ ]
- 向量 (Vector) n 个实数的有序集合, 通过中括号包裹, Dimension 为 1, shape 为 [ n ]
- 矩阵 (Matrix) n 行 m 列 实数的集合, 如 [ [1,2], [3, 4] ], 维数为2, 长度不定, shape 为 [n, m ]
# 矩阵,有行, 列
| 1, 2|
| 3, 4|
- 张量 (Tensor) 即所有维度数 dim > 2 的数组都通常为 张量. 张量的每个维度, 也称作 **轴 (Axis) **.
一般维度代表了具体的物理意义. 比如 shape 为 [ 1, 2, 3, 4 ] 的张量共有 4 维, 如果表示图的话, 每个 维度 / 轴 分别表示图片的 数量, 高度, 宽度, 通道数(RGB) .
彩色图片的 shape 为 [ 2, 32, 32, 3] 表示 有 2张图片, 宽高都是32, 有3个通道(RGB)
一般将标量, 向量, 矩阵等也统称的 张量, 不做区分, 维度要自己来判断, 来看一波是如何创建的.
import tensorflow as tf
# 创建标量
# Python 的方式直接整
num = 666
tf_num = tf.constant(6.66)
print(type(num), type(tf_num), tf.is_tensor(tf_num))
<class 'int'> <class 'tensorflow.python.framework.ops.EagerTensor'> True
通过 print 的方式, 可以打印出 张量的 具体相关信息.
arr_01 = tf.constant([1, 2, 3, 6.66])
arr_02 = tf.constant([[1,2,3], [4,5,6.66]])
print(arr_01)
print(arr_02)
tf.Tensor([1. 2. 3. 6.66], shape=(4,), dtype=float32)
tf.Tensor(
[[1. 2. 3. ]
[4. 5. 6.66]], shape=(2, 3), dtype=float32)
非常直观哈, shape 表示 张量的形状, 还是要注意区分向量是 (n, ) 的 一维哦, dtype 表示数值精度, 张量对象的 numpy 方法可以返回Numpy.array 的类型数据, 就是为了, 方便导出和使用吧.
arr_02.numpy()
array([[1. , 2. , 3. ],
[4. , 5. , 6.66]], dtype=float32)
与标量不同在于, 向量的定义, 须通过 List 容器来传给 tf.constant( ).
tf_arr = tf.constant([1, 2, 3])
print(tf_arr)
print(tf_arr.shape)
tf.Tensor([1 2 3], shape=(3,), dtype=int32)
(3,)
同样, 定义矩阵, 传入一个, 二维数组即可呀.
tf_matrix = tf.constant([[1,2,3], [4,5,6]])
print(tf_matrix)
print(tf_matrix.shape) # [row, col]
tf.Tensor(
[[1 2 3]
[4 5 6]], shape=(2, 3), dtype=int32)
# 2 行 3列 的 shape
(2, 3)
同样, 3维的张量, 也是同样的定义哦.
# 3 维张量
tf_3D = tf.constant(
[
[
[1, 2],
[3, 4],
[5, 6],
[7, 8]
]
]
)
print(tf_3D)
tf.Tensor(
[[[1 2]
[3 4]
[5 6]
[7 8]]], shape=(1, 4, 2), dtype=int32)
字符串类型
我觉得字符串是编程中主要的处理对象吧, 但只有在数据科学这块, 数值才是成为了主要的处理对象,诸如业务数据, 图片数据, 文本向量化等, 但字符串, 始终还是占据非常, 非常重要的地位啊, 在编程上, 不过在 深度学习这块, 似乎就没那么重要了哦.
tf_str = tf.constant("Hello,world!")
print(tf_str)
tf.Tensor(b'Hello,world!', shape=(), dtype=string)
在 tf.strings 模块中, 提供了常见的字符串类型的工具函数, 如 大小写转换 lower() .., 拼接 join( ), 分割 split( ) 长度 length ( ) 等.
# 字符串 - 基本处理
print(tf.strings.lower(tf_str))
print(tf.strings.length(tf_str))
print(tf.strings.split(tf_str))
tf.Tensor(b'hello,world!', shape=(), dtype=string)
tf.Tensor(12, shape=(), dtype=int32)
tf.Tensor([b'Hello,world!'], shape=(1,), dtype=string
不整了, 就这样吧, 深度学习中, 还是张量的天下, 字符串这块, 使用上就比较低了呀, 不展开了.
布尔类型
在创建布尔类型标量时, 只需要将 Python 的 True 和 False 传递给 tf.constant( ) 即可. 但值得注意的是,tf 的布尔 和 Pyhton 的布尔是不等价(对象)的哦.
tf_true = tf.constant(True)
tf_bool_lst = tf.constant([True, False, False])
print(tf_true)
print(tf_bool_lst)
print(tf_true) is True
tf.Tensor(True, shape=(), dtype=bool)
tf.Tensor([ True False False], shape=(3,), dtype=bool)
False
小结
- tensorflow 的基本数据类型, 数值, 字符串, 布尔值等, 数值这块是主要探讨的内容.
- 重点是对 张量 tensor 有直观认识, 包括 标量, 向量, 矩阵, 张量.. 理解 维度 dim 和 形状 shape 的意义
- 结合 numpy 数组来理解张量, 就会好很多, 这些知识果然都是相关联的, 在数据科学这块
TensorFlow 基础 (01)的更多相关文章
- javascript基础01
javascript基础01 Javascript能做些什么? 给予页面灵魂,让页面可以动起来,包括动态的数据,动态的标签,动态的样式等等. 如实现到轮播图.拖拽.放大镜等,而动态的数据就好比不像没有 ...
- Androd核心基础01
Androd核心基础01包含的主要内容如下 Android版本简介 Android体系结构 JVM和DVM的区别 常见adb命令操作 Android工程目录结构 点击事件的四种形式 电话拨号器Demo ...
- java基础学习05(面向对象基础01)
面向对象基础01 1.理解面向对象的概念 2.掌握类与对象的概念3.掌握类的封装性4.掌握类构造方法的使用 实现的目标 1.类与对象的关系.定义.使用 2.对象的创建格式,可以创建多个对象3.对象的内 ...
- Linux基础01 学会使用命令帮助
Linux基础01 学会使用命令帮助 概述 在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档:linux系统内置的帮助文档很详细,通常能解决我们的问题, ...
- 可满足性模块理论(SMT)基础 - 01 - 自动机和斯皮尔伯格算术
可满足性模块理论(SMT)基础 - 01 - 自动机和斯皮尔伯格算术 前言 如果,我们只给出一个数学问题的(比如一道数独题)约束条件,是否有程序可以自动求出一个解? 可满足性模理论(SMT - Sat ...
- TensorFlow基础
TensorFlow基础 SkySeraph 2017 Email:skyseraph00#163.com 更多精彩请直接访问SkySeraph个人站点:www.skyseraph.com Over ...
- LibreOJ 2003. 「SDOI2017」新生舞会 基础01分数规划 最大权匹配
#2003. 「SDOI2017」新生舞会 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- TensorFlow基础笔记(0) 参考资源学习文档
1 官方文档 https://www.tensorflow.org/api_docs/ 2 极客学院中文文档 http://www.tensorfly.cn/tfdoc/api_docs/python ...
- TensorFlow基础笔记(3) cifar10 分类学习
TensorFlow基础笔记(3) cifar10 分类学习 CIFAR-10 is a common benchmark in machine learning for image recognit ...
- java基础 01
java基础01 1. /** * JDK: (Java Development ToolKit) java开发工具包.JDK是整个java的核心! * 包括了java运行环境 JRE(Java Ru ...
随机推荐
- 【忍者算法】从公路跑步到链表成环:探索环形链表检测|LeetCode第141题 环形链表
从公路跑步到链表成环:探索环形链表检测 生活中的环形 想象两个人在环形跑道上跑步,一个跑得快,一个跑得慢.如果他们一直跑下去,快的跑者一定会从后面追上慢的跑者.这就是我们今天要讨论的环形链表问题的现实 ...
- Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
Deepseek卡的问题已经有几周了,还有同学没有解决这个问题? 今天就来教大家如何白嫖阿里云的Deepseek-R1满血版,新用户享受100万token额度,相当的富裕,可以随便用了.并且还配用AP ...
- Bean的原始版本与最终版本不一致?记一次Spring IOC探索之旅
前言 在这个信息技术发展迅速的时代,万万没想到,Spring自2003年发展至今,仍是技术选型中的首选,某些项目甚至有Spring全家桶的情况. 在Java开发者面试当中,Spring的原理也常被面试 ...
- Netty - [01] 概述
题记部分 一.介绍 Netty 是由JBOSS提供的一个Java开源框架,现为Github上的独立项目. Netty是一个异步的.基于事件驱动的网络应用框架,用以快速开发高性能.高可靠性的网络I/O程 ...
- 基于Maxmspjitter的基础【pixel shader】绘制模板Patcher
间断性接触Maxmspjitter已经有6个年头了,是时候总结一些常用的.基础的知识以及它的应用,不过笔者自认为还是处于初学者阶段,望高人多多指教. 开始 这一次就以jitter模块中通用处理图像节点 ...
- Major、Minor、Build Number及Revision 版本号注解含义
版本号 版本号由二至四个部分组成:主版本号.次版本号.内部版本号和修订号. 主版本号和次版本号两个部分为必选,内部版本号和修订号两个部分为可选.只有在未定义内部版本号部分时,修订号部分才为可选.所有定 ...
- windows 稀疏文件 (sparse file) 的一个实用场景——解决 SetEndOfFile 占据磁盘空间引入的性能问题
前言 之前写过一篇文章说明文件空洞:<[apue] 文件中的空洞>,其中提到了 windows 稀疏文件是制造空洞的一种方式,但似乎没什么用处,如果仅仅处理占用磁盘空间的场景,使用SetE ...
- 数据、信息、知识、智慧:AI时代我们该如何思考?
时代的浪潮滚滚向前,AI技术的演进正悄然改变着我们认知世界和创造价值的方式.从数据.信息到知识.智慧,从大数据到大模型,从单一智能体到多智能体协作,这是一场深刻的认知革命,也是生产力解放的新纪元. A ...
- Docker swarm集群增加节点
docker swarm初始化 docker swarm init docker swarm 增加节点 在已经初始化的机器上执行:# docker swarm join-token manager T ...
- Delphi 禁止重复运行程序的方法
第一种方法,使用"过程调用" procedure Del; // 自定义过程 var Mutex: THandle; begin Mutex := CreateMutex(nil, ...