李清華, 王寶娟
(煙臺大學(xué) 數(shù)學(xué)與信息科學(xué)學(xué)院,山東 煙臺264005)
“新工科(Emerging Engineering Education)”以培養(yǎng)多元化、創(chuàng)新性卓越工程人才為主要目標(biāo),對教學(xué)方式提出了新要求.工科的線性代數(shù)教學(xué)不僅要緊密結(jié)合產(chǎn)業(yè)背景和專業(yè)特點(diǎn),更重要的是激發(fā)學(xué)生學(xué)習(xí)和探究的興趣,強(qiáng)化教師的引導(dǎo),體現(xiàn)學(xué)生學(xué)習(xí)的主體地位,實(shí)現(xiàn)以產(chǎn)出為導(dǎo)向的OBE(Outcomes-based Education)教學(xué)改革[1].傳統(tǒng)課堂教學(xué)面臨多重挑戰(zhàn):一方面多數(shù)線性代數(shù)教學(xué)方式難以充分調(diào)動學(xué)習(xí)興趣,教學(xué)方式難以跳出理論抽象性的掣肘,對于產(chǎn)業(yè)應(yīng)用案例引入較少,授課內(nèi)容缺乏生動性,信息化輔助教學(xué)方式單一,使得講授內(nèi)容沒有完全激發(fā)學(xué)生的學(xué)習(xí)興趣;另一方面,教學(xué)內(nèi)容不能有效結(jié)合產(chǎn)業(yè)實(shí)際情景,例如囿于人工演算局限性,出現(xiàn)矩陣等運(yùn)算往往不能超過4階運(yùn)算的問題,使得學(xué)生難以完全理解教學(xué)知識點(diǎn),更難以培養(yǎng)學(xué)生線性代數(shù)的應(yīng)用能力.因此,改進(jìn)傳統(tǒng)線性代數(shù)教學(xué)以適應(yīng)“新工科”要求成為一個亟待探究的問題.
線性代數(shù)的教學(xué)內(nèi)容和教學(xué)形式的改革是國內(nèi)近年研究的重要主題,主要圍繞信息技術(shù)的運(yùn)用展開,特別隨著互聯(lián)網(wǎng)技術(shù)的加持,混合式課堂環(huán)境的支撐,線性代數(shù)教學(xué)改革探索不斷豐富.在教學(xué)模式方面,將翻轉(zhuǎn)課堂應(yīng)用到線性代數(shù)的課堂教學(xué)中,改變教師角色,組織和引導(dǎo)學(xué)生自主學(xué)習(xí),促進(jìn)OBE(Outcomes-based Education)和教學(xué)質(zhì)量的提高[2];在教學(xué)內(nèi)容方面,針對計(jì)算機(jī)學(xué)院代表的信息類專業(yè)對線性代數(shù)課堂的教學(xué)內(nèi)容進(jìn)行改革,突出理論與實(shí)踐相結(jié)合,強(qiáng)化線性代數(shù)的學(xué)科應(yīng)用以及加強(qiáng)對編程語言的訓(xùn)練[3-4].其中,研究線性代數(shù)教學(xué)中的概念可視化處理,可以促進(jìn)學(xué)生具象化學(xué)習(xí)和提升結(jié)合案例的實(shí)踐能力,成為教學(xué)改革研究中有價值的探索領(lǐng)域.目前已有文獻(xiàn)中多使用MATLAB等專用軟件來處理線性代數(shù)中的概念可視化問題,應(yīng)用領(lǐng)域多集中在矩陣的運(yùn)算部分.但是學(xué)界對計(jì)算機(jī)編程語言Python編程開發(fā)知識點(diǎn)可視化的實(shí)踐研究較少.本研究聚焦線性代數(shù)抽象概念具象化的教學(xué)課程改革,引入Python編程語言設(shè)計(jì),探究一種促進(jìn)學(xué)生學(xué)習(xí)主動性與應(yīng)用能力提升和符合“新工科”要求的教學(xué)設(shè)計(jì).
大學(xué)生具象思維特征顯著,他們更喜歡接受和理解具體形象的知識,而線性代數(shù)理論較為抽象,難以充分激發(fā)學(xué)生的學(xué)習(xí)興趣.因此,本研究以“新工科”教學(xué)要求,對線性代數(shù)的傳統(tǒng)課堂模式進(jìn)行改革,用實(shí)例引入理論,以問題為驅(qū)動,將線性代數(shù)理論進(jìn)行形象化,使得理性的知識化為感性的實(shí)例,調(diào)動學(xué)生學(xué)習(xí)的積極性.
Python作為目前人工智能領(lǐng)域中的一門重要編程語言,應(yīng)用于科學(xué)計(jì)算、云計(jì)算、數(shù)據(jù)分析、自動化運(yùn)維等多工業(yè)領(lǐng)域,特別在圖形界面開發(fā)上具有明顯優(yōu)勢.同時,Python語言具有簡單靈活、擴(kuò)展性強(qiáng)、開源、免費(fèi)等特點(diǎn),只要學(xué)生具備計(jì)算機(jī)應(yīng)用基礎(chǔ)能力,就容易激發(fā)興趣.本研究使用Python語言,將線性代數(shù)教學(xué)中部分應(yīng)用非常廣泛的內(nèi)容可視化處理,以當(dāng)今熱議的人臉識別和圖像處理應(yīng)用領(lǐng)域?yàn)槔?,將矩陣的基本運(yùn)算、特征值與特征向量、奇異值分解三個知識主題相關(guān)理論結(jié)合,激發(fā)學(xué)生的興趣,增強(qiáng)知識應(yīng)用意識.
教學(xué)應(yīng)用過程分為三個階段,以適應(yīng)不同知識需求的學(xué)生.課前老師通過混合課堂線上發(fā)布課件和Python主要源碼;課上老師主要現(xiàn)場演示可視化程序,也可以引導(dǎo)學(xué)生分享操作;課后老師布置挑戰(zhàn)性的進(jìn)階題目,學(xué)生修改代碼來探索和創(chuàng)新,從而加深知識的理解和應(yīng)用.
圖像中的每個像素值就是矩陣的每個元素值,可以說,圖像可以用矩陣來表示,所以對數(shù)字圖像的處理實(shí)際就是對矩陣的處理.一張彩色圖像可以是一個矩陣,只不過此矩陣的每一個點(diǎn)不是單個數(shù)值,而是一個3元素的數(shù)組,這3個元素是RGB值,R(RED)為紅色,G(GREEN)為綠色,B(BLUE)為藍(lán)色,范圍為0~255,所以一張彩色圖像可以視為3矩陣疊加形成,如圖1,其中1個矩陣就是1個通道.灰度圖屬于單通道圖像,像素的灰度值范圍為0~255,用來可視化矩陣,如圖2是一張512×512的灰度圖像,對應(yīng)一個512×512的矩陣,元素值就是灰度值0~255.
圖1
圖2
在課堂實(shí)際操作中,用數(shù)字圖像來可視化矩陣,可以幫助學(xué)生很好的理解矩陣的基本操作,如加法、減法和數(shù)乘等操作[5].學(xué)生們可以通過對這些圖像矩陣的基本運(yùn)算,得出最直觀的運(yùn)算結(jié)果,從而去鞏固和加深矩陣知識.
在python 3.0及以上版本中調(diào)用下表中函數(shù)時,需要先在python中安裝OpenCV模塊來使用其中的庫函數(shù).具體操作:運(yùn)行命令提示符(即cmd),使用‘cd’命令進(jìn)入python安裝路徑下的scripts目錄中,如C:Program FilesPython35Scripts,然后輸入命令:pip3 install opencv-python,加載成功之后,在IDLE中輸入import cv2.
2.1.1 矩陣的加法
通過改變圖像的亮度可以幫助理解矩陣的加法.在工業(yè)情景的實(shí)際操作中,改變圖像亮度是一種使圖像更加符合規(guī)范的修復(fù)手段,對于圖像矩陣圖3(a)的每一個元素,加上一樣的增量,若增量為正,如100,則亮度提升,如圖3(b)所示;反之,增量為負(fù),如-100,則亮度降低,如圖3(c)所示.
圖3 (a)—(c)原圖與加上增量之后對比圖
安裝OpenCV模塊,在Python IDLE中調(diào)用函數(shù)add_demo實(shí)現(xiàn)圖像矩陣的加法,格式和說明見表1.
表1 函數(shù)add_demo調(diào)用和說明表
以上矩陣的加法是在一張圖像矩陣的基礎(chǔ)上加上一個所有元素都一樣的矩陣,可用來調(diào)節(jié)圖片的亮度.兩個圖像矩陣相加的結(jié)果,運(yùn)行如圖3(d)所示.
2.1.2 矩陣的數(shù)乘
矩陣的數(shù)乘也可以改變圖像的對比度:將原圖像矩陣乘以一個大于1的數(shù),如1.5,就可以提升圖像的對比度;反之,矩陣乘以一個小于1的數(shù),如0.5,就可以降低對比度.如圖4所示.
圖3(d)兩張圖像相加的圖示 圖4 圖像對比度改變的圖示
調(diào)用如下函數(shù)實(shí)現(xiàn)圖像矩陣的對比度的改變,格式見表2.
表2 函數(shù)contrast_brightness _demo調(diào)用和說明表
在此函數(shù)中,改變其中的c值就可以改變圖像矩陣的數(shù)乘大小從而改變圖像對比度;改變其中的b值即相當(dāng)于給圖像矩陣作加法,改變圖像亮度.
2.1.3 矩陣的減法
矩陣作差,會收獲到圖片反轉(zhuǎn)的效果,圖5(a)是原矩陣與純白圖像作差.白色圖像的矩陣所有元素都為255.部分矩陣的計(jì)算演示以及結(jié)果如下:
調(diào)用函數(shù)subtract _demo實(shí)現(xiàn)圖像矩陣的加法,格式和說明如表3所示.
表3 函數(shù)subtract _demo調(diào)用和說明表
以上矩陣的減法是元素都一樣的矩陣減去一個圖像矩陣,可以得到圖片反轉(zhuǎn)的效果.下面是兩個不一樣的圖像矩陣相減的結(jié)果,如圖5(b)所示.
(a) (b)
2.1.4 矩陣的乘法
卷積在信號處理中應(yīng)用廣泛.在人工智能領(lǐng)域中,由卷積層組成的卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是一種非常重要的深度學(xué)習(xí)研究方法.在圖像處理領(lǐng)域中,卷積運(yùn)算(也稱為濾波運(yùn)算)主要用到了矩陣的乘積和線性運(yùn)算,具體公式如下:
其中,G是原圖像,F(xiàn)是濾波器矩陣(Filter,也稱卷積核),H為濾波之后的圖像.直白了說,卷積和加減乘除一樣,也是一種運(yùn)算,其根本操作是將兩個矩陣的其中一個先平移,然后再與另一個矩陣相乘后的累加和.
在實(shí)際應(yīng)用中,銳化、模糊和邊緣的濾波器卷積矩陣最常用[6],具體分別是
調(diào)用OpenCV庫函數(shù)cv2.filter2D,格式與說明見表4.
(1)絞車由1臺功率300 kW的交流變頻電機(jī)驅(qū)動,減速箱設(shè)有兩擋,手動換擋,可實(shí)現(xiàn)擋內(nèi)無級調(diào)速,并通過換擋實(shí)現(xiàn)較大扭矩或較大轉(zhuǎn)速??梢詫?shí)現(xiàn)在高速擋時絞車輸出較高轉(zhuǎn)速和較大的提升力,滿足快速提下鉆要求,節(jié)約輔助作業(yè)時間,提高效率;在處理孔內(nèi)事故或超深孔鉆進(jìn)時,可選擇低速擋,絞車輸出大扭矩和較低轉(zhuǎn)速,實(shí)現(xiàn)以較小功率滿足不同工況各種作業(yè)要求。絞車變速范圍大,提升能力強(qiáng)。
表4 函數(shù)cv2.filter2D調(diào)用和說明表
三種濾波器其對應(yīng)的處理效果見圖6.在教學(xué)中,老師可以引導(dǎo)學(xué)生獨(dú)立設(shè)計(jì)多個濾波器矩陣,改變kernel的值,輸出原圖像的卷積后的結(jié)果圖,加強(qiáng)對矩陣乘法的理解.
圖6 濾波器的銳化、模糊以及浮雕效果圖示
圖像的旋轉(zhuǎn)也可以理解為矩陣的乘法或者線性變換,其原理見圖7,把點(diǎn)A移動到點(diǎn)B,可以用如下公式表示這個旋轉(zhuǎn)過程:
圖7 坐標(biāo)旋轉(zhuǎn)示意圖 圖8 圖像旋轉(zhuǎn)圖示
調(diào)用函數(shù)srotate實(shí)現(xiàn)簡單的圖像旋轉(zhuǎn),運(yùn)行效果如圖8所示,調(diào)用函數(shù)格式和說明見表5.
表5 函數(shù)srotate調(diào)用和說明表
在教學(xué)中,可以讓學(xué)生課下嘗試改變其中旋轉(zhuǎn)角度angle,計(jì)算矩陣乘法,然后運(yùn)行程序,深刻地理解旋轉(zhuǎn)中的矩陣乘法原理.
特征值和特征向量是線性代數(shù)中的重要概念,有著很強(qiáng)的應(yīng)用背景,廣泛應(yīng)用于計(jì)算機(jī)視覺和圖像處理、數(shù)據(jù)挖掘等研究領(lǐng)域中.特征臉法是一種比較典型的人臉識別算法,其核心是PCA,也就是主成分分析方法.眾所周知,圖像、文本等非結(jié)構(gòu)化數(shù)據(jù)都是很高維度的,直接對這些高維數(shù)據(jù)操作將非常困難,也很難提取典型特征.PCA是一種線性降維算法,基本原則是將高維矩陣特征通過投影矩陣線性變換得到低維矩陣特征,是人臉識別和圖像重構(gòu)常用技術(shù)之一[7].一個矩陣A的特征向量就是經(jīng)過線性變換y=Ax之后,向量方向保持不變,只發(fā)生了伸縮和變形,其伸縮的比例就是特征值[8].
在特征臉法中,將輸入的人臉圖像向量經(jīng)過一系列處理和計(jì)算得到一個協(xié)方差矩陣,計(jì)算這個矩陣的特征值和特征向量,得到的這些特征向量就可以看作一個圖像,即特征臉,實(shí)際就是一些臉部的特征.這些特征臉是特征子空間的一組基,對訓(xùn)練集的每一張人臉來說,都是這些特征臉的線性組合[9],如圖9所示.通過特征臉將輸入圖片向量化,得到特征向量,然后對比此向量與樣本庫中人臉向量的歐氏距離,依據(jù)給定閾值判斷是否屬于同一個人.
圖9 通過特征臉權(quán)重來代表人臉圖片的特征
通過10輪交叉驗(yàn)證特征臉法在ORL人臉庫上的識別精度.此庫包含40個不同人的400張圖像,所有圖像都是灰度圖并且以BMP格式存儲.將數(shù)據(jù)集的部分人臉用來訓(xùn)練模型,選取小部分用來測試,以此驗(yàn)證此方法的精度.
表6 函數(shù)調(diào)用格式和說明表
部分人臉數(shù)據(jù)集和運(yùn)行效果如圖10所示.
圖10 從左到右依次為:ORL部分人臉數(shù)據(jù)集、平均臉、識別結(jié)果
通過這10次的交叉驗(yàn)證,最后得到的驗(yàn)證準(zhǔn)確度為96.5%,為較好水平,即通過少量的樣本可以得到不錯的結(jié)果,說明此法能較好地保留主要特征,在圖像降維上有不錯的結(jié)果.
在教學(xué)中,教師推送相關(guān)資料,學(xué)生自己建一個人臉數(shù)據(jù)庫或者使用已建好的人臉數(shù)據(jù)集,調(diào)整image的數(shù)據(jù)或者驗(yàn)證次數(shù),查看平均特征臉以及識別結(jié)果.學(xué)生根據(jù)運(yùn)行結(jié)果試驗(yàn)此方法的準(zhǔn)確度,感受識別過程中的數(shù)學(xué)原理,從而更好地理解特征值和特征向量的實(shí)際作用與意義.
為了高效存儲和傳輸圖像數(shù)據(jù),工業(yè)上常用圖像壓縮技術(shù)來減少圖像的多余信息.數(shù)字圖像壓縮是通過減少圖像矩陣的數(shù)據(jù)量,用較少的量來還原原來圖像的一門技術(shù).使用矩陣的分解獲得圖像矩陣的前k個特征值進(jìn)行恢復(fù)該圖像,在k值取的得當(dāng)?shù)那闆r下,圖像的品質(zhì)不會受太大損失,卻大大節(jié)省了存儲空間.
在實(shí)際中,圖像矩陣一般都不是方陣,所以相比特征值分解,奇異值分解有著更廣泛的應(yīng)用.奇異值分解可以把矩陣分解為多個秩為1的矩陣之和[10],形如:
其中的σ就是奇異值,u和v分別表示列向量.等式右邊的每一項(xiàng)uvT都是秩為1的矩陣.
把奇異值按照σ1≥σ2≥…≥σr排列,留下相對大的奇異值,去除小的奇異值,來近似描述圖像矩陣.在實(shí)際操作中,前10%甚至1%的奇異值之和可以占全部的99%.因此矩陣可以用最大的k個奇異值與對應(yīng)向量來近似代表,即:
調(diào)用Numpy庫函數(shù)和svd_restore函數(shù),可以將一張灰度圖進(jìn)行奇異值分解,然后輸出保留不同奇異值個數(shù)的圖像,對比所占存儲空間大小和輸出效果,如圖11所示,第一張為原圖,其余為分別保留1,5,10,20,50,100,150個奇異值之后復(fù)原的圖像.
圖11 原圖與復(fù)原后的圖像對比示意圖
調(diào)用函數(shù)格式和說明見表7.
表7 函數(shù)調(diào)用格式和說明表
由輸出的圖像信息可得,原圖尺寸為512×512,保存這張圖需要存儲512*512=262144個像素點(diǎn),有26萬之多,在計(jì)算機(jī)中實(shí)際占空間為160KB.這張圖有512個奇異值,將他們從小到大排序之后,排在最后的較小的奇異值對整張圖片貢獻(xiàn)不大,故可以舍去.由輸出圖可以明顯看出,僅保留前20個奇異值就可以清晰看到人臉特征,但是顯然不夠清楚.如果選擇保留前50個奇異值,圖片占用存儲空間會稍微大一點(diǎn)但清晰度會上升.此時圖片有50*(1+512+512)=51250個像素點(diǎn),僅為原來圖片像素點(diǎn)個數(shù)的19.6%,在實(shí)際文件保存中,所占存儲空間為120KB,為原圖的75%.因此可以看出,奇異值分解可以在保留原圖主要特征的基礎(chǔ)上對圖像壓縮,節(jié)省了很多存儲空間.
在教學(xué)中,教師引導(dǎo)學(xué)生課下在實(shí)際演練中更換自己的圖片和奇異值個數(shù),對自己的圖像進(jìn)行壓縮,充分理解奇異值分解的過程和意義,加深知識的理解.
本研究在部分班級采用了知識點(diǎn)的可視化教學(xué),內(nèi)容包括但不限于矩陣的基本運(yùn)算、特征值與特征向量、奇異值分解.教學(xué)效果顯示,相比于其他并行的傳統(tǒng)教學(xué)課堂,實(shí)施教學(xué)改革的課堂學(xué)生學(xué)習(xí)效率更高,學(xué)生平均成績最高,如圖12所示.其中高分段學(xué)生顯著更多,不及格人數(shù)是最少的.此外,在學(xué)習(xí)體驗(yàn)方面,學(xué)生們對教師課堂評價的百分位,從2017年的30.14%(改革前)增長到2019年的59.33%(改革后),也說明改革后的課堂能更受歡迎,學(xué)生參與度更高,從而課堂效率更高.
圖12 三種教學(xué)模式下的學(xué)生成績對比(灰度等級最高的為改革后的教學(xué)課堂)
囿于研究投入和部分理論抽象的天然性,Python等語言和軟件的應(yīng)用無法展示全部的線性代數(shù)內(nèi)容,也不能完全取代理論講解的主導(dǎo)地位,但是這種可視化的教學(xué)設(shè)計(jì)一定程度上可以幫助學(xué)生在課中或者課后更好地理解知識內(nèi)容.
本研究利用Python實(shí)現(xiàn)對線性代數(shù)部分理論概念的可視化,將抽象的知識具象為感性的應(yīng)用實(shí)例,激發(fā)學(xué)生的學(xué)習(xí)興趣,提高課堂的教學(xué)效率.可視化突出了線性代數(shù)在人臉識別以及圖像處理領(lǐng)域中的實(shí)際應(yīng)用,課堂中引入概念可視化能夠適應(yīng)學(xué)生們的不同學(xué)習(xí)基礎(chǔ),尊重他們不同的學(xué)習(xí)動機(jī),滿足學(xué)生及時反饋和課堂討論的需求.學(xué)生在實(shí)際操作中,不僅能夠掌握理論上的知識,也能更深入地接觸社會中的實(shí)際應(yīng)用,有利于提高他們的科學(xué)素養(yǎng),提高社會責(zé)任感.知識點(diǎn)可視化是線性代數(shù)教學(xué)改革中具有價值和意義的探索和實(shí)踐.
致謝作者非常感謝相關(guān)文獻(xiàn)對本文的啟發(fā)以及審稿專家提出的寶貴意見.