TensorFlow的入門資料整理與技巧
文章目錄
- TensorFlow的入門資料整理與技巧
- 我與TensorFlow的故事
- 1. 理論知識
- 1.1 視頻
- 1.2 書籍
- 2. 編程思維和技巧
- 2. 1. 如何培養
- 2.2. 一些技巧
- 3. TensorFlow及相關框架
- 3.1 官方檔案
- 4. 雜項
- 最后
我與TensorFlow的故事
最早知道TensorFlow是在我的本科實驗室,他是Google Developer Group的全國基地之一,也是他們首先告訴了我人工智能的概念,于是我在大二,也就是2017年末開始學習TensorFlow,用自己的所有獎學金買了一塊1080Ti構成的服務器,配置了一整天的cuda和cudnn,最后在自己的機器上運行起了深度學習的Hello World(手寫數字識別),同時也有了第一個收藏的csdn文章:Win10 TensorFlow(gpu)安裝詳解,
不久,在自己的第一個用CNN的專案中從詞向量訓練、numpy讀取、placeholder、loss函式的撰寫,我大概寫了一個月的時間,現在想想真是效率低的可怕,不知道下一行代碼該寫什么,不知道bug究竟是啥意思,走了不少的彎路,才算是入門了TensorFlow
我希望解決的問題是:“如何快速且正確地使用TensorFlow上按自己想法實作深度學習模型“
在這一大背景下,我試圖結合自己的一些粗淺的經歷,來分析一下可能的問題以及應對的方法,希望對大家入門TensorFlow有所幫助,主要有3個方面:
-
理論知識欠缺(對于模型的概念和細節不熟悉)
-
編程技巧欠缺(不知道如何模塊化的撰寫程式和流程)
-
對于TensorFlow及其依賴框架的不熟悉
針對以上三個問題,全文貫徹一個思想:從需求出發,我想可以逐一出發,各個擊破,
1. 理論知識
理論作為深度學習時代必不可少的基礎,如果要實作一些例如回圈神經網路,卷積神經網路,Transformer模塊等等,概念的掌握是非常必要的,大家需要理解神經網路的本質就是一個輸入輸出的函式,對于一個神經網路,我們給定輸入,等待他的輸出就好了,這里給大家推薦一些入門的視頻和書籍,可以有效的幫助大家理解概念,
1.1 視頻
- 吳恩達的深度學習視頻,可以在coursera上學習deep learning和 machine learning, 這是全網幾乎最公認最基礎的深度學習入門課程了,需要的數學也非常非常的簡單,就是基礎的矩陣運算和微積分,現在還搭配DeepLearning.AI TensorFlow Developer課程,看評價也很贊!
- 深度學習之父,圖靈獎作者Hinton的課程csc321 Neural Networks for Machine Learning,多倫多大學的神經網路機器學習課程,早期是由Hinton本人上課,需要有一定的基礎,
- 斯坦福大學教授Chris Manning 的課程CS224n: Natural Language Processing with Deep Learning,專注于自然語言處理(夾帶私貨,hhhh)
- TensorFlow實用課程:《TensorFlow 入門實操課程》
1.2 書籍
- 《深度學習》by Ian Goodfellow, Yoshua Bengio, Aaron Courville
- 《機器學習》 by 周志華
- 《統計學系方法(第二版)》by 李航
此處不再過多推薦,基礎在于牢固,概念在于理解,按需求去學習就好,感興趣可以去看曾經整理的文章:
-
2019 年最佳機器學習和深度學習書籍的名單
-
15套免費的自然語言處理NLP課程及經典教材分享!
-
機器學習|深度學習|自然語言處理 學習資料/課程/資料/資源大分享
以及TensorFlow官方的整理合集:
- TensorFlow官網教育資源
大家注意一定要學練結合,不要試圖把知識全部吃透理解了再去著手去寫代碼,投入產出比并不高,得不償失,
2. 編程思維和技巧
編程是實作TensorFlow的重中之重,大家如果想實作一個TensorFlow模型,毫無疑問要涉及到
- 資料讀取
- 訓練
- 測驗
- 模型的讀取和存盤
那么此時如何整理專案,如何撰寫一個合理、模塊化的程式是非常有必要的,這能讓程式錯誤更少,方便版本升級以及,還是一個原則:以可讀性為前提,按需求出發
如果程式某個模塊例外的復雜,比如訓練模型有非常多個方式,訓練的程序也比較復雜,需要過幾步做一次測驗,測驗要做什么準備,那么這時候,將train寫成一個函式甚至是一個類,都是非常合理的,例如huggingface庫就有Trainer,擁有不同的訓練超引數方便應對不同情況的訓練,
2. 1. 如何培養
-
掌握類Class,實體Instance等概念
-
多閱讀github的專案文獻開源的入門資料庫中會有代碼和運行程序,思考他們的設計思路,私以為有如下的幾個級別:
- 非常基礎的入門資料,只有模型一個類,以jupyter notebook為存盤格式,從頭運行到尾,甚至函式也沒幾個
- 入門資料,撰寫了模型類,訓練函式,測驗函式的jupyter notebook檔案
- 入門專案,將模型和資料讀取等等分成了不同的.py檔案進行處理
- 復雜專案,有非常細分的包和.py檔案,對應了也許遠程服務器展示,模型部署以及測驗等等,
-
自己撰寫入門專案,按照曾經思考和運行的程式進行改寫
這里沒有說級別有高低之分,一切都是需求出發,面向的人群和受眾面不同,因此存盤的格式不一樣,大家還是按照自己的需求去看和學習,
2.2. 一些技巧
-
變數和函式命名技巧,強烈推薦大家應該讀一讀的書
代碼整潔之道,這本書我在大二讀了前3個章節,代碼質量就上升了好幾個檔次,給大家一些書中想法(自己還記得的,應該已經不是原文表述了):- 變數名稱要能恰當的表達他的意義,比如一個int是左邊界,我會寫成left_boundary而不是lb
- 函式應該只有最小運行程序,如果函式明中出現了and,大部分情況可以分成兩個函式,
- 函式的引數應該控制在較少的數量范圍內,一個函式的引數如果太多,可以考慮把一些引數設計成一個類
-
使用python撰寫規范
- 比如可以嘗試這樣:
from typing import Dict, List, Tuple, Optional from dataclasses import dataclass @dataclass class InputFeatures: input_ids: List[int] attention_mask: Optional[List[int]] = None token_type_ids: Optional[List[int]] = None def example_func(example_arg_a:str, example_arg_b: Dict = None) -> Tuple: """ This is an example function for instruction :param example_arg_a: example argument a :param example_arg_b: example argument b :return: a data shoule be tuple type. """ return (1,2)- InputFeatures類中使用dataclass可以加快一個class的撰寫,加入typing的型別限制,可以幫助資料型別的設定,代碼更易讀懂,也節省了空間,
- 如果class還有一些語法糖的意味在里面,那么函式example_func完全是一種費時費力的做法,
- 首先在函式型別中確定了輸入引數應有的型別,也描述了函式應該回傳的型別 型別的限制結合一些IDE可以有效的幫助我們減少錯誤,因為py檔案在錯誤的地方會有例外的色塊,幫助我們去檢查錯誤,
- 函式的描寫中加入了詳細的檔案,可以有效的幫助讀者了解這個函式的功能,是否檔案是一定必要的呢?也并非如此,還是一句話,按需求,如果函式非常復雜,需要好好描述一下,那么可以加入,反之則不必,
3. TensorFlow及相關框架
TensorFlow與非常多庫都有著關聯和依賴,例如:numpy庫、scipy庫、Tensorboard庫等等,
這里我建議大家強烈學習Numpy庫,因為Numpy和TensorFlow對于資料的處理有著強烈的依賴關系,而且可以簡單互相轉換,理解Numpy對矩陣的處理和運行,對于理解TensorFlow也是非常有幫助的,
這里大家還是按需出發,需要對矩陣進行什么操作就去學什么,問問搜索引擎,
我唯一自己學習過的Numpy基礎就是唐宇迪老師的基礎入門了,還是挺不錯的,我覺得在github的開源也能學的很好,唯一的技巧就是多嘗試,多測驗,多寫,多想,
3.1 官方檔案
這里推薦大家多查詢官方檔案,這是你真正唯一絕對正確的資料,如果有著不錯的編程基礎,完全可以通過檔案中的樣例來進行入門,
- TensorFlow
- Numpy
- HuggingFace
- TensorFlow入門教程
4. 雜項
入門TensorFlow難免遇到非常多的問題以及困難,希望大家多思考,多嘗試,這里給大家推薦一些我自己貫徹的原則和技巧,希望對大家有幫助,
-
提問的智慧-鳥哥 非常非常重要,可以幫助你們快速獲取答案,同時一些思想可以應用到日常交流當中,
-
嘗試去查找stackoverflow、專門的社區例如TensorFlow官方社區, 官方檔案上的答案
-
日常關注技術動態,從點滴處進步:
● TensorFlow 官方微信公眾號(TensorFlow_official):了解 TensorFlow 核心基礎,獲取最新的產品資訊和應用案例
● 加入 TFUG:在開源社區中找到更多志同道合的伙伴,在社區活動中獲得提升
● 知乎(谷歌開發者):分享實用技術資源
● Bilibili TensorFlow 官方頻道:聚集官方入門視頻教程和各個行業案例
-
掌握多少盡量按照需求來,比如盡管演算法實作的效率低了一點點,也不是最簡潔的寫法,但如果當前階段只要正確實作,那么效率就并非是最需要讓人擔心的,在下一階段如果效率需要是一個嚴重指標,那么再進一步優化特定模塊,這樣可以保證最小可使用產品原則,在保證正確的基礎上,一步一步向前迭代,
-
保持謙遜、持續學習
最后
感謝TensorFlow社區的邀請,我做了一些粗略的總結,希望社區能夠共同進步,我們都能在社區中汲取到知識,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/238011.html
標籤:AI
