当前位置: 首页 > news >正文

cs231n 作业3

使用普通RNN进行图像标注

单个RNN神经元行为
在这里插入图片描述
前向传播:在这里插入图片描述
反向传播:在这里插入图片描述

def rnn_step_backward(dnext_h, cache):dx, dprev_h, dWx, dWh, db = None, None, None, None, Nonex, Wx, Wh, prev_h, next_h = cachedtanh = 1 - next_h**2dx = (dnext_h*dtanh).dot(Wx.T)dWx = x.T.dot(dnext_h*dtanh)dprev_h = (dnext_h*dtanh).dot(Wh.T)dWh = prev_h.T.dot(dnext_h*dtanh)db = np.sum(dnext_h*dtanh,axis=0)return dx, dprev_h, dWx, dWh, db

单层RNN神经元行为

RNN输出有两个方向,一个向上一层(输出层),一个向同层下一个时序,所以反向传播时两个梯度需要相加,输出层梯度可以直接求出(或是上一层中递归求出),所以使用dh(N,T,H)保存好,而同层时序梯度必须在同层中递归计算。
在这里插入图片描述
正向传播:

def rnn_forward(x, h0, Wx, Wh, b):h, cache = None, NoneN, T, D = x.shape_, H = h0.shapeh = np.zeros((N,T,H))h_next = h0cache = []for i in range(T):h[:,i,:], cache_next = rnn_step_forward(x[:,i,:], h_next, Wx, Wh, b)h_next = h[:,i,:]cache.append(cache_next)return h, cache

反向传播:

def rnn_backward(dh, cache):dx, dh0, dWx, dWh, db = None, None, None, None, Nonex, Wx, Wh, prev_h, next_h = cache[-1]_, D = x.shapeN, T, H = dh.shapedx = np.zeros((N,T,D))dh0 = np.zeros((N,H))dWx = np.zeros((D,H))dWh = np.zeros((H,H))db = np.zeros(H)dprev_h_ = np.zeros((N,H))for i in range(T-1,-1,-1):dx_, dprev_h_, dWx_, dWh_, db_ = rnn_step_backward(dh[:,i,:] + dprev_h_, cache.pop())dx[:,i,:] = dx_dh0 = dprev_h_dWx += dWx_dWh += dWh_db += db_return dx, dh0, dWx, dWh, db

使用LSTM进行图像标注

【LSTM】深入浅出讲解长短时记忆神经网络(结构、原理)
有三种方法应对梯度消失问题:

(1)合理的初始化权重值。初始化权重,使每个神经元尽可能不要取极大或极小值,以躲开梯度消失的区域。

(2)使用 ReLu 代替 sigmoid 和 tanh 作为激活函数。

(3)使用其他结构的RNNS,比如长短时记忆网络(LSTM)和 门控循环单元(GRU),这是最流行的做法。
在这里插入图片描述
单个LSTM神经元向前传播:

def lstm_step_forward(x, prev_h, prev_c, Wx, Wh, b):next_h, next_c, cache = None, None, None_, H = prev_h.shapea = x.dot(Wx) + prev_h.dot(Wh) + bi,f,o,g = sigmoid(a[:,:H]),sigmoid(a[:,H:2*H]),sigmoid(a[:,2*H:3*H]),np.tanh(a[:,3*H:])next_c = f*prev_c + i*gnext_h = o*np.tanh(next_c)cache = [i, f, o, g, x, prev_h, prev_c, Wx, Wh, b, next_c]return next_h, next_c, cache

层LSTM神经元向前传播

def lstm_forward(x, h0, Wx, Wh, b):h, cache = None, NoneN,T,D = x.shapenext_c = np.zeros_like(h0)next_h = h0h, cache = [], []for i in range(T):next_h, next_c, cache_step = lstm_step_forward(x[:,i,:], next_h, next_c, Wx, Wh, b)h.append(next_h)cache.append(cache_step)h = np.array(h).transpose(1,0,2) #<-----------注意分析h存储后的维度是(T,N,H),需要转置为(N,T,H)return h, cache

单个LSTM神经元反向传播

def lstm_step_backward(dnext_h, dnext_c, cache):dx, dprev_h, dprev_c, dWx, dWh, db = None, None, None, None, None, Nonei, f, o, g, x, prev_h, prev_c, Wx, Wh, b, next_c = cachedo = dnext_h*np.tanh(next_c)dnext_c += dnext_h*o*(1-np.tanh(next_c)**2) #<-----------上面分析行为有提到这里的求法di, df, dg, dprev_c = (g, prev_c, i, f) * dnext_cda = np.concatenate([i*(1-i)*di, f*(1-f)*df, o*(1-o)*do, (1-g**2)*dg],axis=1)db = np.sum(da,axis=0)dx, dWx, dprev_h, dWh = (da.dot(Wx.T), x.T.dot(da), da.dot(Wh.T), prev_h.T.dot(da))return dx, dprev_h, dprev_c, dWx, dWh, db

层LSTM神经元反向传播

def lstm_backward(dh, cache):dx, dh0, dWx, dWh, db = None, None, None, None, NoneN,T,H = dh.shape_, D = cache[0][4].shapedx, dh0, dWx, dWh, db = \[], np.zeros((N, H), dtype='float32'), \np.zeros((D, 4*H), dtype='float32'), np.zeros((H, 4*H), dtype='float32'), np.zeros(4*H, dtype='float32')step_dprev_h, step_dprev_c = np.zeros((N,H)),np.zeros((N,H))for i in xrange(T-1, -1, -1):step_dx, step_dprev_h, step_dprev_c, step_dWx, step_dWh, step_db = \lstm_step_backward(dh[:,i,:] + step_dprev_h, step_dprev_c, cache[i])dx.append(step_dx) # 每一个输入节点都有自己的梯度dWx += step_dWx    # 层共享参数,需要累加和dWh += step_dWh    # 层共享参数,需要累加和db += step_db      # 层共享参数,需要累加和dh0 = step_dprev_h   # 只有最初输入的h0,即feature的投影(图像标注中),需要存储梯度dx = np.array(dx[::-1]).transpose((1,0,2))return dx, dh0, dWx, dWh, db

图像梯度:显著图和高效图像

『cs231n』作业3问题3选讲_通过代码理解图像梯度

图像生成:类别,反演和DeepDream

『cs231n』作业3问题4选讲_图像梯度应用强化

相关文章:

cs231n 作业3

使用普通RNN进行图像标注 单个RNN神经元行为 前向传播&#xff1a; 反向传播&#xff1a; def rnn_step_backward(dnext_h, cache):dx, dprev_h, dWx, dWh, db None, None, None, None, Nonex, Wx, Wh, prev_h, next_h cachedtanh 1 - next_h**2dx (dnext_h*dtanh).dot(…...

HarmonyOS Next系列之Echarts图表组件(折线图、柱状图、饼图等)实现(八)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…...

网上怎么样可以挣钱,分享几种可以让你在家赚钱的兼职项目

当今社会&#xff0c;压力越来越大&#xff0c;工作、家庭、生活等等&#xff0c;方方面面都需要钱&#xff0c;仅靠一份工作赚钱&#xff0c;已经很难满足我们的需求。所以很多人都会尝试做一些副业&#xff0c;兼职来补贴家用。 现在呢&#xff0c;有很多人都想在网上赚钱&am…...

【DevOps】运维过程中经常遇到的Http错误码问题分析(二)

目录 一、HTTP 错误400 Bad Request 1、理解 400 Bad Request 错误 2、排查 400 Bad Request 错误 3、常见的解决方法 二、HTTP 错误401 Unauthorized 1、理解 401 Unauthorized 错误 2、排查 401 Unauthorized 错误 3、常见的解决方法 一、HTTP 错误400 Bad Request …...

数据结构练习

1. 快速排序的非递归是通过栈来实现的&#xff0c;则前序与层次可以通过控制入栈的顺序来实现&#xff0c;因为递归是会一直开辟栈区空间&#xff0c;所以非递归的实现只需要一个栈的大小&#xff0c;而这个大小是小于递归所要的&#xff0c; 非递归与递归的时间复杂度是一样的…...

手动安装Ruby 1.9.3并升级RubyGems

手动安装Ruby 1.9.3并升级RubyGems ###Ruby 1.9.3 p125安装 wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p125.tar.gz \ && tar -xzvf ruby-1.9.3-p125.tar.gz \ && cd ruby-1.9.3-p125 \ && ./configure --with-openssl-dir/usr/lib/op…...

go语言day11 错误 defer(),panic(),recover()

错误&#xff1a; 创建错误 1&#xff09;fmt包下提供的方法 fmt.Errorf(" 格式化字符串信息 " &#xff0c; 空接口类型对象 ) 2&#xff09;errors包下提供的方法 errors.New(" 字符串信息 ") 创建自定义错误 需要实现error接口&#xff0c;而error接口…...

构建docker镜像实战

构建docker镜像 构建基础容器镜像&#xff08;Base Image&#xff09;是创建容器化应用程序的第一步。基础镜像提供了一个最低限度的操作系统环境&#xff0c;您可以在其上安装所需的软件包和应用程序。 Dockerfile语法说明 Dockerfile 是 Docker 构建镜像的描述文件&#x…...

生信算法9 - 正则表达式匹配氨基酸序列、核型和字符串

建议在Jupyter实践。 1. 使用正则表达式匹配指定的氨基酸序列 import re# 氨基酸序列 seq VSVLTMFRYAGWLDRLYMLVGTQLAAIIHGVALPLMMLI# 正则表达式匹配 match re.search(r[A|G]W, seq)# 打印match及匹配到开始位置和结束位置 print(match) # <re.Match object; span(10, …...

linux ext2文件系统浅析

文章目录 前言ext2内容概述实验准备二进制对比分析1 super block2 group desc3 block bitmap4 inode bitmap5 inode_tableinode 1inode 2inode 11inode 12 6 dir entry7 data区8 间接块9 块组 前言 网上关于ext2文件系统的博客有很多&#xff0c;但看完之后还是有些云里雾里&a…...

「树莓派入门」树莓派进阶02-传感器应用与交通灯项目

传感器是树莓派实现智能化的关键。通过本教程,你可以开始尝试使用传感器来增强树莓派的功能。 一、传感器在树莓派中的作用 传感器是树莓派与外界环境交互的重要工具。它们可以检测各种物理量,如光、声音、温度等,并将这些物理量转换为电信号,供树莓派读取和处理。 二、数…...

pytorch 指定GPU设备

使用os.environ["CUDA_VISIBLE_DEVICES"] 这种方法是通过环境变量限制可见的CUDA设备&#xff0c;从而在多个GPU的机器上只让PyTorch看到并使用指定的GPU。这种方式的好处是所有后续的CUDA调用都会使用这个GPU&#xff0c;并且代码中不需要显式地指定设备索引。 im…...

华为od-C卷200分题目6 - 5G 网络建设

华为od-C卷200分题目6 - 5G 网络建设 题目描述 现需要在某城市进行 5G 网络建设&#xff0c;已经选取 N 个地点设置 5G 基站&#xff0c;编号固定为 1 到 N&#xff0c;接下来需要各个基站之间使用光纤进行连接以确保基站能互联互通&#xff0c;不同基站之间架设光纤的成本各不…...

步进电机(STM32+28BYJ-48)

一、简介 步进电动机&#xff08;stepping motor&#xff09;把电脉冲信号变换成角位移以控制转子转动的执行机构。在自动控制装置中作为执行器。每输入一个脉冲信号&#xff0c;步进电动机前进一步&#xff0c;故又称脉冲电动机。步进电动机多用于数字式计算机的外部设备&…...

Node.js介绍 , 安装与使用

1.Node.js 1 什么是Node.js 官网&#xff1a;https://nodejs.org/zh-cn/ 中文学习网&#xff1a;http://nodejs.cn/learn1.Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 2.前端的底层 html…...

JavaEE初阶-网络原理1

文章目录 前言一、UDP报头二、UDP校验和2.1 CRC2.2 md5 前言 学习一个网络协议&#xff0c;最主要就是学习的报文格式&#xff0c;对于UDP来说&#xff0c;应用层数据到达UDP之后&#xff0c;会给应用层数据报前面加上UDP报头。 UDP数据报UDP包头载荷 一、UDP报头 如上图UDP的…...

leetcode秋招冲刺 (专题16--18)

专题16&#xff1a;分治 题目169&#xff1a;多数元素&#xff08;YES&#xff09; 解题思路&#xff1a;使用哈希表可以统计出现次数的性质&#xff0c;直接统计就行。 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊…...

学懂C#编程:实用方法——string字符串指定连接符拼接之 string.Join 的详细用法

在C#中&#xff0c;string.Join 方法用于将一个字符串数组或集合中的元素连接成一个单一的字符串&#xff0c;并在每个元素之间插入指定的分隔符。这个方法非常有用&#xff0c;特别是在需要将多个字符串合并成一个字符串时。以下是 string.Join 方法的详细用法&#xff1a; 方…...

Javascript常见数据结构和设计模式

在JavaScript中&#xff0c;常见的数据结构包括两大类&#xff1a;原始数据类型&#xff08;Primitive Types&#xff09;和对象类型&#xff08;Object Types&#xff09;。对象类型又可以进一步细分为多种内置对象、数组、函数等。下面是一些JavaScript中常见的数据结构&…...

【ChatGPT】全面解析 ChatGPT:从起源到未来

ChatGPT 是由 OpenAI 开发的一个基于 GPT&#xff08;Generative Pre-training Transformer&#xff09;架构的聊天机器人。通过自然语言处理&#xff08;NLP&#xff09;技术&#xff0c;ChatGPT 能够理解和生成语言&#xff0c;与人类进行对话。本文将深入探讨其起源、发展、…...

城通网盘直连解析终极指南:3步实现高速免费下载

城通网盘直连解析终极指南&#xff1a;3步实现高速免费下载 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet ctfileGet是一个专业的城通网盘直连地址解析工具&#xff0c;能够帮助用户绕过复杂的下载流程…...

Windows系统性能优化指南:使用RyTuneX提升系统响应速度

Windows系统性能优化指南&#xff1a;使用RyTuneX提升系统响应速度 【免费下载链接】RyTuneX RyTuneX is a cutting-edge optimizer built with the WinUI 3 framework, designed to amplify the performance of Windows devices. Crafted for both Windows 10 and 11. 项目地…...

Jable视频下载工具:高效解决方案与专业使用指南

Jable视频下载工具&#xff1a;高效解决方案与专业使用指南 【免费下载链接】jable-download 方便下载jable的小工具 项目地址: https://gitcode.com/gh_mirrors/ja/jable-download 问题诊断&#xff1a;视频下载的四大核心挑战 技术门槛障碍 传统视频下载工具往往需要…...

如何用Obsidian构建你的个人知识管理系统:终极完整指南

如何用Obsidian构建你的个人知识管理系统&#xff1a;终极完整指南 【免费下载链接】kepano-obsidian My personal Obsidian vault template. A bottom-up approach to note-taking and organizing things I am interested in. 项目地址: https://gitcode.com/gh_mirrors/ke/…...

告别重复编码:用快马AI自动化实现UI设计,释放创意效率

作为一名经常需要快速产出UI原型的设计师&#xff0c;我深刻体会到从设计稿到可交互代码的转换过程有多耗时。特别是电商类页面&#xff0c;既要考虑视觉表现力&#xff0c;又要兼顾响应式布局和基础交互逻辑。最近尝试用InsCode(快马)平台的AI辅助功能后&#xff0c;发现它能大…...

notepad-- Markdown实时预览功能高效使用全攻略

notepad-- Markdown实时预览功能高效使用全攻略 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器&#xff0c;目标是做中国人自己的编辑器&#xff0c;来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- 作为一款支持Windows、…...

如何提高YOLO8目标检测的准确性?

上面主要就是大致了解方法&#xff0c;省流请看最下面1.提高置信度阈值yolo predict modelyolov8n.pt source0 classes0 conf0.5​​​​ conf0.3&#xff08;灵敏&#xff0c;但容易误检&#xff09;​​​​ conf0.5&#xff08;更准&#xff0c;误检少&#xff09;​​​​ …...

Subtitle Edit:实现专业级字幕制作的7大创新方法指南

Subtitle Edit&#xff1a;实现专业级字幕制作的7大创新方法指南 【免费下载链接】subtitleedit the subtitle editor :) 项目地址: https://gitcode.com/gh_mirrors/su/subtitleedit 在视频内容创作与传播领域&#xff0c;字幕不仅是辅助理解的工具&#xff0c;更是提升…...

Captain AI帮你一次过审,上品不再被驳回!

Ozon上品审核驳回、上架后违规下架&#xff0c;是90%以上卖家都踩过的坑。很多卖家遇到上品问题&#xff0c;会用DeepSeek等通用AI查询规则&#xff0c;却往往因为信息滞后、规则解读错误&#xff0c;反复修改仍无法过审&#xff0c;白白错过新品流量黄金期。一、Captain AI能帮…...

利用NSGA-III算法优化随机森林模型超参数的实践与可视化展示:从理论到实现的全过程解析

利用NSGA-III算法优化机器学习模型 通过Optuna库实现机器学习模型超参数的优化与可视化&#xff0c;通过精心设计的目标函数&#xff0c;将搜索多个超参数空间&#xff0c;最终确定使模型性能最优的参数组合 为了更直观地展示调参过程&#xff0c;最后利用3D曲面图对调参效果进…...