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

本文介绍了TensorFlow中的张量概念,包括其与ndarray的关系,数据类型及其表示,张量的阶和形状,以及TensorFlow中进行基本运算、创建张量的方法,如常量、随机值生成,以及图的概念和使用。
摘要由CSDN通过智能技术生成

一、张量

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 tf

def tensorflow_demo():
    """
    TensorFlow的基本结构
    """

    # TensorFlow实现加减法运算
    a_t = tf.constant(2)
    b_t = tf.constant(3)
    c_t = a_t + b_t
    print("TensorFlow加法运算结果:\n", c_t)
    print(c_t.numpy())

    # 2.0版本不需要开启会话,已经没有会话模块了

    return None

def graph_demo():
    """
    图的演示
    """
    # TensorFlow实现加减法运算
    a_t = tf.constant(2)
    b_t = tf.constant(3)
    c_t = a_t + b_t
    print("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_new
        print("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)创建一个writer
    writer = tf.summary.create_file_writer("./tmp/summary")
    # 2)将图写入
    with writer.as_default():
        tf.summary.graph(new_g)

    return None

def 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 None

def 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 None

if __name__ == "__main__":
    # 代码1:TensorFlow的基本结构
    # tensorflow_demo()
    # 代码2:图的演示
    #graph_demo()
    # feed操作
    #session_run_demo()
    # 代码4:张量的演示
    tensor_demo()
python3 day01_deeplearning.py

tensor1:
 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:标准差
tensorflow2.0版本换成tf.random.normal()

三、张量的变换

1、类似于ndarray属性的修改
    类型的修改
        1)ndarray.astype(type)
        2)序列化到本地,ndarray.tostring()
    形状的修改
        1)ndarray.reshape(shape)
        2)ndarray.resize(shape)

2、类型改变
tf.string_to_number(string_tensor, out_type=None, name=None)
字符串转换成数字

tf.to_double(x, name='ToDouble')
转换成double

tf.to_float(x, name='ToFloat')
转换成float

tf.to_bfloat16(x, name='ToBFloat16')
转换成bfloat16

tf.to_int32(x, name='ToInt32')
转换成int32

tf.to_int64(x, name='ToInt64')
转换成int64

tf.cast(x, dtype, name=None)
通用类型转换(用这个),不会改变原始的tensor,返回新的改变类型后的tensor

3、形状改变
TensorFlow的张量具有两种形状变换,动态形状和静态形状
tf.reshape
tf.set_shape

静态形状:
一开始创建这个张量时候的形状
tf.Tensor.get_shape()——获取Tensor对象的静态形状
tf.Tensor.set_shape()——更新Tensor对象的静态形状

动态形状:
当运行图时的动态形状
tf.reshape(tf.Tensor, shape)——创建一个具有不同动态形状的新张量

关于动态形状和静态形状必须符合以下规则:
静态形状
(1)转换静态形状的时候,1-D到1-D,2-D到2-D,不能跨阶数改变形状
(2)对于已经固定或者设置静态形状的张量,不能再次设置静态形状
动态形状
(1)tf.reshape()动态创建张量时,张量的元素个数必须匹配

import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf

def tensorflow_demo():
    """
    TensorFlow的基本结构
    """

    # TensorFlow实现加减法运算
    a_t = tf.constant(2)
    b_t = tf.constant(3)
    c_t = a_t + b_t
    print("TensorFlow加法运算结果:\n", c_t)
    print(c_t.numpy())

    # 2.0版本不需要开启会话,已经没有会话模块了

    return None

def graph_demo():
    """
    图的演示
    """
    # TensorFlow实现加减法运算
    a_t = tf.constant(2)
    b_t = tf.constant(3)
    c_t = a_t + b_t
    print("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_new
        print("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)创建一个writer
    writer = tf.summary.create_file_writer("./tmp/summary")
    # 2)将图写入
    with writer.as_default():
        tf.summary.graph(new_g)

    return None

def 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 None

def 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)

    # 张量类型的修改
    l_cast = tf.cast(linear_squares, dtype=tf.float32)
    print("before:\n", linear_squares)
    print("l_cast:\n", l_cast)

    return None

if __name__ == "__main__":
    # 代码1:TensorFlow的基本结构
    # tensorflow_demo()
    # 代码2:图的演示
    #graph_demo()
    # feed操作
    #session_run_demo()
    # 代码4:张量的演示
    tensor_demo()
python3 day01_deeplearning.py

tensor1:
 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)
before:
 tf.Tensor(
[[ 4]
 [ 9]
 [16]
 [25]], shape=(4, 1), dtype=int32)
l_cast:
 tf.Tensor(
[[ 4.]
 [ 9.]
 [16.]
 [25.]], shape=(4, 1), dtype=float32)

四、张量的数学运算

算术运算符
基本数学函数
矩阵运算
reduce操作(降低维度)
序列索引操作

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《图解深度学习与神经网络:从张量tensorflow实现》是一本介绍深度学习和神经网络的图书,主要通过图解和实例展示了相关概念和实现方法。 首先,深度学习是一种机器学习方法,它通过构建多层神经网络来模拟人脑的工作原理,并通过大数据的学习来进行模型的训练和优化。深度学习在图像识别、语音识别、自然语言处理等领域有着广泛的应用。 该书从图解的角度出发,通过生动的插图和可视化的方式,向读者介绍了深度学习的基本概念。例如,它解释了神经元和神经网络的概念,展示了神经网络的结构和工作原理,并深入讲解了前向传播和反向传播的过程。 除了介绍基本概念,该书还通过具体的实例和代码示例,教读者如何使用tensorflow框架来实现深度学习模型。通过该书的学习,读者可以了解如何使用张量(tensor)这一基本数据结构,在tensorflow中构建神经网络模型,并通过优化算法进行训练和调优。同时,该书还涵盖了一些常见的深度学习模型,如卷积神经网络(CNN)和循环神经网络(RNN)等的实现方法。 总体而言,《图解深度学习与神经网络:从张量tensorflow实现》是一本适合初学者的入门教材。它通过图示和实例,直观地展示了深度学习和神经网络的基本概念和实现方法。读者可以通过学习该书,初步掌握深度学习的基础知识,并能够使用tensorflow框架实现简单的深度学习模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值