CMU 10-414/714: Deep Learning Systems --hw4

通过之前作业中完成的所有组件,使用高性能的网络结构来解决一些问题。首先会增加一些新的算子(使用CPU/CUDA后端),然后完成卷积、以及用一个卷积神经网络来在CIFAR-10图像数据集上训练一个分类器。接着需要完成循环神经网络(带LSTM),并在Penn Treebank数据集上完成字符级的预测

实现功能

  1. python/needle/ops.py中添加三个新算子:TanhStackSplit
  2. 实现CIFAR-10数据集的Dataset以及在此基础上训练自己实现的卷积神经网络(本篇暂只关注下面的循环神经网络,这个先跳过)
  3. 实现循环神经网络
    先实现单个RNN cell(class RNNCell),然后将多个RNNcell叠加起来,形成更复杂的网络结构(class RNN),如下图所示,图1为单个RNNcell,图二为多个RNNcell组成的RNN
    在这里插入图片描述
    在这里插入图片描述
    • 实现单个RNN cell(class RNNCell(Module)):
      • \_\_init__()初始化函数:进行一系列参数初始化,用均匀分布初始化参数矩阵,并选用激活函数(Tanh或ReLU)
      • forward(X,h)函数:即实现 h t = tanh ⁡ ( x t W i h + b i h + h ( t − 1 ) W h h + b h h ) h_t=\tanh(x_tW_{ih}+b_{ih}+h_{(t-1)}W_{hh}+b_{hh}) ht=tanh(xtWih+bih+h(t1)Whh+bhh)(其中tanh也可换为relu),代码如下:
        def forward(self, X, h=None):batch_size, _ = X.shapeif h is None:h = init.zeros(batch_size, self.hidden_size, device=self.device, dtype=self.dtype)if self.bias:return self.nonlinearity(X @ self.W_ih + self.bias_ih.reshape((1, self.hidden_size)).broadcast_to((batch_size, self.hidden_size)) \+ h @ self.W_hh + self.bias_hh.reshape((1, self.hidden_size)).broadcast_to((batch_size, self.hidden_size)))else:return self.nonlinearity(X @ self.W_ih + h @ self.W_hh)
        
    • 实现多层RNN(class RNN(Module)
      • \_\_init__()初始化函数:
      • forward(X,h0)函数:将X(seq_len, bs, input_size)分割成seq_len个X(bs, input_size),将每个分割部分分别输入每个RNN cells,得到num_layers个hiddens和seq_len个out。最终将out组装到一起、将hiddens组装到一起,返回out和hs
        def forward(self, X, h0=None):_, batch_size, _ = X.shapeif h0 is None:h0 = [init.zeros(batch_size, self.hidden_size, device=self.device, dtype=self.dtype) for _ in range(self.num_layers)]else:h0 = tuple(ops.split(h0, 0))h_n = []inputs = list(tuple(ops.split(X, 0)))for num_layer in range(self.num_layers):h = h0[num_layer]for t, input in enumerate(inputs):h = self.rnn_cells[num_layer](input, h)inputs[t] = hh_n.append(h)return ops.stack(inputs, 0), ops.stack(h_n, 0)
        
  4. 实现LSTM网络(在此学习使用numpy一步步实现lstm的流程))
    • 实现Sigmoid
    • 实现单个LSTMCell
      • __init__()函数:初始化
      • forward()函数:
        def forward(self, X, h=None):batch_size, _ = X.shape  # X:(batch_size, feature_size)if h is None:h0, c0 = init.zeros(batch_size, self.hidden_size, device=self.device, dtype=self.dtype), \init.zeros(batch_size, self.hidden_size, device=self.device, dtype=self.dtype)else:h0, c0 = hif self.bias:gates_all = X @ self.W_ih + self.bias_ih.reshape((1, 4 * self.hidden_size)).broadcast_to((batch_size, 4 * self.hidden_size)) \+ h0 @ self.W_hh + self.bias_hh.reshape((1, 4 * self.hidden_size)).broadcast_to((batch_size, 4 * self.hidden_size))else:gates_all = X @ self.W_ih + h0 @ self.W_hhgates_all_split = tuple(ops.split(gates_all, axis = 1))gates = []for i in range(4):gates.append

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI原生安全 亚信安全首个“人工智能安全实用手册”开放阅览

不断涌现的AI技术新应用和大模型技术革新,让我们感叹从没有像今天这样,离人工智能的未来如此之近。 追逐AI原生?企业组织基于并利用大模型技术探索和开发AI应用的无限可能,迎接生产与业务模式的全面的革新。 我们更应关心AI安全原…

互感器电感的工艺结构原理及选型参数总结

🏡《总目录》 目录 1,概述2,工作原理3,结构特点3.1,一次绕组和二次绕组3.2,铁芯3.3,绝缘4,工艺流程4.1,准备工作4.2,铁芯制造4.3,线圈制造4.4,组装4.5,质检4.6,包装和出厂

【高频SQL题目进阶版】1440.计算布尔表达式的值

错误答案: 我一开始以为,既然都能拿到值了, 那么把它们合并起来就可以了。后来发现不行。。 1 concat concat(v1.value ,operator ,v2.value) 它不是一个条件,而只是一个字符串 。 而if (condition, true_value, false_value)…

从后端获取文件数据并导出

导出文件的公共方法 export const download (res, tools) > {const { message, hide } tools;const fileReader: any new FileReader();console.log(fileReader-res>>>, res);fileReader.onload (e) > {if (res?.data?.type application/json) {try {co…

docker方式进行pytorch多机多卡分布式训练

docker ip共享与gpu指定 1)ip共享 docker网络有多种,这里选择host直接用宿主机的ip 2)指定gpu docker方式进行pytorch多机多卡分布式训练 nvidia docker 容器介绍链接:https://docs.nvidia.com/deeplearning/frameworks/pytorch-release-notes/ docker用的nvidia官方镜像…

Pytorch: torch.mean()

在PyTorch中,函数 torch.mean 用于计算张量的平均值(均值)。其可以对整个张量计算平均值,也可以沿某个或多个维度计算平均值。这个操作对于正则化数据、在神经网络中进行层间规范化等场合特别有用。 例子如下: impor…

复试专业前沿问题问答合集1

复试专业前沿问题问答合集1 人工智能基础知识问答 Q1: 什么是人工智能(AI)? A1: 人工智能(AI)是计算机科学的一个分支,它涉及创建能够执行通常需要人类智能的任务的机器和软件。这些任务包括学习(获取信息并根据信息对其进行规则化以达到结论)、推理(使用规则达到近…

数字孪生与智慧城市:重塑城市生活的新模式

随着信息技术的迅猛发展,数字孪生作为一种新兴的技术理念,正在逐渐改变城市建设和管理的传统模式。智慧城市作为数字孪生技术应用的重要领域,正在以其独特的优势和潜力,重塑着城市生活的方方面面。本文将从数字孪生的概念、智慧城…

中文编程入门(Lua5.4.6中文版)第十一章 Lua 模块与包 参考星争际霸游戏

在遥远的星争际霸世界中,代码模块就如同星际基地中的高科技仓库,储存着各类经过封装优化的战术指令和战略资源。自Lua 5.1版本起,星际编程者们引入了标准化的模块管理系统,使得不同战舰之间能够共享和调用核心战斗算法&#xff0c…

StarRocks学习笔记

介绍场景建表明细模型聚合模型更新模型主键模型 介绍 StarRocks是一款经过业界检验、现代化,面向多种数据分析场景的、兼容MySQL协议的、高性能分布式关系型分析数据库。 StarRocks充分吸收关系型 OLAP 数据库和分布式存储系统在大数据时代的优秀研究成果&#xff…

Linux命令:ps命令

目录 1 ps命令1.1 简介1.2 说明1、选项:2、输出格式控制:3、输出修饰符:4、显示线程:5、进程状态码:6、AIX 格式描述符7、标准格式指定符 1.3 实例1、默认输出2、使用标准语法查看系统上的每个进程3、使用BSD语法查看系…

算法体系-14 第十四 贪心算法(上)

一 、 递归套路解决判断完全二叉树 1.1 描述 1.2 分析 1.3 代码 public static boolean isCBT2(Node head) {return process(head).isCBT;}public static class Info {public boolean isFull;public boolean isCBT;public int height;public Info(boolean full, boolean cbt…

UI自动测试框架-selenium(1) selenium介绍和选择器

目录 1.selenium是什么 2.定位元素 2.1 css选择器 2.1.1 选择id 2.1.2 class 2.1.3使用标签选择 2.1.4父类选择器 子类选择器 2.2 xpath 1.selenium是什么 selenium是用来做web端自动化测试的框架,它支持各种游览器,各种平台,支持各种语言(如 Python,Java,C#,JS,Ruby..…

[flask]flask的路由

路由的基本定义 路由就是一种映射关系。是绑定应用程序(视图)和url地址的一种一对一的映射关系!在开发过程中,编写项目时所使用的路由往往是指代了框架/项目中用于完成路由功能的类,这个类一般就是路由类,…

全国产飞腾+FPGA架构,支持B码+12网口+多串电力通讯管理机解决方案

行业痛点: 中国的电力网络已经成为当今世界覆盖范围最广、结构最为复杂的人造科技系统。随着国家和各部委颁布了一系列法律法规,如国家颁布的《中华人民共和国网络安全法》、工信部颁布的《工业控制系统信息安全防护指南》、发改委颁布的14号令《电力监控系统安全防…

基于微信小程序的电影票务系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…

python智慧农业小程序flask-django-php-nodejs

当今社会已经步入了科学技术进步和经济社会快速发展的新时期,国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统智慧农业采取了人工的管理方法,但这…

[C#] Xml 非法字符处理方法

Xml 非法字符处理方法 根据W3C的标准: //x00-//x08 //x0b-//x0c //x0e-//x1f 不允许出现在xml文件中。 解决办法 xml 处理前 替换非法字符 public static string ReplaceIllegalXmlCharacters(string xml) {// 使用正则表达式匹配非法字符,并进行替换…

python自定义日历库,与对应calendar库函数功能基本一致

目录 自定义日历库 常用列表 日期列表 常用函数 闰年判断 月份天数 元旦序号 日历表头 星期序号 序号及天数 月历字串 打印月历 年历字串 打印年历 对比测试 测试结果 完整代码 运行结果 自定义日历库 自定义日历库函数,并使得其与python calend…

国际期货英文版配资系统/VUE源码包搭建

要搭建一个国际期货英文版配资系统的Vue源码包,你需要遵循一系列的开发步骤。这涉及到前端和后端的开发,以及确保系统的安全性、稳定性和可扩展性。以下是一个大致的指南,帮助你开始这个项目: 1. 需求分析 用户角色与权限&#…