TensorFlow学习笔记——概述、安装、常用函数

  •  Google Brain 团队为深度神经网络(DNN)开发的功能强大的开源软件库
  • 开源深度学习库 TensorFlow 允许将深度神经网络的计算部署到任意数量的 CPU 或 GPU 的服务器、PC 或移动设备上,且只利用一个 TensorFlow API。
  • 学习网站:http://c.biancheng.net/tensorflow/
  • 学习视频:
    •  
  • 一.概述
    • 什么是机器学习:
      • 机器学习是一种统计学方法,计算机利用已有数据,得出某种模型,再利用此模型预测结果。随着经验的增加,效果会变化。是人工智能的子集
      • 三要素:数据,算法,算力
    • 什么是深度学习:
      • 是深层次神经网络,是机器学习的一种实现方法,是机器学习的子集。
  • 二. tensorflow神经网络基础
    • 基于Tensorflo的NN: 用张量表示数据,用计算图搭建神经网络,用绘画执行计算图,优化线上的权重(参数),得到模型。
    • 张量(tensor): 多维数组, 阶 : 张量的维数 (张量可以表示0阶到n阶数组)
      • 维数 阶 名字 例子
      • 0-D 0 标量 scalar s=1 2 3
      • 1-D 1 向量 vector v=[1,2, 3]
      • 2-D 2 矩阵 matrlx m=[[1, 2 , 3],[4,5,6]]
      • n-D n 张量 tensor t=[[[...]]]
    • 计算图(Graph): 搭建神经网络的计算过程,只搭建,不运算。
    • 会话(Session): 执行计算图中的节点运算
    • 神经网络的实现过程:
      • 1. 准备数据集,提取特征,作为输入喂给神经网络
      • 2. 搭建NN结构,从输入到输出(先搭建计算图,再用会话执行)
        • (NN前向传播算法--> 计算输出)
      • 3. 大量特征数据为给NN,迭代优化NN参数
        • (NN反向传播算法 --> 优化参数训练模型)
      • 4. 使用训练好的模型预测和分类
    • 前向传播:搭建模型,实现推理(以全连接网络为例 )
      • eg. 生成一批零件将体积x1和重量x2为特征输入NN, 通过NN后输出一个数值。
    • 反向传播: 训练模型参数,在所有参数上用梯度下降,使NN模型再训练数据上的损失函数最小
    • 损失函数(loss): 预测值(y)与已知答案(y_)的差距
    • 均方误差MSE:MSE(y_,y)=
      • loss=tf.reduce_mean(tf.square(y_-y))
    • 反向传播训练方法:以减小loss值为优化目标
      • 学习率:决定参数每次更新的幅度
  • 三、安装
    • 前提是系统安装了 Python 2.5 或更高版本
  • 四、Tensorflow 结构
    • tf程序通常 被组织成一个构建图阶段和一个执行图阶段。
    • 在构建阶段,数据与操作的执行步骤被描述成一个图。
    • 在执行阶段,使用会话执行构建好的图中的操作。
    • 图和会话:
      • 图:这是tf将计算表示为指令之间的依赖关系的一种表示法
      • 会话: tf跨一个或多个本地或远程设备运行数据流图的机制
    • 张量:tf中的基本数据对象
    • 节点:提供图当中执行的操作
    • 4.1 数据流图:
      • TensorFlow是一个采用数据流图,用于数值计算的开源框架
      • 节点(Operation)在途中表示数学操作,线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)
      • 4.1.1 什么是图结构:
        • 图包含了一组tf.Operation的操作
      • 4.1.2 图操作
        • 默认图
          • 查看图:tf.get_default_graph()或 .graph直接查看属性
        • 创建图
          • new_g = tf.Graph()自定义创建图
          • 定义数据和操作
            • with new_g.as_default():
              • a_new = tf.constant(20)
              • b_new = tf.constant(20)
              • print(a_new + b_new)
      • 4.1.3 TensorBoard可视化
        • 1. 数据序列化 -events文件
          • TensorBoard通过读取TensorFlow的事件文件来运行,需要将数据生产一个序列化的summery protouf对象。
            • tf.summary.FileWriter("./tmp/summary", graph=sess.graph)
        • 2. 启动TensorBoard
          • tensorboard --logdirs"./tmp/summary"
    • 5. Operation的介绍
      • 定义操作
  • 五、定义张量
    • 张量的形状
      • shape=(3, 3, 3) # shape中,隔开了几个数字就是几维
    • 定义一个张量
      • tf.constant([[1,2]], dtype=tf.int64)
    • 将numpy数据类型转为Tensor
      • b = np.arange(0,5)
      • tf.convert_to_tensor(b, dtype=tf.int64)
    • 创建全为0的张量
      • tf.zeros(维度) # tf.zeros([3,2]) 创建一个二维的张量,每维里3个元素,元素全为0
    • 创建全为1的张量
      • tf.ones(维度)
    • 创建全为指定值的张量
      • tf.fill(维度, 指定值)
    • 生成正态分布的随机数,默认均值为0,标准差为1
      • tf.random.normal(维度, mean=均值, stddev=标准差)
    • 生成截断式正态分布的随机数
      • tf.random.truncated_normal(维度, mean=均值, stddev=标准差)
    • 生成均匀分布随机数[minval, maxval]
      • tf.random.uniform(维度, minval=最小值, maxval=最大值)
  • 六、常用函数
    • 强制tensor转换为该数据类型
      • tf.cast(张量名, dfype=数据类型)
      • 例:
        • x1 = tf.constant([1.,2.,3.], dtype=tf.float64)
        • tf.cast(x1, tf.int32)
    • 计算张量维度上元素的最小值
      • tf.reduce_min(张量名)
    • 计算张量维度上元素的最大值
      • tf.reduce_max(张量名)
    • 理解axis
      • 在一个二维张量或数组中,可以通过调整axis等于0或1控制执行维度。
      • axis=0代表跨行(经度, down),而axis=1代表跨列(纬度,across)
      • 如果不指定axis,则所有元素参与计算。
      • 比如:
        • tf.reduce_mean(张量名, axis=操作轴) # 通过axis控制操作的维度求均值
    • tf.Variable()
      • 将变量标记为“可训练”,被标记的变量会在反向传播中记录梯度信息。神经网络训练中,常用该函数标记待训练参数。
      • tf.Variable(初始值)
        • w= tf.Variable(tf.random.normal([2,2],mean=0,stddev=1)) # 将随机生成的符合正态分布的张量标记为“可训练”
    • 数学运算
      • 四则运算tf.add, tf.subtract, tf.multiply, tf.divide
        • 只有维度相同的张量才可以进行四则运算
      • 平方、次方、开方 tf.square, tf.pow(张量, n次方) , tf.sqrt
      • 矩阵乘:tf.matmul(矩阵1, 矩阵2)
    • 把标签和特征进行配对的函数
      • data = tf.data.Dataset.from_tensor_slices((输入特征, 标签))
        • features = tf.constant([1,2])
        • labels = tf.constant([0,1])
        • data = tf.data.Dataset.from_tensor_slices((features,labels))
        • print(data)
        • for e in data:
        • print(e)
      • Numpy 和Tensor格式都可以用该语句读入数据
    • tf.GradientTape
      • with结构记录计算过程,gradient求出张量的梯度
        • with tf.GradientTape() as tape:
          • 计算过程
        • grad=tape.gradient(函数, 对谁求导)
    • tf.one_hot 独热编码
      • 在分类问题中,常用独热码做标签,
        • 标记类别:1 是,0 非
      • tf.one_hot(待转换数据, depth=几分类)
    • tf.nn.softmax(x)
      • 使n分类的n个输出符合概率分布
    • assign_sub
      • 赋值操作,更新参数的值并返回。
      • 调用assign_sub前,先用tf.Variable定义变量w为可训练(可自更新)
      • w.assign_sub(w要自减的内容)
        • w = tf.Variable(4)
        • w.assign_sub(1) # w-=1
    • tf.argmax(张量, axis=操作轴)
      • 返回沿指定维度最大值的索引
  •  
posted @ 2022-06-16 16:01  清风_Z  阅读(53)  评论(0编辑  收藏  举报