深度学习之基本知识储备(一)【图、会话、张量和基本运算】

    科技2024-06-24  76

    1.深度学习

    深度学习,如深度神经网络、卷积神经网络和递归神经网络已被应用计算机视觉、语音识别、图像识别(卷积神经网络)、自然语言处理(循环神经网络)、音频识别与生物信息学等领域并获取了极好的效果。

    1.1 深度学习之运行速度

    因为深度学习涉及到的数据量非常的大,特征非常多,再加上算法设计的本身比较复杂,所以计算需要等很长时间去优化。

    cpu: 运⾏操作系统,吹处理业务 计算能⼒不是特别突出。gpu:专⻔为计算设计的

    所以,tensorflow的版本分别为cpu和gpu两个版本。

    2. tensorflow图的结构

    2.1 tensorflow实现加法运算

    import tensorflow as tf import os os.environ['TF_CPP_MIN_LOG_LEVEL']='2' # 去掉警告用的 # 实现一个加法运算 a = tf.constant(5.0) b = tf.constant(6.0) sum1 = tf.add(a, b) print(sum1) # 只要有会话的上下文环境,就可以方便的使用eval() with tf.Session() as sess: print(sess.run(sum1)) # 等价于print(sum1.eval())

    输出的结果为:

    2.2 数据流图

    框架 计算密集型:tensorflow(cpu计算)IO密集型:django,scrapy(磁盘操作,HTTP请求等)

    2.3 tensorflow进阶

    2.3.1 图

    图默认已经注册,一组表示 tf.Operation 计算单位的对象和tf.Tensor表示操作之间流动的数据单元的对象。获取调用: tf.get_default_graph()op、sess或者tensor 的graph属性。 import tensorflow as tf import os os.environ['TF_CPP_MIN_LOG_LEVEL']='2' # 去掉警告用的 # 实现一个加法运算 a = tf.constant(5.0) b = tf.constant(6.0) sum1 = tf.add(a, b) # 默认的这张图,相当于是给程序分配一段内存 graph = tf.get_default_graph() print(graph)) with tf.Session() as sess: print(sess.run(sum1)) print(a.graph) print(sum1.graph) print(sess.graph)

    输出的结果为:

    2.3.2 图的创建

    import tensorflow as tf import os os.environ['TF_CPP_MIN_LOG_LEVEL']='2' # 去掉警告用的 # 【tensorflow中需要某个东西时,需要使用上下文环境】 # 创建一张图包含了一组op和tensor, # op:只要使用tensorflow的API定义的函数都是OP # tensor:就指代的是数据 g = tf.Graph() print(g) with g.as_default(): c = tf.constant(11.0) print(c.graph)

    2.3.3 Session会话

    会话把tensorflow框架分成了前端系统和后端系统:

    前端系统:定义图的结构后端系统:运算图结构
    tf.Session() 运行TensorFlow操作图的类,使用默认注册的图(可以指定运行图)
    会话资源

    会话可能拥有很多资源,如 tf.Variable,tf.QueueBase和tf.ReaderBase,会话结束后需要进行资源释放。

    sess = tf.Session() sess.run(…) sess.close()使用上下文管理器 with tf.Session() as sess: sess.run(…)

    config=tf.ConfigProto(log_device_placement=True)

    交互式:tf.InteractiveSession()

    2.3.4 会话的run()方法

    import tensorflow as tf import os os.environ['TF_CPP_MIN_LOG_LEVEL']='2' # 去掉警告用的 # 实现一个加法运算 a = tf.constant(5.0) b = tf.constant(6.0) sum1 = tf.add(a, b) print(sum1) with tf.Session() as sess: print(sess.run([a,b,sum1]))

    输出的结果为: 注意: sess.run([a,b,sum1])不要写成sess.run(a,b,sum1)他会被误认为传递的3个参数。

    2.3.4.1 有关重载的运算符运行案例

    # 错误案例 # 不是op不能运行 var1 = 2.0 var2 = 3 sum2 = var1 + var2 with tf.Session() as sess: print(sess.run([sum2]))
    上述代码不能运行
    # 正确案例 # 不是op不能运行 var1 = 2.0 a = tf.constant(5.0) # 有重载的机制,默认会给运算符重载成op类型 sum2 = var1 + a with tf.Session() as sess: print(sess.run([sum2]))

    输出的结果为:正确

    2.3.4.2 placeholder作为占位符的使用[Tensorflow Feed操作]

    语法:placeholder提供占位符,run时候通过feed_dict指定参数

    # placeholder是一个占位符,feed_dict一个字典 plt = tf.placeholder(tf.float32, [None, 3]) # 第二个参数是shape,这里为2行3列的一个二位数组 with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess: print(sess.run(plt, feed_dict={plt: [[1, 2, 3], [4, 5, 36], [2, 3, 4]]}))

    输出的结果为:

    2.3.5 张量的定义

    import tensorflow as tf import os os.environ['TF_CPP_MIN_LOG_LEVEL']='2' a = tf.constant(5.0) # placeholder是一个占位符,feed_dict一个字典 plt = tf.placeholder(tf.float32, [2, 3, 4]) print(plt) with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess: print(a.graph) print("---------") print(a.shape) print(plt.shape) print("-------") print(a.name) print("-------") print(a.op) # tensorflow:打印出来的形状表示 # 0维:() 1维:(5) 2维:(5,6) 3维:(2,3,4)

    输出的结果为:

    2.3.6 张量的动态形状与静态形状

    动态性状和静态形状:在于有没有⽣成⼀个新的张量数据.

    TensorFlow中,张量具有静态形状和动态形状

    静态形状: 创建一个张量或者由操作推导出一个张量时,初始状态的形状 tf.Tensor.get_shape:获取静态形状 tf.Tensor.set_shape():更新Tensor对象的静态形状,通常用于在不能直接推 断的情况下

    动态形状: 一种描述原始张量在执行过程中的一种形状(动态变化) tf.reshape:创建一个具有不同动态形状的新张量

    # 形状的概念 # 静态形状和动态性状 # 对于静态形状来说,一旦张量形状固定了,不能再次设置静态形状, 不能夸维度修改 只可以1D->1D 2D->2D # 动态形状可以去创建一个新的张量,改变时候一定要注意元素数量要匹配 1D->2D 1->3D plt = tf.placeholder(tf.float32, [None, 2]) print(plt) plt.set_shape([3, 2]) print(plt) # plt.set_shape([2, 3]) # 不能再次修改 打印错误 plt_reshape = tf.reshape(plt, [2, 3]) # 通过reshape改变张量的形状 print(plt_reshape) with tf.Session() as sess: pass

    输出的结果为:

    要点

    2.3.7 张量的运算

    创建随机张量

    Processed: 0.012, SQL: 8