CS231N assignment3-transformer,GAN,self-supervised,LSTM

这篇具有很好参考价值的文章主要介绍了CS231N assignment3-transformer,GAN,self-supervised,LSTM。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这部分作业内容很大,上传到github费了很多时间,参考的是这篇:如何在GitHub上传大文件(≥100M) | 码农家园 (codenong.com)

但是还是没传成功···

所以我直接传到网盘里了

链接:https://pan.baidu.com/s/1T8Sc2Owq6OMtDSo5SNKlaA 
提取码:784w 
--来自百度网盘超级会员V2的分享

然后简单介绍一下作业3

1.RNN 在之前的博客写过了

2.transformer:

这部分作业完成的是decoder的部分,目标是为图片生成字幕。

步骤:

训练时将图片的feature(这里直接从它提供的cocodateset的utils中得到)作为cross-attention中的K,V。将captions+position embedding作为input,送入每一个decorder中,先进行mask-self-attention,resnet,ln再进行cross-attention,res,ln最后feedforwardNN,res,LN;

测试时由features和<start>这个embedding产生caption.

PS:captions是原始word经过word_to_idx这个字典转化成独热编码,再用torch.nn.Embedding转化成连续的嵌入

3.GAN:

完成了三个版本的GAN,朴素版,最小二乘版,CNN版

总的思想就是完成一个判别器和一个生成器,用生成器从一些随机噪声开始生成图片,用判别器判别真实图片和来自生成器的图片,目标是最大化判别器判别真实图片为真的概率,最小化判别器判别由生成器产生的图为真的概率。

为了方便反向传播实现最小化损失函数,令L(discriminator)=-E[logD(x)]-E[log(1-D(G(z)))]

L(generator)=-E[logD(G(z))],用平均值替代期望

朴素GAN的判别器和生成器都由FC+激活层组成

最小二乘的判别器和生成器与朴素GAN相同,只是把损失函数变成预测值与真实样本预测值之间的距离了(缓解梯度消失/爆炸问题,生成器和判别器的能力差异很大时,梯度很容易消失。生成器和判别器的能力相近时,梯度很容易爆炸。 LSGAN通过引入最小二乘损失函数来缓解梯度消失或梯度爆炸的问题。最小二乘损失函数将生成器和判别器之间的对抗损失转化为一个回归问题,通过最小化生成器和判别器之间的均方差来进行训练。这种损失函数可以更好地稳定训练过程,减轻梯度消失或梯度爆炸的问题)

CNNGAN的判别器是由卷积层-relu-maxpool构成,生成器由反卷积层-relu-bn组成

4.自监督学习,完成的是一个simCLR(simple contrastive learning representation)对一个图片以两种策略生成两种图片变种,用f作为一个encoder(这里用的是resnet50),得到这两个图片的表示向量hi,hj,再将向量对送入g(一个小的神经网络,比如MLP)目标是最大化g(hi),g(hj)的一致性。将自监督学习模型应用于具体任务时,去掉g,改成FC等其他NN,完成任务。自监督学习相当于预训练,提取特征,学习特征。

损失函数是温度scaled交叉熵(使模型更关注于较大概率的类别,减小对较小概率类别的惩罚)

没搞懂的点:训练的时候用的是pairs(成对的数据)那test的时候是如何进行的?自监督有没有val? 感觉还是不太明白,等用的时候再回来仔细看看吧

5.LSTM:

在RNN,LSTM,ATTETION那篇博客写过,这里写一下在完成这个作业的时候的注意点:

分清是逐元素相乘* 还是矩阵点积运算@

tanx'=1-tanx²

sigmoid'=sigmoid(1-sigmoid)

虽然有cell state,但是最终还是把最后的hiddenstate送入映射层,再由softmax层得到损失。

不明白的地方:

为什么dnext_h = dh[:,t,:]+dprev_h?为什么要加上dprev_h?直觉上我可以理解,因为next_h除了由它本身以外还有prev_h,但是数学上不理解文章来源地址https://www.toymoban.com/news/detail-612818.html

到了这里,关于CS231N assignment3-transformer,GAN,self-supervised,LSTM的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • cs231n assignment 3 Q2 Image Captioning with Vanilla RNNs

    image_from_url 里的报错 问题展示 我在运行这段代码的时候就报错了 另一个进程正在使用此文件,文件无法访问 问题解决思路 我一开始以为是img = imread(fname) 里的问题导致文件还在被占用,所以无法释放文件的所有权,导致os.remove(fname)无法删除。 就是我以为img = imread(fname) 是

    2024年02月12日
    浏览(35)
  • cs231n assignmen3 Extra Credit: Image Captioning with LSTMs

    题面 结合课程和上面的讲解,这部分就是让我们来实现lstm的前向操作,具体的操作流程在上面都写好了 解析 看代码注释吧 代码 输出 题面 计算lstm的反向操作 解析 sigmoid求导 Tanh 求导 反向传播讲解可以看这个 然后结合代码注释,想想链式求导法则就好了 代码 输出 题面 让

    2024年02月10日
    浏览(36)
  • Unity 报警告warning CS0649: Field ‘...‘ is never assigned to,...解决办法

    该警告应仅出现在私有成员变量中。那些不能从外部设置,这就是为什么编译器可以确定这些变量没有在任何地方蛇者其值。在C#中,没有访问修饰符的变量(private,protected,public …)始终是私有的。 在assets文件夹下添加文件csc.rsp,写入

    2024年02月06日
    浏览(47)
  • 【Unity细节】transform.position assign attempt for ‘xxx‘ is not valid. Input position is { NaN, NaN, NaN

    👨‍💻个人主页 :@元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏 :unity细节和bug transform.position assign attempt for ‘xxx’ is not valid. Input position is { NaN, NaN, NaN }. UnityEngine.Transform:Translate (UnityEngine.Vector3) 代码中的坐标系被置空了——检查

    2024年02月13日
    浏览(41)
  • Leetcode—231.2的幂【简单】

    之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

    2024年02月05日
    浏览(29)
  • Leetcode | 231. 2 的幂 C语言

    Problem: 231. 2 的幂 说白了就是靠硬算,但是要知道对sum不进行控制就会导致直接超标,所以要在for循环的条件中加上 sum = n 由思路可知

    2024年02月22日
    浏览(34)
  • 通过 USB 或网络控制安卓设备:无需 root 权限 | 开源日报 No.231

    Stars: 15.6k License: Apache-2.0 QtScrcpy 是一款支持通过 USB 或网络显示和控制 Android 设备的实时显示控制软件,不需要 root 权限。 其主要功能和优势包括: 轻量化(仅显示设备屏幕) 高性能(30~60 fps) 高画质(1920×1080 或更高分辨率) 低延迟(35~70ms) 快速启动时间(约 1 秒展示

    2024年04月23日
    浏览(57)
  • Keil 提示error C231: ‘INT0‘: redefinition的原因及其解决方法

    redefinition 中文意思是 “重复定义” 。纵览我所写的程序,只有此处首次出现 INT0。既然说我是重复定义,说明被引用到文件里已经定义 INT0。OK,我只包含 reg51.h 头文件,只有找它了。 reg51.h 头文件已经使用 INT0 了。 将自己写的 INT0 改成其他名字。(不要改头文件里的 INT0)

    2024年02月11日
    浏览(45)
  • Verilog之assign

    Verilog中的 assign 主要用于如下两个地方: 数据流建模 用于数据流建模的 显示连续赋值语句 语法格式如下: net_declarationrangname; assign #delayname = Assignment expression; 以上语法第一条句是对连线型变量进行类型说明,第二条语句是对这个连线型变量进行连续赋值。 示例代码如

    2024年02月13日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包