深度學習思維導圖(基於TensorFlow框架)

深度學習

深度學習介紹

深度學習與機器學習的區別

  • 特徵提取方面
    • 機器學習:特徵工程步驟是手動完成的,需要大量的專業領域知識
    • 深度學習:通常由多個層組成,他們通常將更簡單的模型組合在一起,將數據從一層傳遞到另一層來構建更復雜的模型。通過大量數據自動得出模型,不需要人工特徵提取環節
  • 數據量和計算i性能要求方面
    • 機器學習:隨着數據量的增加,模型性能會有瓶頸
    • 深度學習:隨着數據量的增加,模型的性能會越來越好,但是深度學需要大量的算力
  • 算法代表方面
    • 機器學習:樸素貝葉斯、決策樹等
    • 深度學習:神經網絡

深度學習的應用場景:

  • 圖像識別
  • 自然語言處理
  • 語音技術

深度學習框架介紹

  • PyTorch和Torch 更適用於學術研究;TensorFlow、Caffe、Caffe2 更適用於工業界的生產環境部署
  • Caffe 適用於處理靜態圖像; Torch和PyTorch 更適用於動態圖像;TensorFlow 在兩種情況下都很實用
  • TensorFlow 和 Caffe 可在移動端使用

TensorFlow 的特點

  • 高度靈活
  • 語言多樣
  • 設備支撐
  • TensorFlow 可視化

TensorFlow 的安裝

  • CPU 版本
  • GPU 版本
  • 兩個版本的比較
    • CPU:諸葛亮
      • 綜合能力比較強
      • 核芯的數量更少
      • 更適用於處理連續性(sequential)任務。
    • GPU:臭皮匠
      • 專做某一個事情很好
      • 核芯的數量更多
      • 更適用於並行(parallel)任務

TensorFlow 框架介紹

TF 數據流圖

  • TensorFlow結構分析
    • 構建圖階段
      • 流程圖:定義數據(張量Tensor)和操作(節點Op)
    • 執行圖階段
      • 調用各方資源,將定義好的數據和操作運行起來
  • 數據流圖介紹
    • Tensor - 張量 - 數據
    • Flow - 流動

圖與TensorBoard

  • 什麼是圖結構
    • 數據(Tensor) + 操作(Operation)
  • 圖相關操作
    • 默認圖
      • 查看默認圖的方法
        • 調用方法
          • 用tf.get_default_graph()
        • 查看屬性
          • .graph
    • 創建圖
      • new_g = tf.Graph()
        with new_g.as_default():
        定義數據和操作
  • TensorBoard:可視化學習
    • 數據序列化-events文件
      • tf.summary.FileWriter(path, graph=sess.graph)
    • 啓動tensorboard
  • OP
    • 數據:Tensor對象
      操作:Operation對象 - Op
    • 常見OP
      • 操作函數 & 操作對象
        tf.constant(Tensor對象) 輸入Tensor對象 -Const-輸出 Tensor對象
        tf.add(Tensor對象1, Tensor對象2) 輸入Tensor對象1, Tensor對象2 - Add對象 - 輸出 Tensor對象3
    • 指令名稱
      • 一張圖 - 一個命名空間

會話

  • tf.Session:用於完整的程序當中
    tf.InteractiveSession:用於交互式上下文中的TensorFlow ,例如shell
  • 會話掌握資源,用完要回收 - 上下文管理器
  • 初始化會話對象時的參數
    • graph=None
      target:如果將此參數留空(默認設置),
      會話將僅使用本地計算機中的設備。
      可以指定 grpc:// 網址,以便指定 TensorFlow 服務器的地址,
      這使得會話可以訪問該服務器控制的計算機上的所有設備。
      config:此參數允許您指定一個 tf.ConfigProto
      以便控制會話的行爲。例如,ConfigProto協議用於打印設備使用信息
  • run(fetches,feed_dict=None)
  • feed操作
    • a = tf.placeholder(tf.float32, shape=)
      b = tf.placeholder(tf.float32, shape=)

張量Tensor

  • 張量(Tensor)
    • 張量 在計算機當中如何存儲?
      • 標量 一個數字 0階張量
        向量 一維數組 [2, 3, 4] 1階張量
        矩陣 二維數組 [[2, 3, 4], 2階張量
        [2, 3, 4]]
        ……
        張量 n維數組 n階張量
    • 張量的類型(dtype)
      • 創建張量的時候,如果不指定類型
        默認 tf.float32
        整型 tf.int32
        浮點型 tf.float32
    • 張量的階(shape)
  • 創建張量的指令
    • tf.zeros(shape=( * , * ))
    • tf.ones(shape = ( * , * ))
    • tf.canstant()
  • 張量的變換
    • 類型的修改
      • 1)ndarray.astype(type)
        tf.cast(tensor, dtype = *)
        不會改變原始的tensor
        返回新的改變類型後的tensor
        2)ndarray.tostring()
    • 形狀的修改
      • 靜態形狀 - 初始創建張量時的形狀
        • 什麼情況下才可以改變/更新靜態形狀?
          只有在形狀沒有完全固定下來的情況下
          tensor.set_shape(shape)
      • 如何改變動態形狀
        • tf.reshape(tensor, shape)
          不會改變原始的tensor
          返回新的改變形狀後的tensor
          動態創建新張量時,張量的元素個數必須匹配
    • 張量的數學運算

變量OP

  • 特點
    • 存儲持久化
    • 可修改值
    • 可指定被訓練
  • 作用:存儲模型參數
  • 具體使用
    • 變量需要顯式初始化,才能運行值
  • 使用tf.variable_scope()修改變量的命名空間
    • 使得結構更加清晰

高級API

  • 其他基礎API
  • 高級API
  • 關於TensorFlow的API圖示

案例:實現線性迴歸

  • 線性迴歸原理複習
    • 1)構建模型
      y = w1x1 + w2x2 + …… + wnxn + b
      2)構造損失函數
      均方誤差
      3)優化損失
      梯度下降
  • 案例:實現線性迴歸的訓練
    • 準備真實數據
      100樣本
      x 特徵值 形狀 (100, 1)
      y_true 目標值 (100, 1)
      y_true = 0.8x + 0.7
    • 假定x 和 y 之間的關係 滿足
      y = kx + b
      k ≈ 0.8 b ≈ 0.7
    • 流程分析:
      (100, 1) * (1, 1) = (100, 1)
      y_predict = x * weights(1, 1) + bias(1, 1)
      1)構建模型
      y_predict = tf.matmul(x, weights) + bias
      2)構造損失函數
      error = tf.reduce_mean(tf.square(y_predict - y_true))
      3)優化損失
      optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(error)
      5 學習率的設置、步數的設置與梯度爆炸
  • 增加其他功能
    • 增加變量顯示
      • 1)創建事件文件
      • 2)收集變量
      • 3)合併變量
      • 4)每次迭代運行一次合併變量
      • 5)每次迭代將summary對象寫入事件文件
    • 增加命名空間
      • 使代碼結構更加清晰,TensorBoard 圖結構更清楚
    • 模型的保存與加載
      • saver = tf.train.Saver(var_list=None,max_to_keep=5)
        1)實例化Saver
        2)保存
        saver.save(sess, path)
        3)加載
        saver.restore(sess, path)
    • 命令行參數的使用
      • 使用方式
      • 步驟
        • 1)tf.app.flags
          tf.app.flags.DEFINE_integer(“max_step”, 0, “訓練模型的步數”)
          tf.app.flags.DEFINE_string(“model_dir”, " ", “模型保存的路徑+模型名字”)
          2)FLAGS = tf.app.flags.FLAGS
          通過FLAGS.max_step調用命令行中傳過來的參數
          3、通過tf.app.run()啓動main(argv)函數

數據讀取、神經網絡基礎

文件讀取流程

  • 多線程 + 隊列
  • 文件讀取流程
    • 1)構造文件名隊列
      • file_queue = tf.train.string_input_producer(string_tensor,shuffle=True)
    • 2)讀取與解碼
      • 文本:
        讀取:tf.TextLineReader()
        解碼:tf.decode_csv()
        圖片:
        讀取:tf.WholeFileReader()
        解碼:
        tf.image.decode_jpeg(contents)
        tf.image.decode_png(contents)
        二進制:
        讀取:tf.FixedLengthRecordReader(record_bytes)
        解碼:tf.decode_raw()
        TFRecords
        讀取:tf.TFRecordReader()
        key, value = 讀取器.read(file_queue)
        key:文件名
        value:一個樣本
    • 3)批處理隊列
      • tf.train.batch(tensors, batch_size, num_threads = 1, capacity = 32, name=None)
    • 手動開啓線程
      • tf.train.QueueRunner()
        開啓會話:
        tf.train.start_queue_runners(sess=None, coord=None)

圖片數據

  • 圖像基本知識
    • 文本 特徵詞 -> 二維數組
      字典 one-hot -> 二維數組
      圖片 像素值
    • 圖片三要素
      • 長度、寬度、通道數
        • 黑白圖、灰度圖
          一個通道
        • 彩色圖
          三個通道
    • TensorFlow中表示圖片
      • Tensor對象
        指令名稱、形狀、類型
        shape = [height, width, channel]
    • 圖片特徵值處理
      • [samples, features]
        爲什麼要縮放圖片到統一大小?
        1)每一個樣本特徵數量要一樣多
        2)縮小圖片的大小
        tf.image.resize_images(images, size)
    • 數據格式
      • 存儲:uint8
        訓練:float32
  • 案例:狗圖片讀取
    • 1)構造文件名隊列
      file_queue = tf.train.string_input_producer(string_tensor,shuffle=True)
      2)讀取與解碼
      讀取:
      reader = tf.WholeFileReader()
      key, value = reader.read(file_queue)
      解碼:
      image_decoded = tf.image.decode_jpeg(value)
      3)批處理隊列
      image_decoded = tf.train.batch([image_decoded], 100, num_threads = 2, capacity=100)
      手動開啓線程

二進制數據

  • tensor對象
    shape:[height, width, channel] -> [32, 32, 3] [0, 1, 2] -> []
    [[32 * 32的二維數組],
    [32 * 32的二維數組],
    [32 * 32的二維數組]]
    –> [3, 32, 32] [channel, height, width] 三維數組的轉置 [0, 1, 2] -> [1, 2, 0]
    [3, 2] -轉置-> [2, 3]
    1)NHWC與NCHW
    T = transpose 轉置

    3.3.2 CIFAR10 二進制數據讀取
    流程分析:
    1)構造文件名隊列
    2)讀取與解碼
    3)批處理隊列
    開啓會話
    手動開啓線程

TFRecords

  • TFRecords 文件
    • 定義
      • TFRecords 其實是一種二進制文件,雖然它不如其他格式好理解,但是它能更好的利用內存,更方便複製和移動,並且不需要單獨的標籤文件
    • 使用步驟
  • Example 結構解析
    • 使用步驟
  • 讀取TFRecords 文件API
    • 1)構造文件名隊列
      2)讀取和解碼
      讀取
      解析example
      feature = tf.parse_single_example(value, features={
      “image”:tf.FixedLenFeature([], tf.string),
      “label”:tf.FixedLenFeature([], tf.int64)
      })
      image = feature[“image”]
      label = feature[“label”]
      解碼
      tf.decode_raw()
      3)構造批處理隊列

神經網絡基礎

  • 神經網絡
    • 輸入層
    • 隱藏層
    • 輸出層
  • 感知機
    • 可以解決 “ 與 ” 、 “ 或 ” 問題 , 不能解決 “ 異或問題 ”

神經網絡原理

  • 邏輯迴歸
    y = w1x1 + w2x2 + …… + wnxn + b
    sigmoid -> [0, 1] -> 二分類問題
    損失函數:對數似然損失
    用神經網絡進行分類
    假設函數
    y_predict =
    softmax - 多分類問題
    構造損失函數
    loss = 交叉熵損失
    優化損失
    梯度下降
    3.6.1 softmax迴歸 - 多分類問題
    假設要進行三分類
    2.3, 4.1, 5.6
    3.6.2 交叉熵損失

案例:Mnist手寫數字識別

  • Mnist 數據獲取API

線性神經網絡侷限性

卷積神經網絡

卷積神經網絡簡介

  • 與傳統多層神經網絡對比
  • 發展歷史
  • 卷積網絡在ImageNet比賽錯誤率

卷積神經網絡原理

  • 結構(隱藏層)
    • 卷積層
      通過在原始圖像上平移來提取特徵
      激活層
      增加非線性分割能力
      池化層(pooling layer)/下采樣(subsample)
      減少學習的參數,降低網絡的複雜度(最大池化和平均池化)
      全連接層
  • 卷積層
    • 每層卷積層都是由若干卷積單元(卷積核)組成,每個卷積單元的參數都是通過反向傳播算法最佳化得到的
    • 卷積運算的目的是特徵提取,第一層卷積層可能只能提取一些低級的特徵,如邊緣、線條和角等層級,更多層的網絡能從低級特徵中迭代提取更復雜的特徵
    • 卷積核(filter/過濾器/模型參數/卷積單元)
      • 四大要素
        • 卷積核個數
        • 卷積核大小
          • 通常設置爲:11、33、5*5
        • 卷積核步長
        • 卷積核零填充大小
    • 總結 - 輸出大小計算公式
    • 卷積網絡API
  • 激活函數
    • ReLU = max(0,x)
      • 函數圖像
      • 效果圖
    • 採用新的激活函數的原因
    • 激活函數API
  • 池化層
    • 主要作用
      • 特徵提取,減少參數數量
    • 主要方法
      • max_pooling : 取池化窗口的最大值
      • avg_pooling:取池化窗口的平均值
    • 利用了圖像上像素點之間的聯繫
    • 池化層API
  • 全連接層
    • 主要作用
      • “ 分類器 ”

思維導圖圖片形式

深度學習思維導圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章