曾 毅
Python是當下人工智能、機器學習最為熱門的編程語言之一,它擁有豐富的第三方庫,能完成人工智能開發的所有環節,因此《Python程序設計》課程是人工智能專業人才培養基礎課程中最重要的課程之一。
隨著計算機領域技術的不斷發展,開源社區和開源學習平臺為技術學習者和愛好者提供了一個自由學習、交流的空間,并已發展成為計算機和信息領域知識傳遞的一個主流途徑?;ヂ摼W上的開源項目多不勝數,覆蓋了大數據、人工智能應用技術的數據分析、圖像處理、語音識別等方面。一方面,學生可以通過開源項目的學習,在掌握理論基礎知識的同時接觸到企業優秀的真實開發實踐項目,解決學生在人工智能專業學習過程中遇到的實踐平臺和實踐案例缺乏的問題。另一方面,學生通過開源實踐項目的實踐,才能真正體會到基礎課程的作用,也就是知道為何而學,從而激發其學習主觀能動性。
《Python程序設計》課程是人工智能專業必修的專業基礎課程,其目的是幫助學生熟練使用Python開發環境,熟練運用數據類型、切片等知識,熟練掌握Python函數、類的設計、文件讀寫的功能以及數據分析工具Numpy和Pandas。換一句話來說,學生通過課程的學習,掌握Python的使用方法,從而解決專業知識領域中包括大數據分析、圖像處理等技術應用的問題。
當前,在課程教學中主要存在的問題有:課程內容枯燥乏味,重在強調編程思維,教材中所提供的人工智能方向實踐項目較少,且所列舉的實踐案例普遍知識點單一,無法體現知識的連貫性和綜合性,滿足不了學生專業學習的要求;實踐環節往往以驗證性實驗為主,實踐內容無法與專業領域相結合,不能有效激發學生專業學習的興趣。
基于開源平臺的Python程序設計課程建設,要考慮學生已有的知識水平、專業方向特點以及當前的行業應用熱門問題,以難度適中、循序漸進為原則,以應用型人才培養為核心,圍繞行業應用中實際問題的解決能力培養,從教學目標、教學內容、教學設計、教學方法等方面進行全方位改革,以激發學生專業學習的興趣,滿足學生專業學習目標要求。
(一)明確教學目標?!禤ython程序設計》課程以開源項目實踐為主線,以Python基礎知識應用為驅動,通過案例和問題引入內容,重點講解以Python為工具解決實際問題的方法,并穿插介紹相關的語言知識。通過加強學生的分析解決問題的能力和實踐動手能力進行訓練,以達到學練合一的目的。因此,課程的教學目標設置如下所示。
1.素質目標。具有高度的社會責任感以及實事求是、嚴謹認真的工作態度。
2.知識目標。掌握Python基本語法、組合數據類型、函數的定義、模塊的調用、文件的讀寫以及數據分析工具Numpy和Pandas的使用。
3.能力目標。具備良好的Python程序設計能力和編寫能力以及能夠使用Python解決基本的數據處理、可視化問題。通過開源實踐項目培養學生計算思維能力、創新能力和發現問題、分析問題以及解決問題的能力和團隊協作的能力。
(二)重構教學內容。基于開源技術平臺,圍繞人工智能應用開發目標,制定了如下主要課程教學內容。
1.Python基礎知識?;菊Z法、數據類型、控制結構。
2.函數。函數的聲明、函數的定義、函數的調用。
3.模塊。加載內置模塊、加載包、常用內置模塊的使用、內置模塊中的常用函數。
4.面向對象編程。類和對象的定義和使用。
5.文件處理。常用文件的操作方法。
6.科學計算庫Numpy和數據分析工具Pandas。數組的處理、數組的索引和切片、Pandas中的兩種數據結構、Pandas的常用操作。
7.數據預處理。數據清洗、合并、重塑、轉換的常見操作方法。
8.數據可視化。Matplotlib繪制圖表、Seaborn的基本使用。
引入課程中的開源項目為房價預測項目和農產品分揀項目。其中房價預測項目使用數據分析工具Numpy對現有的房價數據進行預處理、分析,并最終實現數據可視化。項目實現所涉及的知識點包含函數定義、模塊調用、面向對象設計、文件處理、科學計算庫Numpy和數據可視化,教學中把主要知識點的講解貫穿于項目的實現過程。農產品分揀項目則通過圖像識別實現智能農產品分揀系統,即可以自動根據設置的水果等農作物的品級進行分揀,項目的重點內容涉及對數據的預處理、函數的定義、模塊的調用等。
(三)改革教學設計。課堂上主要采用項目導向式教學。在講授過程中,首先演示項目運行的效果,然后講解項目實現的步驟,分析每一個步驟使用到了哪些知識點,幫助學生結合課程知識點建立一個完整項目的概念,最后對每一個步驟分解知識點進行講解和演示,采用邊做邊學,在做中學的教學模式。
借助開源框架技術平臺,重點講解數據的處理、模塊的調用知識,對于模型構建、模型訓練等步驟,只需要學生掌握如何調用平臺提供的現有資源即可。
(四)教學改革實施。
1.項目準備階段。由于學生對于Python的基礎知識還未了解,因此在此階段以課本知識內容為主,通過邊學邊做的教學方法使學生首先掌握Python基礎知識、Python組合數據類型,為后續的項目階段打下基礎。
2.項目設計階段。在項目一房價預測任務中,我們采用百度飛漿的開源項目波士頓房價預測。首先給學生展示項目代碼運行的效果,然后與學生一起討論房價的走勢與什么因素有關。某個城市的房價往往會受到多種因素的制約和影響,比如周邊的治安環境、空氣質量、學校情況和到市中心的距離等,每一種因素所占比重不同,可以通過現有數據利用模型計算分析出來。所以,首先需要收集現有房價的相關數據,然后對數據進行預處理,之后調用模型進行分析,找出房價和各種因素之間的關系,從而實現房價的預測功能。因此,該項目主要包含四個步驟:數據處理、模型設計、模型訓練和模型部署。
在項目二農產品分揀項目中,采用百度飛漿的開源項目基于PaddleHub實現桃子分類。首先給學生展示項目代碼運行的效果,然后引導學生思考消費者如何判斷農產品的品級。該項目以水果品級分揀場景為例,每到豐收季節,大型水果種植園都需要雇傭大量工人進行水果分揀的工作,這往往耗時長、人力成本高;除此之外,人工分揀水平層次不一還可能會造成農場主收益受到極大的影響。智能水果分揀系統的出現,可以自動根據提前設置好的農作物品級進行分揀,這不僅僅能大大降低人力成本,提高處理效率,還能提升分揀的準確性,保障農場主的利益。水果品級分揀主要以水果的形狀、個頭、顏色等特征為依據,因此項目的設計思路是首先輸入已劃分好品相等級標準的桃子圖像,調用模型進行特征提取訓練,從而找出品相等級與特征之間的關系,然后對已訓練的模型進行評估測試,最后完成訓練模型的部署及應用的實現。
3.項目實施階段。圍繞課程的教學目標,對項目的設計方案進行分步實施,教學的重點放在數據處理、模型調用上。學生通過隨機分組,4~6人組成一個團隊,在老師的指導下動手完成每一步驟的工作。
在房價預測項目中,對現有房價相關數據的處理包含五個步驟:數據導入、數據形狀變換、數據集劃分、數據歸一化處理和封裝load data函數。數據預處理后,最終才能被模型調用。數據處理各步驟所涉及的知識點如圖1所示。

圖1 房價預測項目數據處理流程知識點分布
完成對現有房價相關數據處理后,就可以直接調用設計好的模型進行模型訓練,最后對訓練結果進行可視化展示。
在農產品分揀項目中,首先將桃子按照品相分為四個等級,將收集的桃子圖像數據集切分為訓練集、驗證集和測試集,然后使用PaddleHub完成數據讀取器的構建,并對原始圖像數據進行預處理使其規范化,包括尺寸的設置、圖像的裁剪等。完成數據預處理后,調用PaddleHub中提供的Resnet50模型進行訓練,然后對訓練模型進行評估測試,通過加載模型預測并輸出桃子圖片的分類等級,利用數據可視化知識返回預測的實際結果,最后完成模型的部署和應用。
4.項目收尾階段。在每個項目收尾階段,學生首先對項目完成的過程及出現的問題進行總結,然后老師對團隊的項目完成情況及團隊成員的表現進行點評,同時再次復盤項目的實現步驟及每個步驟所使用的知識點,并引導學生通過調用平臺提供的不同模型進行數據訓練,對比測試結果,找出解決問題的最優模型。
最后,要求所有團隊做到對知識的舉一反三,例如項目一房價預測項目的知識可以應用于解決類似的飛機票價格預測、酒店房價預測、股票價格預測等問題,項目二農產品分揀項目的知識可以運用于解決垃圾分類、人臉識別等圖像識別、物品分揀的問題。基于所完成的兩個實踐項目,學生團隊自主選擇一個題目,共同完成項目的開發、答辯,并以此作為期末成績的評判依據。
基于開源平臺的Python程序設計課程教學,不再簡單地把理論知識和實踐內容獨立分開講授,而是在實踐過程中去講授理論知識的應用,突出動手能力和專業技能的培養,充分體現了計算機學科教育中重視實踐的教育理念。其次,在開源實踐項目的選取上可以優先選擇與專業方向一致或者相關度高的案例,這樣可以有效地解決計算機教學中普遍存在的教學過程脫離真實應用場景的問題,并能通過完整的項目流程幫助學生構建整體的知識體系,讓學生明白學完這個知識點或者這門課程,我能解決什么實際問題。最后,學生通過開源項目的實踐訓練,提高了分析問題和解決問題的能力、學以致用的能力、團隊協作的能力,通過對開源項目實現過程中知識點的逐層分解,引導學生邊學邊做,并在課程教學項目的基礎上最終實現一個自己感興趣的項目,極大地激發了學生的學習主動性和學習興趣。隨著國內各類開源社區的建設和開源技術框架的興起,基于開源平臺課程建設的思路也可以應用于其他計算機類課程的建設,以解決計算機類課程教育中一些存在已久的問題。