Python · cv2(零)

cv2 是庫的名字,我安裝的其實是 cv3;至於為啥它 import 時叫 cv2、我也不知道(攤手)

【根據評論區@楊榮釗 指點,opencv 目錄下的某個地方有兩個文件夾 opencv 和 opencv2;opencv2 是 c++ 介面的,opencv 是 c 介面的】

【根據評論區@Boss Kwei 指點,opencv 1 系列是最早的版本,只有純 c 的介面,頭文件在 opencv 下。然後隨著這個庫升級到了 opencv 2,內部幾乎被完全重寫了,是 c++ 實現,頭文件是 opencv2 / opencv.hpp。在然後這個庫到了 3 版本,3 版本對於之前來說變化不大(但是內部實改動很大),外部 api 基本保持了不變,所以仍然是 opencv2】

但不管怎麼說,它是一個功能非常強大的庫,可以做到的事情包括但不限於:

  • 各種調教(視頻!)

  • 各種圖片處理
  • 各種可視化

在機器學習裡面,實際應用時可能用得比較多的是前兩個;但自己實現模型並想要評估模型表現時、我們常常會用到 cv2 靈活的可視化能力

先說 cv2(以及大概是其它圖像處理庫共有)的特性:

  • 基本上所有東西都是一個 Numpy 數組

所以,無論是怎樣調教、怎樣處理,本質都是對一個(高維)Numpy 數組中某些數字的調整

如果要詳細講解 cv2 的話,毫不誇張地說、是可以出一本書的(大概已經有這樣的書了?),是故這一章我們會專註於如何利用它來進行一些結構的可視化。更進一步地,我只打算講講如何僅通過四個最基本的元素:字、線、圓、方來進行(雖然有點丑但是)還過得去的可視化

但即使如此,感覺這些東西也不是一章能夠講完的、所以還是決定分著講

作為第零章,我們先看看效果(從而免得觀眾老爺們出現看了好幾章後才發現「咦這個人最終弄出來的效果原來這麼 sb 我到底為什麼要看那麼久呢」的情況(躺))

  • 決策樹的可視化:

    (理論上是任意結構都能可視化出來的、不過個人建議太複雜的還是不要強行畫……)

  • 神經網路的可視化

    這一部分我是受了 Tensorflow Playground 的啟發後做出來的。當時票圈裡面有人貼它的鏈接,我點進去後被震了一下:

    「噫!這東西有點厲害!」

    然後想了想又震了一下:

    「噫!這東西我能做!」

    然後最終弄出來了一個思想差不多但丑了大概一百倍的東西。動圖可以猛戳這裡觀看,這裡就只截個屏吧:

    (嗚哇……貼出來之後才發現真是丑得不忍直視……)

    稍微說明一下:

    • 每個小正方形代表一個神經元,橙色部分是激活的部分;最後兩層都是輸出層
    • 中間那坨亂七八糟的線的顏色、粗細反映了對應權值的大小。具體而言有:

      • 越粗的線、對應的相對權值的絕對值越大
      • 越藍的線、對應的相對權值越小;反之,越橙的線相對權值越大

      所謂「相對權值」中的「相對」,指的是「相對該層所有權值平均值」

    然後這玩意兒其實是會隨著模型的訓練而變化的、詳情可以參考 Tensorflow Playground、差不多就那個感覺

    。要說我這個東西的唯一優勢,大概就是不限定層數、不限定單層的神經元個數而 Tensorflow Playground 最多只能有 6 層 8 個吧(蜜汁自豪)

    當然層數、神經元個數多了的話、基本也只有最後的輸出層能看了……比如說:

    訓練集是七條螺旋線;雖然最後一層的效果不錯,然而……

可以看到,這兩種可視化(雖然很醜但)確實只用到了之前所說的四種基本元素。想要把可視化做得更精美的話、確實需要用到更多的東西,但雖然上面兩種可視化比較丑、個人感覺已經能帶來比較好的直觀了

希望觀眾老爺們能夠喜歡~

(猛戳我進入下一章! ( σ"ω")σ )


推薦閱讀:

鍾老師3D作圖系列六 —— TOC實戰演練
當Power BI 遇上歐冠決賽

TAG:Python | 机器学习 | 可视化 |