項目 | 內容 |
---|---|
這個作業屬於哪個課程 | 軟件工程 羅傑 |
這個作業的要求在哪里 | 技術規格說明書 |
我們在這個課程的目標是 | 熟悉軟件開發整體流程,提升自身能力 |
這個作業在哪個具體方面幫助我們實現目標 | 確定技術規格,撰寫說明書 |
一、概述
- 我們團隊的目標是實現一個拖拽式編程的網站,即通過推拽圖形、連線來搭建神經網絡模型,返回pytorch的模型代碼。在確定需求和功能后,我們通過網上調研學習,並且研究學長們之前的項目后,決定采用bootstrap作為前端主要開發框架,Django作為后端服務器開發框架。由於首次版本我們的目的在於實現核心推拽功能,因此數據庫暫時選用MYSQL。
二、前端技術
-
基本框架采用bootstrap,優點在於:擴展性強、有豐富的插件和組件、前端處理簡潔、擁有大量的現成UI組件
-
對圖形的拖拽使用的是jquery-ui和jsplumb
-
使用jquery中基礎的js函數與后端通信
bootstrap能夠更好地與現實的web開發項目結合,它不斷適應web技術的發展,不斷成熟。在大量的項目中,bootstrap被進行了充分的使用和測試,擁有完善的文檔,兼容各種腳本插件,接受定制。bootstrap為用戶提供了一套響應式優先的流式柵格系統,擁有完備的框架結構。在此考慮基礎上,我們的項目適合使用bootstrap實現前端。
三、后端技術
- 由於需要用pytorch實現模型代碼,因此pytorch的文檔理解和基本的模型理解是必要的。我們安排了組員去理解pytorch的原理,實現圖形到代碼的核心功能。
- Django的功能較為完善,同時部分組員有過使用Django的經歷,因此后端框架采用Django,其擁有強大的后台功能以及模板系統,能夠更好的幫助我們實現核心功能。
- 用戶數據的存儲數據庫暫定為MYSQL。
四、UI模塊
- 圖中的紅色邊框的長方形是畫布。左邊一欄是基本的圖形結構,根據功能分類,可以在圖形中加入label。
- 將圖形拖拽進入畫布后,出現的四個點可以和其他圖形進行任意的連接。
- 在畫布內的圖形可以再經過鼠標的拖拽改變位置,同時可以刪除畫布內不需要的圖形。
- 可以自由更改或刪除畫布內的連線。
五、與pytorch的交互對接
- 在此只羅列出關鍵方法的名稱和作用
關鍵方法 | 作用 |
---|---|
jsplumb.getConnections() | 獲得界面中連線兩端的圖形的id |
save() | 統計各個連線兩端的圖形,返回一個數組,包括各個圖形的數目 |
http請求 | 請求后端的api接口,獲得后端的數據 |
gen_pytorch_inputs() | 根據傳入的數據,處理輸入層 |
gen_pytorch_convolution() | 根據傳入的數據,處理卷積層 |
gen_pytorch_concat() | 根據傳入的數據,處理拼接層 |
gen_pytorch_reshape() | 根據傳入的數據,處理reshape層 |
gen_pytorch_softmax() | 根據傳入的數據,處理softmax層 |
gen_pytorch_pooling() | 根據傳入的數據,處理pooling層 |
gen_pytorch_dense() | 根據傳入的數據,處理全連接層 |
pytorch_inputs() | 存儲輸入層的代碼,返回給前端(其他層相似,不再贅述) |
六、運行環境
- 該項目的運行基本要求是網絡環境,但對瀏覽器沒有特定的要求。前端使用的Bootstrap擁有完備的框架結構,具有和諧的整體效果,無論是火狐、谷歌、IE瀏覽器都是支持的。
七、錯誤處理
- 對錯誤進行分類處理,目前定義的錯誤類型有:
錯誤類型 | 錯誤原因 |
---|---|
OutofboundaryException | 越界錯誤(例如圖形的數量越界) |
StoreException | 保存模型代碼出現錯誤 |
WronginterException | 輸入錯誤(例如畫布中有未連接圖形) |
PyException | 生成錯誤的模型 |
八、耦合以及應對變化的靈活性
- 將接口和方法封裝成對應函數,保證了獨立性和耦合性。我們使用的bootstrap和django都是擴展性較好的框架,對於后續其他功能的實現並沒有什么負擔,如果對已有的核心功能進行加強和更新,也不會對接口進行更改,pytorch實現的模型代碼也不會有變動。因此,對變化的靈活性應當是較好的。