# 毕设需求 ## 设计思考 1. 《深度学习的数学》一书中的如“用 Excel 体验…”应该都能够改写成可视化程序 2. 基础概念部分的章节和知识点按照《深度学习的数学》的章节进行划分 3. 工具只学习tensorflow ## 3.12 ### 知识点列表 指导思想: 1. 尽量不让用户进行具体的数值计算 2. 算法的模拟要注重显示流程 ### 模块重划分 1. 学习模块 - PPT 系统:实现了阅读 PPT,选择题、判断题等功能(由其他同学完成) - 互动可视化模块:实现可视化的能够互动的程序(类似[Learn Git Braching](https://learngitbranching.js.org/)) 2. 作业模块 - 做题功能:WebIDE 或通过 Gitlab 进行提交(已经由学长基本实现) - 可视化功能:将做题结果进行可视化,如最后的模型图 #### 互动可视化模块设计 1. 基础概念部分:将《深度学习的数学》一书中所有的“用 Excel 体验…”改写成可视化程序 - 书中使用 Excel 对算法进行模拟,对算法步骤进行了很清晰、直观的划分,非常适合改写成类似 Learn Git Branching 的程序 2. Tensorflow 部分 ## 功能概述 ### 学习子模块 #### 学习子模块功能图 ![uml-readings](./img/uml__readings.png) #### 功能列表 | 功能 | 描述 | | ------------------ | ------------------------------------------------------------ | | 教师管理教程 | 教师对教程进行增、删、查、改(教程以 Markdown 文档的格式进行管理) | | 学生阅读教程 | 学生阅读教程内容进行学习 | | 教师管理小练习 | 1.对练习进行增、删、查、改
2.查看学生完成情况(个人 + 整体统计) | | 学生进行小练习 | 1.进行练习
2.查看结果和统计信息 | | 算法可视化 | 对算法过程进行可视化 | | 神经网络模型可视化 | 对神经网络模型进行可视化,参考 [TensorFlow playground](http://playground.tensorflow.org/) | ## 功能描述 ### 教师管理教程 - 教师对教程进行增、删、查、改(教程以 Markdown 文档的格式进行管理)。 #### 刺激/响应序列 - 刺激:用户选择查看已有教程 - 响应:系统显示已有教程文档列表 - 刺激:用户请求对教程列表排序和过滤 - 响应:系统显示排序后的教程列表 - 刺激:用户请求查看某文档具体内容 - 响应:系统显示该文档内容 - 刺激:用户输入关键字请求对文章按照文章名称进行搜索 - 响应:系统显示搜索结果 - 刺激:用户请求创建新的教程文档 - 响应:系统显示新建文档表格,要求用户填写文档相关信息 - 刺激:用户填写新建文档信息后请求提交 - 响应:系统显示新建文档提交结果 - 刺激:用户请求删除某文档 - 响应:系统显示删除结果 - 刺激:用户请求修改某文档信息 - 响应:系统显示修改文档信息表格,要求用户填写 - 刺激:用户填写完成修改文档信息表格请求提交 - 响应:系统显示修改文档结果 #### 相关功能需求 | 需求 | 描述 | | -------------------------------------- | ------------------------------------------------------------ | | Readings.Teacher.Request.List | 系统应该允许用户查看教程列表 | | Readings.Teacher.Request.Content | 系统应该允许用户查看某份教程的具体内容 | | Readings.Teacher.Request.Search | 系统应该允许用户对某个教程进行搜索(按照教程的名称) | | Readings.Teacher.Request.SortAndFilter | 系统应该允许用户对教程列表进行排序和过滤(排序的域有:名称、时间、章节) | | Readings.Teacher.New | 系统应该允许用户创建新的教程。用户需要提交的信息有:教程名称、教程的具体内容、教程所属章节 | | Readings.Teacher.Delete | 系统应该允许用户删除已有教程 | | Readings.Teacher.Commit | 系统能够记录教程的信息:教程名称、创建时间、最后一次改动时间、教程内容、提交人、最后一次改动的发起人 | | Readigns.Teacher.Modify | 系统应该允许用户对现有教程进行修改,能够修改的内容包括:教程名称、教程所属章节、教程的具体内容 | ### 学生阅读教程 #### 刺激/响应序列 - 刺激:用户请求查看已有教程 - 响应:系统显示现有教程列表 - 刺激:用户请求查看教程具体内容 - 响应:系统显示教程具体内容 - 刺激:用户请求对教程进行搜索、过滤或排序 - 响应:系统显示搜索、过滤或排序的结果 #### 相关功能需求 | 需求 | 描述 | | ------------------------------ | ------------------------------------------------------------ | | Readings.Student.List | 系统应该允许用户查看教程列表 | | Readings.Student.Search | 系统应该允许用户对教程进行搜索(按照名称进行搜索) | | Readings.Student.SortAndFilter | 系统应该允许用户对教程列表进行排序和过滤(排序的域有:名称、时间、章节) | | Readings.Student.Content | 系统应该允许用户查看某份教程的具体内容 | ### 教师管理小练习 - 对练习进行增、删、查、改 - 查看学生完成情况(个人 + 整体统计) #### 刺激/响应序列 - 刺激:用户请求查看某练习题 - 响应:系统显示该练习题内容 - 刺激:用户请求创建新的练习题 - 响应:系统显示新建练习题表单,要求用户填写 - 刺激:用户完成填写新建练习题表单后请求提交 - 响应:系统显示新建练习题结果 - 刺激:用户请求修改练习题 - 响应:系统显示修改练习题表单要求用户填写 - 刺激:用户完成填写修改练习题表单后请求提交 - 响应:系统显示修改练习题结果 - 刺激:用户请求删除某练习 - 响应:系统显示删除结果 - 刺激:用户请求查看某练习的学生完成情况 - 响应:系统显示该练习学生完成情况列表 - 刺激:用户请求查看某学生在某练习上的具体完成情况 - 响应:系统显示该学生在该练习上的具体完成情况 #### 相关功能需求 | 功能 | 描述 | | ------------------------------ | ------------------------------------------------------------ | | Exercise.Teacher.Create | 系统应该允许用户为某个教程创建新的练习题。创建练习时需要填写的信息包括:题目类型(主观、客观)、题目形式(单选、多选、填空)、题目描述、参考答案(客观题为必填,主观题为可选)、题目分数、允许提交次数 | | Exercise.Teacher.Content | 系统应该允许用户查看某一教程的所有练习题 | | Exercise.Teacher.Delete | 系统应该允许用户删除某一教程的所有练习题(单个练习题的删除并入修改练习题的范围) | | Exercise.Teacher.Modify | 系统应该允许用户修改某一教程的练习题。能够修改的内容包括所有创建时需要填写的信息,以及能够删除某道练习题 | | Exercise.Teacher.Record | 系统应该记录用户修改或创建练习题的行为信息,包括:创建时间、修改时间、操作用户身份信息(ID) | | Exercise.Teacher.Result.All | 系统应该允许用户查看所有学生在某一练习上的完成情况。每个学生的完成情况包括:最后得分、学生身份信息(ID) | | Exercise.Teacher.Result.Person | 系统应该允许用户查看某一学生在某练习上的具体完成情况。具体完成情况包括:每次练习的完成情况(参考 Exercise.Student.ShowResult)、学生身份信息(ID)、最后得分 | ### 学生进行小练习 - 进行练习 - 查看结果和统计信息 #### 刺激/响应序列 - 刺激:用户选择某章节练习并请求开始 - 响应:系统显示练习内容等待用户作答 - 刺激:用户完成练习后请求提交 - 响应:系统显示提交结果 - 刺激:用户请求查看某次练习完成情况 - 响应:系统显示此次练习中用户的完成情况 - 刺激:用户请求查看所有练习结果的统计信息 - 响应:系统显示所有练习完成情况的统计信息 #### 相关功能需求 | 功能 | 描述 | | --------------------------- | ------------------------------------------------------------ | | Exercise.Student.Do | 系统应该允许用户进行练习并提交完成结果 | | Exercise.Student.ShowResult | 系统应该允许用户查看某次练习的完成情况。完成情况包括的信息有:总分数、每道题目得分、每道题目的参考答案以及用户的答案 | | Exercise.Student.Statistics | 系统应该允许用户查看所有练习完成情况的统计信息。需要统计的信息有:已经完成的练习、尚未进行的练习、已完成练习的分数列表 | | Exercise.Student.RecordAll | 系统应该能够记录用户所有的答题情况(包括同一练习的多次作答)。答题情况和 Exercise.Student.ShowResult 中的完成情况一致 | ## 可视化设计 考虑的方面: 1. 展示的要点 2. 能够互动的内容 ### 梯度下降 1. 体现要点 - 下降方向选择梯度方向时下降速度最快 - 不合适的步长所引发的“震荡”现象 - 实现三维坐标系(可选) - 每一步的计算过程 2. 能够互动的内容 - 用户能够在某一次的下降中选择下降方向,与下降方向不为梯度方向时的下降量进行对比 3. 布局设计 ![chart-gd](./img/chart-design--gd.svg) - 函数图:图像化梯度下降过程 - 流程图:展示计算梯度下降的步骤 - 计算过程:展示每一轮的计算结果 ## 知识点列表 - 梯度下降 - Logistic Regression - SVM - BP - CNN ## 用例 ### 用例列表 | 用例编号 | 用例名称 | 参与者 | | -------- | ---------------- | ------ | | 1 | 学习 AI 教程 | 学生 | | 2 | 完成章节作业 | 学生 | | 3 | 查看作业提交详情 | 学生 | | 4 | 管理作业信息 | 教师 | | 5 | 查看作业完成情况 | 教师 | ### 详细用例描述 #### 用例1 学习 AI 教程 | 条目 | 内容 | | :----------: | :----------------------------------------------------------- | | ID | 1 | | 创建者 | 廖均达 | | 时间 | 2020.2.28 | | 名称 | 学习 AI 教程 | | 最后更新者 | 廖均达 | | 最后更新日期 | 2020.2.28 | | 参与者 | 学生 | | 触发条件 | 用户需要学习系统提供的 AI 知识 | | 前置条件 | 用户已经经过学生身份验证 | | 后置条件 | 无 | | 优先级 | 高 | | 正常流程 | 1. 用户选择进行学习
2. 系统显示章节列表
3. 用户选择某一章节进行查看
4. 系统显示该章节相关 AI 知识内容 | | 扩展流程 | 4a. 如果该章节存在可视化小程序,用户可点击查看可视化程序
 1. 系统提示满意度选项不能为空,要求用户重新输入
4b. 用户选择进行该章节小练习
 1. 系统显示该章节练习题
 2. 用户完成练习并提交
 3. 系统显示练习结果,包括分数,每道练习题的评分,正确答案 | | 特殊需求 | 无 | #### 用例2 完成章节作业 | 条目 | 内容 | | :----------: | :----------------------------------------------------------- | | ID | 2 | | 创建者 | 廖均达 | | 时间 | 2020.2.28 | | 名称 | 完成章节作业 | | 最后更新者 | 廖均达 | | 最后更新日期 | 2020.2.28 | | 参与者 | 学生 | | 触发条件 | 用户希望进行章节作业 | | 前置条件 | 用户通过学生身份验证 | | 后置条件 | 更新作业提交记录 | | 优先级 | 高 | | 正常流程 | 1. 用户选择开始作业
2. 系统显示章节列表
3. 用户选择某一章节进行查看
4. 系统显示该章节作业列表
5. 用户选择列表中的某一作业
6. 系统显示作业内容,包括作业描述,评分标准
7. 用户完成作业并提交
8. 系统显示提交结果 | | 扩展流程 | 7a. 用户通过 Git 提交作业
 1. 系统构建用户作业并显示结果
7b. 用户通过 Web IDE 提交作业
 1. 系统构建用户作业并显示结果 | | 特殊需求 | 无 | #### 用例3 查看作业提交详情 | 条目 | 内容 | | :----------: | :----------------------------------------------------------- | | ID | 3 | | 创建者 | 廖均达 | | 时间 | 2020.2.28 | | 名称 | 查看作业提交详情 | | 最后更新者 | 廖均达 | | 最后更新日期 | 2020.2.28 | | 参与者 | 学生 | | 触发条件 | 用户需要查看某次作业提交详情 | | 前置条件 | 用户已经经过学生身份验证且该作业已经提交过至少一次 | | 后置条件 | 无 | | 优先级 | 高 | | 正常流程 | 1. 用户进入某项作业选择查看提交情况
2. 系统显示改作业所有提交记录,一项提交记录包括:提交时间、评分
3. 用户选择某一提交记录进行查看
4. 系统显示该次提交详情
 4.1. 用户选择查看某测试用例结果
 4.2 系统显示该测试用例详情,包括:测试输入,期望输出与用户的实际输出
 4.3 用户选择查看此次提交的代码
 4.4 系统显示此次提交的代码
 4.5 用户选择修改代码
 4.6 系统将该次代码拷贝到该次作业的 WebIDE 中,作业提交流程参考用例 3 | | 扩展流程 | 4a. 如果该次作业成功构建并存在可视化模型,用户可点击查看可视化模型
 1. 系统显示可视化模型
| | 特殊需求 | 无 | #### 用例4 管理作业信息 | 条目 | 内容 | | :----------: | :----------------------------------------------------------- | | ID | 4 | | 创建者 | 廖均达 | | 时间 | 2020.2.28 | | 名称 | 管理作业信息 | | 最后更新者 | 廖均达 | | 最后更新日期 | 2020.2.28 | | 参与者 | 教师 | | 触发条件 | 用户需要发布、修改 | | 前置条件 | 用户通过教师身份认证 | | 后置条件 | 更新作业信息 | | 优先级 | 高 | | 正常流程 | 1. 用户发布作业
 1.1 用户选择发布作业
 1.2 系统显示作业信息表格等待用户填写,需要填写的信息包括:作业描述,评分标准,测试用例(或测试数据),截止时间
 1.3 用户填写表格并提交
 1.4 系统显示提交结果
2. 用户修改作业信息
 2.1 用户选择修改作业信息
 2.2 系统显示作业修改表格,可修改的信息与发布时需填写的信息一致
 2.3 用户提交修改
 2.4 系统显示提交结果 | | 扩展流程 | 无 | | 特殊需求 | 无 | #### 用例5 查看作业完成情况 | 条目 | 内容 | | :----------: | :----------------------------------------------------------- | | ID | | | 创建者 | 廖均达 | | 时间 | 2020.2.28 | | 名称 | 查看作业完成情况 | | 最后更新者 | 廖均达 | | 最后更新日期 | 2020.2.28 | | 参与者 | 教师 | | 触发条件 | 用户需要查看某次作业学生的完成情况 | | 前置条件 | 用户通过教师身份认证 | | 后置条件 | 无 | | 优先级 | 高 | | 正常流程 | 1. 用户选择查看作业完成情况
2. 系统显示作业列表
3. 用户选择某次作业进行查看
4. 系统显示该次作业描述以及作业提交情况总览,包括:1. 提交人数 2.已提交作业的学生的姓名、学号、最后得分、提交时间
5. 用户选择某个学生查看详细信息
6. 系统显示该学生作业完成情况的详细信息,包括:1. 所有提交记录 2.最高分提交记录的代码、测试正确率
7. 用户选择生成成绩报告
8. 系统生成成绩报告并发送给用户 | | 扩展流程 | 6a. 用户选择查看历史提交记录中的某次提交详情
 1. 系统显示该次提交的详细信息,包括:代码,测试正确率 | | 特殊需求 | 无 | ## 界面原型图 ### 学生 1. 学习系统主界面 ![dashboard--readings](./img/dashboard--readings.png) 2. 学习系统某一章节详情(包括教程文本、小练习和可视化程序) - 教程文本界面如下 ![readings](./img/readings--text.png) 3. 作业系统主界面 ![dashboard--assignments](./img/dashboard--assignments.png) 4. 某次作业界面(包括题目描述、提交记录和 WebIDE) - 提交记录界面如下 ![assignments](./img/assignments.png) 5. 作业提交详情 ![assignments--commit-detail](./img/assignments--commit-detail.png) ### 教师 1. 发布作业 ![new-assignment](./img/teacher--new-assignment.png) 2. 查看作业完成情况 - 某学生详细的完成情况参考界面4的提交记录界面和提交详情界面 - 提交总览界面如下 ![teacher--assignment-list](./img/teacher--assignment-list.png) 学习系统 1. 把学习系统拆成很小的片,学完之后就能立马练习,不能是一下给许多教程,而是将内容切成很小的片,能够让同学进行练习 2. 把学习内容细分,能够一步一步引导用户进行学习 3. 把练习的粒度切的小一点 4. 教学系统:尽量使用模拟环境 5. 代码系统:尽量使用真实环境 6. 分两个系统 1. 作业系统 2. 学习系统 1. 介绍基本内容,概念(深度学习的数学) 2. 学习 tensorflow 的内容 7. 重点不是题目,而是”可以看到网络“ 8. 模拟:用 Java 或 python 来模拟网络的运算 9. 把 ppt 系统变成一个学习系统。学习系统应该是一个整体。 10. 机器学习的数学 --> 概念 --> 工具 - 每个话题 11. 作业系统 - 模拟 - 软工二系统 - 能够和学习系统挂接 12. 学习系统有共性的,但是有很大的不一样的 - 我们需要显示网络 还是独立的系统,还不是一个整体的系统