c++ 实现一个object类_[C/C++]期末作业实现一个CNN?

本文介绍了作者在C/C++程序设计课程中,为提升学生对编程语言掌握的深度,布置了实现CNN网络前向推理的期末项目。通过对比OpenBLAS的矩阵乘法速度,强调了C/C++在计算效率上的优势。学生们还需要在ARM开发板上运行程序,理解低功耗系统。虽然挑战重重,但期望学生能从中建立自信,具备构建基础软件的能力。
摘要由CSDN通过智能技术生成

本文转载自南方科技大学副教授于仕琪的个人公众号(ID:Prof_YuShiqi)

我这个学期教授“C/C++程序设计”。最近二十余年,计算机程序设计语言发生了明显的变化,本科教学中的Java和Python等更容易使用的语言的比例逐渐上升。

对于C和C++语言,学生普遍反映难度高、知识点多、语法灵活多变但难以掌握。乃至部分计算机专业的学生会质疑“我为什么要学习C/C++编程语言,从语法上来看,C/C++能做的事情其他语言也能做嘛。”

C/C++语言依然以无可撼动的地位,构建着一系列计算机基础软件。如操作系统Linux采用C语言设计;数据库软件MySQL采用C和C++设计。

在新兴起的人工智能和深度学习领域,虽然Python语言大量使用,但底层的计算模块基本全采用C++语言开发。其原因是人工智能算法皆是计算密集型算法,需要用C/C++开发以保证算法的执行效率。

本人认为:培养具有深厚基本功的计算机专业人才,C/C++语言是不可忽略的一门基础课程。我们不提倡重复造轮子,但我们需要有造轮子的能力。

与现在流行的Java、Python等语言相比,C和C++中的精髓是对内存的快速读写。正是这个特点让C和C++擅长计算任务,程序效率高。也正是这个特点,让指针这个知识点成为很多学生的噩梦。

我这个学期在“C/C++程序设计”教学中,尝试增加了提升程序效率的知识点。讲解如何快速实现两个含有200M个元素的向量的点乘(dot product),并布置作业实现矩阵乘法。

在矩阵乘法实现时,我要求计算含有百万元素的大矩阵乘法,并跟OpenBLAS库进行速度对比。同学们采用一系列方法,能够把计算效率提升几十倍,但速度依然只有OpenBLAS的十分之一甚至更少。我相信赶超OpenBLAS之后的“绝望”能够让他们意识到计算机系统知识的不足。

此外,在学校的支持下,还给同学们提供了ARM开发板,让同学们把程序在ARM开发板上运行,体验低功耗系统的特点,以及C/C++的必要性。

“C/C++程序设计”这门课的期末项目,是用C++实现CNN网络的前向推理,不能调用第三方库,要纯手工实现

为了让同学们渐进式地入门,我在课堂上讲了CNN各种层的实现思路;同时让我的研究生冯远滔同学给他们训练了一个三层卷积模型,这个模型只含3x3卷积、ReLU、MaxPool和FC四种层。

这个期末项目会让学生有些痛苦,但我相信这会换来他们对自己能力的自信。在别人大谈特谈深度学习的时候,他们的嘴角能够泛起一丝微笑。

我对这些学生有期望的。能够进入南方科技大学的学生都是非常优秀的学生,有很大的成长潜力。我希望他们未来具有建设计算机基础架构软件的能力,即有造更高级的轮子的能力。

附期末项目要求:

293e0606356623a352440ad7f031331f.png

502c6b9f7810ad9a04f3fd6e518c380e.png

作者:于仕琪

原文链接:[C/C++]期末作业实现一个CNN? 

阅读更多
  • 博客园12月份特别活动来啦!
  • linq 查询的结果会开辟新的内存吗?
  • 小朋友都能看懂的 HTTPS

18459dc96d3b46df9cb20f1c1179bc63.png

09c5b06a6e0594244a65b901aa13df8d.gif查看「博客园12月活动」及每日中奖名单

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值