前言:想要写出一篇令人眼前一亮的文章吗?我们特意为您整理了5篇卷积神经网络可视化范文,相信会为您的写作带来帮助,发现更多的写作思路和灵感。
随着时代的发展,构建在互联网生态模式之上的云计算、大数据、人工智能等新技术,正渗透到每一个行业,引发产业生产、服务模式的变革,并且已经取得一系列重要成果。在此背景下,大学教学如何跟上时代步伐,是值得每一个高校教师深入思考的问题。程序设计作为计算机专业大学生的必修课程和必须掌握的基本技能,其教学改革在新时代下尤显必要。
传统的大学教学中,一直都以C/C++或Java作为教学语言。诚然,C/C++和Java是当今使用人数最多的语言,但在“互联网+”时代,面对大数据分析时,特别是面对数据采集、仿真建模、结果验证与数据可视化时,他们就不再是最佳选择。
Python作为一种解释型超高级语言,具备交互式、可移植、面向对象的特点。它功能强大,适用于多种操作系统,有完善丰富的工具包,正在得到越来越多的应用,而且越来越被重视。2017年4月,北京理工大学计算机学院和高等教育出版社联合承办了“第一届高等学校Python语言及计算生态教学研讨会”,提出了计算生态的概念[1],大力推动了Python教学。在此背景下,根据我们在Python教学和科研中的应用经验,对如何进行基于Python计算生态的教学改革进行探讨。
1 Python语言的兴起与优势
从20世纪中期到今天,短短的70年间,电子计算机经历了飞速的发展,出现了许多不同的程序设计语言,例如Pascal、Fortran、C、C++、Java、PHP、C#等,这些不同的语言,都体现了不同的设计哲学,也反映了不同的时代特点。
然而,每种程序设计语言都有其局限性。Python的设计者Guido von Rossum希望有一种语言,既具有C方便地调用计算机功能接口的能力,又可以像一些脚本语言一样轻松地编程。Python正是在这种背景下被创造出来。
同C/C++和Java等语言相比,Python有以下优势:
(1)简单易学。Python是一种代表简单主义思想的语言,语法简单,学习起来容易上手。这使学生能够专注于解决问题而不是学习语言本身。
(2)解释性。Python写的程序不需要编译成二进制代码,可以直接从源代码运行程序。这使得Python更加简单,更易于移植。
(3)面向对象。Python既支持面向过程的编程,也支持面向对象的编程。
(4)可扩展性。为了提升运行效率,可以采用C/C++来编写关键代码,然后在Python程序中使用它们。
(5)混合编程。Python被称为胶水语言,是由于可以很容易地将Python与其他语言进行混合编程。这样方便地利用已有的各种工具包,提高开发效率。
(6)丰富的库。Python有强大的标准库,并且Python的生态系统开始拓展到第三方包,例如用于Web框架的web.py ,用于科学计算的numpy,以及用于数据可视化的matplotlib等。
Python作为一种跨平台编程语言,已经被移植在以Linux、Windows、Mac、Android为代表的许多平台上。由于Python的开放性,有丰富的来自开源社区的成熟库支持,从而可以基于Python完成各种工作,例如数据采集(如网络爬虫)、图像处理、机器学习、科学计算等。
2 针对Python的应用支持与国内外课程建设情况
正由于Python具有上述优点,它获得了业界的广泛支持。例如在Google公司,Python是继C++和Java之后,使用率排名第三的编程语言,使用Python的开发团队也是Google的第三大研发部门。
(1)Tensorflow:TensorFlow是由Google Brain小组开发的用于机器学习和深度神经网络的工具。据统计,Tensorflow是目前使用人数最多的开源深度学习框架[2]。TensorFlow本身是使用C++实现的,然后用Python封装。Tensorflow可以根据用户给出的所有指令创建一个计算图,该图被内部优化和编译成可执行的C++代码。这样Tensorflow就可以利用Python 带来的开发速度和C++带来的执行速度。
(2)Google App Engine:Google App Engine(GAE),是谷歌推出的云平台,它完全把CPU、内存等硬件基础设施抽象化,这样只需要关注代码的编写,不需要关注硬件、操作系统或者物理位置。Python是GAE最早支持编程的语言之一,任何使用Python编写的程序,都可以配合Google Python API,很方便地在GAE上创建、部署、运行Python程序。
(3)Caffe(Convolutional Architecture for Fast Feature Embedding):Caffe是由Berkeley AI Research(BAIR)和Berkeley Vision and Learning Center (BVLC)社?^贡献者开发的另一个深度学习框架。同Tensorflow一样,Caffe也是采用C++进行编写,然后提供Python封装,从而既可以利用C++的高执行效率,也可享受Python的高开发效率。
(4)在好莱坞,工业光魔公司(Industrial Light) 采用Python制作商业动画,在“阿贝斯(Abyss)”“星球之旅(Star Trek)”“Indiana Jones”等超级大片中惊艳登场。
(5)ERP和CRM软件的开发也开始基于Python完成;Red Hat曾用Python和Tk一起成功开发配置和管理操作系统的可视界面,整个系统可以全面控制Linux操作系统,并根据用户选择对配置文件作自动更新。
正由于Python是受到业界的欢迎,国外很多高校(如麻省理工学院、斯坦福大学、加州大学洛杉矶分校等)已经用Python作为程序设计语言的教学对象。在Coursera等在线教育平台上,可以发现有来自密歇根大学、莱斯大学、约翰霍普金斯大学等众多高校的Python课程;国内南京大学张莉老师的课程也在其中。然而国内这方面的工作做得还远远不够。截至2015年,我国开设Python语言教学的高校不超过10所[3]。目前在国内大力推动Python教学改革的主要有北京理工大学嵩天老师等人,已编著并出版相应的大学教材[4],受到广泛欢迎。哈尔滨工业大学车万翔老师等人分析了C语言作为入门语言的不足和Python作为入门语言的优势,阐述了计算机专业高级语言程序设计课程的改革方案和实施效果[5]。南京大学张莉老师发表了《基于MOOC的“用Python玩转数据”翻转课堂实践与研究》,研究证明:采用Python教学可以较好地提高学生的主动学习能力、学习兴趣和热情以及问题求解能力[6]。
3 基于Python的教学科研应用改革案例
3.1 输入输出
输入输出(I/O)是每个程序都必须具备的重要功能。常见的I/O可以分为3类:标准I/O(终端打印等)、文件I/O和网络I/O。以?K端I/O为例:
/* Basic I/O in C */
#include
int main()
{
char name[20]; /* char数组,保存第一行输入,作为名字输出 */
scanf("%s", name); /*读取第一行输入 */
printf("Hello %s\n", name);
return 0;
}
以上用C语言编写的有效代码共计8行,输入输出都采用标准库函数。由于C语言本身设计方面的缺陷(如果第一行输入超出char数组大小),可能导致严重的缓冲区溢出问题。针对这一问题,C++对数组越界进行了保护,从而提高系统安全性。
如果采用Java实现,则有效代码共10行。由于Java的面向对象编程思想,下面这个示例程序中多了很多对象构造的流程,引用的库看起来也相对较多,如下所示。我们只需要对这段代码进行稍微修改,就可以实现网络I/O和文件I/O。例如,替换“System.in”,就能够实现对文件或者网络流读取。将“Reader”和“InputStream”替换,就能够实现写入。
/ * Basic I/O in Java */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class HelloWorld {
public static void main(String[] args) throws Exception { /*所有Java程序的入口函数 */
/* 新建输入对象,用来读取标准输入。其中对象构造有嵌套*/
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String name = reader.readLine(); /* 读取第一行输入 */
System.out.printf("Hello %s\n", name);
}
}
相比之下,基于Python的代码则非常短小简洁:
/* Basic I/O in Python */
import sys
name = sys.stdin.readline() /* 读取第一行输入 */
print("Hello " + name)
有效代码仅仅只有3行!同样,替换其中的“sys.stdin”可以实现对文件读取。对于动态类型的Python来说,所有的变量都不需要繁复的声明,直接用就可以,再加上解释执行的特点,无需定义入口函数即可运行。
以上是对C/C++、Java、Python在基本终端I/O操作上的比较,当推广到文件I/O和网络I/O后,Python的优势会更突出,详见表1。
3.2 数据操作
数据处理是大数据时代我们面临的首要问题。然而,由于信息化系统建设过程中,数据可能以不同的结构存在,可能是纯文本文件、CSV格式,也可能是Excel格式,或者是各种不同厂商的数据库格式。
当然,可以采用C++或Java来读取各种异构数据源,但过程相当繁琐,需要利用各种底层驱动,甚至是一些商业化组件。以Excel文件读取为例,为了处理Excel数据,C/C++代码需要用到libxl商业库,而Java也需要用到Apache POI开源库。而利用Python对Excel文件进行读取则需要利用Pandas开源数据处理分析库,示例代码如下:
/* Read Excel in Python */
import pandas
df = pandas.read_excel('sample.xls')
print df.columns /* 输出列名 */
values = df['列名'].values /* 获取某一列的所有数据 */
FORMAT = ['列名1', '列名2', '列名3'] /* 获取指定列组成的数据帧 */
df_selected = df[FORMAT]
总的来说,在数据库操作方面,C++、Java和Python的支持都非常好。C++和Java都为SQL提供了标准的连接、驱动管理类,不同的数据库只需要加载不同的驱动就可以。Java对数据库有比较好的语言级别支持,相应的驱动也比较丰富。Python也提供语言级别的支持,同时第三方库十分丰富,甚至一种数据库有多个不同的连接库。另外值得一提的是, 尽管当前很多流行的分布式大数据平台及分布式数据库使用Java编写,但利用Python同样能够方便地基于第三方库实现操作Hbase、Hive以及其他非关系数据库,如Mongodb、Redis等,这种特点是C/C++不能比拟的。表2为Python与C++、Java在数据库操作上的比较。
由于Python对各种文件和数据库的支持都非常好,它十分适合编写数据库之间,数据库与文件之间相互导入导出数据的脚本,是大数据处理的首选语言。
3.3 数据可视化
丰富的可视化数据图形能够更好地对数据进行展示。利用数据可视化,可方便分析人员从宏观上了解数据的形态和分布,或者进行最后的结果展示。
Python提供了丰富的数据可视化工具,如pandas、Seaborn、Bokeh、matplotlib等。下面以matplotlib为例说明如何利用Python完成数据绘图与可视化。
假定我们要展现的数据用CSV格式保存,内容见表3。目标是基于matplotlib进行直观的数据总体分布展示,例如利用直方图统计年龄分布、利用箱体图展示薪资水平、利用散点图绘制年龄与收入的相关关系。完整代码如下:
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv("example.csv") /* ?x取数据 */
fig = plt.figure()
ax1 = fig.add_subplot(1,4,1) /* 定义展示布局 */
ax1.hist(df["Age"], bins = 5) /* 定义直方图 */
plt.axis([20,45,0,5])
plt.title("Age distribution")
plt.xlabel("Age")
plt.ylabel("Employee")
plt.show()
ax2 = fig.add_subplot(1,4,2) /* 确定图在画布中的位置 */
ax2.boxplot(df["Age"]) /* 定义箱线图 */
ax3 = fig.add_subplot(1,4,3)
ax3.bar(df["Age"],df["Income"]) /* 定义条形图 */
ax3.set_title("Income distribution")
ax3.set_xlabel("Age")
ax3.set_ylabel("Income")
ax4 = fig.add_subplot(1,4,4)
ax4.scatter(df["Age"],df["Income"]) /* 定义散点图 */
ax4.set_title("Income distribution")
ax4.set_xlabel("Age")
ax4.set_ylabel("Income")
plt.show()
得到的可视化效果如图1所示。
Python的开放性还表现为利用支持库,实现如图1所示的各类统计效果和复杂的展示(如地图、热力图以及复杂网络等)。此外,除了构建在Python之上的原生库,还有大量其他的数据可视化工具包(如基于Javascript的Plot.ly、百度的Echart等),这些工具包同时也提供Python的调用封装,丰富了基于Python的可视化效果,体现了强大的Python计算生态。
3.4 图像处理与深度神经网络
深度学习的出现点燃了研究者对神经网络和机器学习的研究热情,特别是基于Google Tensorflow的AlphaGo接连击败世界围棋冠军,更加吸引了人们对深度学习的关注。在深度学习领域,很多优秀的开源平台与框架(如Tensorflow、Caffe、Theano、MXNet等)都提供Python接口。这也从侧面反映出Python计算生态已经建立。下面以Tensorflow提供的Python接口为例,介绍Python在图像处理与深度神经网络方面的应用。
卷积神经网络是深度学习的一个重要模型。Tensorflow已经屏蔽了关于卷积神经网络的具体结构,如神经元函数、拓扑连接状态等。程序员只需要通过参数指定,就能完成网络模型的设计,例如
conv1 = tf.layers.conv2d(inputs=input_layer,filters=32,kernel_size=[5, 5], padding="same",activation=tf.nn.relu)
pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)
通过设置输入层ID、激活函数、padding方法、核大小等参数,就可以唯一确定输入层、卷积层、池化层,再通过调整参数并选择一定的学习算法,结合pillow、scikit-image等基于Python的图像处理工具包,从而可以利用深度网络自动完成特征学习,完成模式识别或图像分类工作。
关键词: 数字信号处理课程 教学改革 优化知识结构 加强实验教学 综合化教学模式
数字信号处理所涉及的内容非常繁多、广泛。其所应用的数学工具涉及微积分、随机过程、数值分析、复变函数和各种变换等;其理论基础包括网络理论、信号与系统、神经网络等;其应用领域包括通信、雷达、人工智能、模式识别、航空航天、图像处理、语音处理等。在GSM手机中应用数字信号处理技术可将语音压缩至13kps;在语音信箱、留言电话方面也均可以采用数字信号处理技术。
学生在学习数字信号处理课程时,常常会觉得枯燥乏味,不仅觉得概念抽象,而且对其中的分析方法与基本理论不能很好地理解与掌握。为了有利于学生系统地理解和掌握课程中的基本内容,充分锻炼实验的应用能力,我对数字信号处理课程的教学进行了针对性的改革与探讨。
1.优化知识结构
数字信号处理课程中知识点比较多,数学推导十分复杂。我通过对本门课程进行深入研究,类比各知识点,发现有一条线路贯穿于课程之中,只要在课程教学中把握好这条线路,复杂的数学推导将会变得清晰,容易识记。我将该课程优化成两大模块:变换域的知识结构和数字滤波器的知识结构。
1.1变换域的知识结构
变换域的知识结构是该课程的第一大模块结构。先引入时域离散信号与系统,通过时域采样定理对模拟信号进行采样得到离散时间信号(序列)内容进行展开讨论,对于几种典型序列和时域离散系统性质:线性、时不变、因果性和稳定性进行重点介绍。其次讲述DTFT、DFS、ZT(IZT)、DFT变换的定义、性质和定理。其中每个变换都遵循严密的数学推理,都围绕着变换的定义、性质和定理展开内容讲解。在教学过程中除了详细讲解各个知识点之外,还要建立之间的联系,归纳出变换之间的联系如图1所示。在建立联系时不仅要从数学公式上进行变换证明,而且要用物理意义进行直观的讲解,使学生能够完全掌握。例如DTFT是单位圆上的Z变换,DFT是DTFT的等间隔采样,等等。
1.2数字滤波器的知识结构
数字滤波器的知识结构是该课程的第二大模块结构,其主要围绕数字滤波器网络结构及其设计方法展开讨论。数字滤波器的网络结构分为:IIR网络结构和FIR网络结构。通过状态变量分析法对网络结构进行分析,确定状态变量,求出状态方程和输出方程。应用脉冲响应不变法和双线性变换法设计低通、带通IIR数字滤波器,分析理解两种具体方法的特点和区别,与分别设计的数字滤波器的频域特性。窗函数法和频率采样法是设计FIR滤波器基本方法,通过实验使学生熟悉线性相位FIR滤波器的幅频特性和相频特性,了解不同窗函数对滤波器性能的影响。数字滤波器的设计和网络结构分析如图2所示。
2.加强实验教学
数字信号处理课程中的理论和结论大都是经过数学推导得来的,比较抽象,也较难理解。MATLAB语言对诸如离散线性卷积、循环卷积、抽样定理、对Z变换进行等间隔采样实现DFT、数字滤波器设计等一系列问题都可通过图形建模使之可视化。实验教学平台可以选择MATLAB软件平台和DSP硬件平台,MATLAB软件平台主要用来演示数字信号处理的概念、性质和原理。例如序列的傅立叶变换、Z变换、离散傅立叶变换的概念和性质等;硬件平台主要实现数字信号处理的算法,例如卷积、FFT算法、FIR滤波器和IIR滤波器设计方法等。
2.1基于MATLAB基础理论实验
数字信号处理课程具有理论性强和应用性强等特点,在教学中教师要加强理论教学。实验教学的设计可以更好地让学生理解理论教学内容,具有启发性,能培养学生的思考能力和科研能力。
针对理论知识点的内容,可将实验各部分的内容划为:系统响应及系统稳定性;时域采样与频域采样;用FFT对信号作频谱分析;IIR数字滤波器设计及软件实现;FIR数字滤波器设计与软件实现。对于所涉及的实验教学内容,要突出强调对实验结果的“物理意义”的理解,使知识点覆盖基本完整且重点突出。
2.2综合性课程设计
在基础理论实验的基础上,为了充分调动学生主动学习的积极性,提高学生钻研科学的兴趣,综合性课程设计是非常有必要的。其可以充分发挥学生的主观能动性,更有利于培养他们独立思考、善于创造、综合运用知识的能力。
根据数字信号处理在双音多频拨号系统中的实际应用,我进行了综合性、设计性实验的探讨。双音多频(Dual Tone Multi Frequency,DTMF)信号是音频电话中的拨号信号。DTMF信号系统是一个典型的小型信号处理系统,它用数字方法产生模拟信号并进行传输,其中还用到了D/A变换器;在接收端用A/D变换器将其转换成数字信号,并进行数字信号处理与识别。
3.综合化教学模式
由于数字信号处理的DTFT、DFS、ZT(IZT)、DFT变换的定义、性质和定理和数字滤波器设计的内容涉及的公式繁多、概念抽象,在学习过程中,学生对其都具有犯难情绪,因而在授课中需要采用形象化教学方法、多样化教学手段、创造自主化学习情境,提高学生的学习兴趣,帮助学生理解公式的物理意义,便于对知识的识记和应用。
3.1形象化教学方法
数字信号处理课程中大量的抽象概念都是用繁琐的公式来描述,其推导过程也相当复杂。在实际的教学中,教师需要采用课程板书的形式,让学生跟上你的思路一步一步去解析公式,完全细化每一个变换的来源。而不是急于把最新的知识、最新的技术一股脑地塞给学生。教师在教学中,必须从公式所代表的具体意义去理解公式,注重物理意义的表达,也要相信学生在打好基础后,能举一反三,学一知十,例如:X(k)=X(e)|k=0,1,…,N-1,说明X(k)为x(n)的傅里叶变换X(e)在区间[0,2π]上的N点等间隔采样。在讲解相关抽象化的知识点时,教师可采用绘制波形图或框图的方法将抽象概念形象化,用直观图形进行解读公式的意义。在教学中,教师可采取合理应用形象化的方法,培养学生看到公式可以联想到公式的物理意义,突破公式难懂难记的问题。
3.2多样化教学手段
在习题课和一些基本原理、基本方法的推导和证明中,教师要采用课堂板书形式,解答思路清晰,在板书的过程中,也要留给学生足够的时间进行领会。
对于难以理解的抽象概念,需要用形象化的图形来进行解析,采用多媒体教学手段,可以节约大量的板书时间,可以化抽象为形象,化枯燥为生动,增加课堂信息量,使学生把重点放到加深对抽象概念的理解上。同时,PPT要有一定的吸引力,比如适当地粘贴一些图片性内容,远比文字要形象和生动,还可以粘贴一些调节气氛的有意思图片,但不可太花哨,速度要放慢,讲一行放一行,切不可地所有的一次都放出来,否则容易误导学生去费劲地阅读PPT上的文字。多媒体教学手段与传统的板书教学相融合,不但可以发挥多媒体手段信息量大、形象、直观等优势,而且板书可以对多媒体的推导细节进行补充,放慢上课节奏,使教学逻辑更严密、交互性更强,其实际效果比单独使用其中的一种都要好。
3.3自主化学习情境
在实际教学中,教师要站在学生的立场上,找到学习入门的最好切入点:结合课堂提问、作业布置、习题讲解等手段,使学生达到基本的教学要求。适当地提问,可以检验学生学得怎么样,将学生的状况及时的反馈给老师,老师再适当地在教学中作调整,将取得很好的教学效果,同时也可加强与学生的双向交流,活跃课堂气氛。
由于该门课程比较抽象,公式又相对繁琐,单靠课堂讲解学生当时可能听得明白,但是课后若不加以巩固,掌握情况也不会太理想,因此每次课后要给学生布置适量的作业,通过批改作业来发现存在的问题并及时解决。
3.4完善化考试模式
本门课程的成绩考核采取传统模式,即由平时表现成绩、期末笔试成绩按比例综合计算。这样的考核方式简单易于操作,这也是一些学生不重视实验、不注重如何应用所学知识解决实际问题的原因之一,结果造成理论联系实际和解决实际问题的能力差。
完善化考试模式,增加上机考试,要求MATLAB上机考试,这能极大地强化学生的自主学习能力及动手实践能力。
4.结语
我针对数字信号处理课程的特点,应用知识的连贯性,建立了各个知识点之间的联系,便于学生理解与联想记忆。MATLAB的引入为数字信号处理教学提供了全新的方法,激发了学生的学习兴趣,变被动学习为主动探索,加强了理论与实践相结合,提高了综合运用知识及解决实际问题的能力。采用了传统板书和多媒体教学相结合的手段,提高了学生的学习兴趣,做到了用中学、学中用,使学生大大增强了学习的兴趣。
参考文献:
[1]高西全,丁玉美.数字信号处理[M].陕西:西安电子科技大学出版社,2008.
[2]A・V・奥本海姆,R・W・谢弗.离散时间信号处理[M].西安:西安交通大学出版社,2001.
[3]姜恩华.数字信号处理课程“教与学”探索[J].淮北煤炭师范学院学报,2009,30,(3):78-81.
[4]王祥春.“数字信号处理”教学方法探讨[J].科技创新导报,2010,16:248.