- 前言
- 一、张量(Tensor)
- 1.张量的维数(阶)
- 2. 张量类型类型
- 3.创建张量
- 4.张量改变
- 二、数据类型
- 1.数值型
- 2.字符串型
- 3.布尔型
- 三、变量OP
- 1.创建变量
- 2.修改命名空间
- 总结
张量(tensor):多维数组或列表,其中阶表示张量的维数,即张量可以表示0阶到n阶的数组或列表
1.张量的维数(阶)标量 一个数字 —> 0阶张量 向量 一维数组 [2, 3, 4] —> 1阶张量 矩阵 二维数组 [[2, 3, 4], [2, 3, 4]] —> 2阶张量
维度要看张量的最左边有多少个左中括号,有n个,则这个张量就是n维张量
张量的形状以 [D0, D1, … Dn-1] 的形式表示,D0 到Dn 是任意的正整数 在形状的中括号中有多少个数字,就代表这个张量是多少维的张量
形状的第一个元素要看张量最外边的中括号中有几个元素,被最外边的中括号里边的内中括号括起来的所有数据算作一个元素)被逗号隔开,有n1个则这个张量就是n1维的,形状的第一个元素就是n1; 形状的第二个元素要看张量中最左边的第二个中括号中有几个被逗号隔开的元素,有n2个则shape的第二个元素就是n2;形状的第二个元素之后的第3,4…n个元素依次类推,分别看第n个中括号中有几个元素即可
1 # 形状为[]
[1,2,3] # 形状为[3]
[[1,2],[3,4]] # 形状为[2,2]
[[[1,2],[3,4]],[[1,2],[3,4]]] # 形状为[2,2,2]
2. 张量类型类型
数据类型类型 描述DT_FLOAT tf.float3232 位浮点数.DT_DOUBLE tf.float6464 位浮点数.DT_INT64 tf.int6464 位有符号整型.DT_INT32 tf.int3232 位有符号整型.DT_INT16 tf.int1616 位有符号整型.DT_INT8 tf.int88 位有符号整型.DT_UINT8 tf.uint88 位无符号整型.DT_STRING tf.string可变长度的字节数组.每一个张量元素都是一个字节数组.DT_BOOL tf.bool布尔型.DT_COMPLEX64tf.complex64 由两个32位浮点数组成的复数:实数和虚数.DT_QINT32 tf.qint32用于量化Ops的32位有符号整型.DT_QINT8 tf.qint8用于量化Ops的8位有符号整型.DT_QUINT8 tf.quint8用于量化Ops的8位无符号整型.
对于数值类型的张量,可以保持为不同字节长度的精度,Bit 位越长,精度越高,同时占用的内存空间也就越大,在创建张量时,可以指定张量的保存精度
3.创建张量创建固定值张量 (1)tf.zeros ,值为0
tf.zeros(shape, dtype=tf.float32, name=None)
print(tf.zeros([2,2]))
# Tensor("zeros:0", shape=(2, 2), dtype=float32)
'''
[[2,2]
[2,2]]
'''
注意:这里传入的参数是是这个数据的形状
(2)tf.ones ,值为1
tf.ones(shape, dtype=tf.float32, name=None)
(3)tf.constant
tf.constant(value, dtype=tf.float32, name='Const')
tensor1 = tf.ones(shape=[5,6])
tensor2 = tf.constant([1,3,5,7])
tensor3 = tf.constant([[4],[9],[16],[25]],dtype = tf.int32) # 指定默认类型
print(tensor1.numpy())
print(tensor2.numpy())
print(tensor3.numpy())
'''
[[1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1.]]
[1 3 5 7]
[[ 4]
[ 9]
[16]
[25]]
'''
4.张量改变
(1)类型变化
tf.string_to_number(string_tensor, out_type=None, name=None) tf.to_double(x, name=‘ToDouble’) tf.to_float(x, name=‘ToFloat’) tf.to_bfloat16(x, name=“ToBFloat16”) tf.to_int32(x, name=‘Tolnt32’) tf.to_int64(x, name=‘Tolnt64’)
但是,这些都不常用,使用最多的是:tf.cast(x, dtype, name=None),通用类型转换,张量类型的修改:不会改变原始的Tensor
(2)形状变化 tensorflow的张量具有两种形状变换,动态形状和静态形状
tf.reshape:改变动态形状 tf.set_shape:改变静态形状
注:只有在形状还没有完全固定下来的情况下才可以改变,转换形状的时候,只能从一维到一维,二维到二维,不能跨维度改变形状
二、数据类型Tensorflow主要有3种数据类型:数值型,字符串型,布尔型
1.数值型标量(Scalar) :单个的实数,如1,2,3
向量(Vector) :n个实数的有序集合,通过中括号包裹,如[1,2]
矩阵(Matrix):n 行 m 列实数的有序集合,如 [ [1,2],[3,4] ]
如果要使用TensorFlow 提供的功能函数, 须通过 TensorFlow 的方式去创建张量
import numpy as np
import tensorflow as tf
a = 1.2 # python创建变量
b = tf.constant(1.2) # tensorflow 创建张量
c = tf.constant([[1,2],[23,0]])
d = c.numpy # 将张量数据导出为numpy格式
print(type(a),type(b),tf.is_tensor(b),end='\n')
print(c,d,sep='\t',end='\n')
print(c.shape)
"""
True
tf.Tensor(
[[ 1 2]
[23 0]], shape=(2, 2), dtype=int32)
(2, 2)
"""
创建张量:tf.constant(张量内容,dtype=数据类型(可选))
2.字符串型使用constant, 通过传入字符串对象即可创建字符串类型的张量
strings = tf.constant("Tensorflow")
print(strings,end='\n')
print(tf.strings.lower(strings))
'''
tf.Tensor(b'Tensorflow', shape=(), dtype=string)
tf.Tensor(b'tensorflow', shape=(), dtype=string)
'''
在 tf.strings 模块中提供了常见的字符串类型的工具函数,lower(),join(), length(), split()
3.布尔型布尔类型的张量需要传入 Python 语言的布尔类型数据,转换成 TensorFlow 内部布尔型即可 注:TensorFlow 的布尔类型和 Python 语言的布尔类型并不等价,不能通用
# 创建布尔类型张量
bools = tf.constant([True])
print(bools is True)
print(bools)
'''
False
tf.Tensor([ True], shape=(1,), dtype=bool)
'''
三、变量OP
1.创建变量
变量的特点:存储持久化,可修改值,可指定被训练
为了区分需要计算梯度信息的张量与不需要计算梯度信息的张量,增加了一种专门的数据类型来支持梯度信息的记录:tf.Variable
tf.Variable 类型在普通的张量类型基础上添加了 name,trainable 等属性来支持计算图的构建,通过 tf.Variable()函数可以将普通张量转换为待优化张量
由于梯度运算会消耗大量的计算资源,而且会自动更新相关参数,对于不需要的优化的张量,如神经网络的输入 X,不需要通过 tf.Variable 封装,但是对于需要计算梯度并优化的张量,如神经网络层的W 和𝒃,需要通过 tf.Variable 包裹以便 TensorFlow 跟踪相关梯度信息
tf.Variable(initia_value=None, trainable=True, collections=None, name=None)
initial_value:初始化的值 trainable:是否被训练 collections:新变量将添加到列出的图的集合中collections,默认为[GraphKeys.GLOBAL_VARIABLES],如果trainable是True变量也被添加到图形集合GraphKeys.TRAINABLE_VARIABLES
注:变量需要显示初始化,才能运行值
# 创建变量
a1 = tf.Variable(3)
b1 = tf.Variable(2)
c1 = tf.add(a1,b1)
print(a1)
print(b1)
print(c1)
print("...........")
# 初始化变量
init = tf.global_variables_initializer()
# 开启会话
with tf.Session() as sess:
# 运行初始化
sess.run(init)
a1, b1, c1 = sess.run([a1, b1, c1])
print(c1)
'''
Tensor("Add:0", shape=(), dtype=int32)
...........
5
'''
2.修改命名空间
返回上下文管理器,用于定义创建变量(或层)的操作, 修改变量的命名空间, 注意:scope name has to match the following pattern: ^ [A-Za-z0-9.][ A-Za-z0-9_.\/>-]*$ 要符号正则表达式
def variable_scope(name_or_scope,
default_name=None,
values=None,
initializer=None,
regularizer=None,
caching_device=None,
partitioner=None,
custom_getter=None,
reuse=None,
dtype=None,
use_resource=None)
# 创建变量
with tf.variable_scope("my_scope"):
a1 = tf.Variable(3)
b1 = tf.Variable(2)
with tf.variable_scope("your_scope"):
c1 = tf.add(a1, b1)
print(a1)
print(b1)
print(c1)
print("...........")
# 初始化变量
init = tf.global_variables_initializer()
# 开启会话
with tf.Session() as sess:
# 运行初始化
sess.run(init)
a1, b1, c1 = sess.run([a1, b1, c1])
print(c1)
'''
Tensor("your_scope/Add:0", shape=(), dtype=int32)
'''
...........
5
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?