以前都自嘲什么码农, 搬砖啥的, 倒不如 "工具人" 这个词更加贴切. 我现在就是一个完完全全的工具人. 上班真的是没有太大乐趣, 如果不下班后培养自己的兴趣爱好, 或者技术精进的话, 那确实很快就变成社畜了, 虽然谈什么, 遭受社会的毒打啥的, 有些过分, 但确实, 这种日子也不算太友好. 要么就很容易消磨斗志, 甘于平庸, 要么就自怨自艾, 归根到底, 其实就是对于自己庸碌而不甘的无奈感...

不扯了...

数据类型

跟其他的编程一样, 也将 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)的更多相关文章

  1. javascript基础01

    javascript基础01 Javascript能做些什么? 给予页面灵魂,让页面可以动起来,包括动态的数据,动态的标签,动态的样式等等. 如实现到轮播图.拖拽.放大镜等,而动态的数据就好比不像没有 ...

  2. Androd核心基础01

    Androd核心基础01包含的主要内容如下 Android版本简介 Android体系结构 JVM和DVM的区别 常见adb命令操作 Android工程目录结构 点击事件的四种形式 电话拨号器Demo ...

  3. java基础学习05(面向对象基础01)

    面向对象基础01 1.理解面向对象的概念 2.掌握类与对象的概念3.掌握类的封装性4.掌握类构造方法的使用 实现的目标 1.类与对象的关系.定义.使用 2.对象的创建格式,可以创建多个对象3.对象的内 ...

  4. Linux基础01 学会使用命令帮助

    Linux基础01 学会使用命令帮助 概述 在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档:linux系统内置的帮助文档很详细,通常能解决我们的问题, ...

  5. 可满足性模块理论(SMT)基础 - 01 - 自动机和斯皮尔伯格算术

    可满足性模块理论(SMT)基础 - 01 - 自动机和斯皮尔伯格算术 前言 如果,我们只给出一个数学问题的(比如一道数独题)约束条件,是否有程序可以自动求出一个解? 可满足性模理论(SMT - Sat ...

  6. TensorFlow基础

    TensorFlow基础 SkySeraph  2017 Email:skyseraph00#163.com 更多精彩请直接访问SkySeraph个人站点:www.skyseraph.com Over ...

  7. LibreOJ 2003. 「SDOI2017」新生舞会 基础01分数规划 最大权匹配

    #2003. 「SDOI2017」新生舞会 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  8. TensorFlow基础笔记(0) 参考资源学习文档

    1 官方文档 https://www.tensorflow.org/api_docs/ 2 极客学院中文文档 http://www.tensorfly.cn/tfdoc/api_docs/python ...

  9. TensorFlow基础笔记(3) cifar10 分类学习

    TensorFlow基础笔记(3) cifar10 分类学习 CIFAR-10 is a common benchmark in machine learning for image recognit ...

  10. java基础 01

    java基础01 1. /** * JDK: (Java Development ToolKit) java开发工具包.JDK是整个java的核心! * 包括了java运行环境 JRE(Java Ru ...

随机推荐

  1. 丢掉WebView,使用JS+Rust开发跨端桌面应用-Deft

    简介 随着Web技术的发展,越来越多的跨端应用选择了WebView作为基础解决方案.诚然WebView让跨端应用开发变得简单了很多,极大的提高了开发效率,但是,WebView也存在着一些广为诟病的缺点 ...

  2. [BZOJ3811] 玛里苟斯 题解

    不得不说这题的确挺苟的. 注:下述"引理"表示: 对于长度为 \(n\) 的数组 \(V\),其线性基为 \(B\),定义 \(c_v=\bigoplus\limits_{a\in ...

  3. Linux操作文件IO

    Linux操作文件IO 参考自:[北京迅为]嵌入式linux开发指南_v1.1(i.MX6ULL) 文件 IO 是 Linux 系统提供的接口,针对文件和磁盘进行操作,不带缓存机制: 标准 IO 是 ...

  4. CH340区别

    CH340区别 CH340G  USB转串⼝,推出时间最早,需外挂晶振,应⽤最⼴SOP16 CH340C  USB转串⼝,内置晶振,引脚兼容CH340G SOP16 CH340E  USB转串⼝,内置 ...

  5. Python - [01] 简介

    人生苦短,我用Python 一.Python 是什么 Python是一个高层次的结合了解释型.编译型.互动性和面向对象的脚本语言. Python的设计具有很强的可读性,相比其他语言经常使用英文关键字, ...

  6. 手把手教你用 MicroPython 玩转幻尔串口舵机,代码+教程全公开

    原文链接: FreakStudio的博客 摘要 信号发生扩展板通过SPI接口生成可调频率和幅度的正弦波.方波和三角波,频率小于1MHz.支持幅度调节,提供原始和6倍放大输出接口.配备5阶低通滤波器.噪 ...

  7. nnUNet 论文解析

    一些废话: 毕业论文用 nnUNet 及其自带的功能大概做了一个医学图像的分割模块.现将自己在学习过程中看过的相关论文及相关能找到的笔记记录整理在此.一些浅显的内容目的是在为自己做记录的同时,也希望能 ...

  8. go 链表操作

    链表的特点和初始化 链表的特点 用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的) 结点 结点(node) 数据域 => 存储元素信息 指针域 => 存 ...

  9. 云服务器下如何部署Django项目详细操作步骤

    前期本人完成了"编写你的第一个 Django 应用程序",有了一个简单的项目代码,在本地window系统自测没问题了,接下来就想办法部署到服务器上,可以通过公网访问我们的Djang ...

  10. .NET8中gRPC的使用

    在现代分布式系统中,服务之间的通信是一个非常重要的环节.随着微服务架构的流行,服务之间的通信方式也在不断演进.gRPC作为一种高性能.跨语言的RPC框架,逐渐成为了我们的首选. 一.简介 gRPC 是 ...