pytorch深度学习笔记13

目录

摘要

反向传播代码实现


摘要

本篇文章继续学习尚硅谷深度学习教程,学习内容是反向传播代码实现

反向传播代码实现

在之前手写数字识别案例的基础上,对SGD的计算过程进行优化。核心就是使用误差的反向传播法来计算梯度,而不是使用差分数值计算;这将大大提升学习的效率。

对于二层网络TwoLayerNet,隐藏层由一个Affine层和一个ReLU层组成,输出层则由一个Affine层和一个Softmax-with-Loss层组成。由于之前已经实现了各层的类,现在只要用“搭积木”的方式将它们拼接在一起就可以了。

将TwoLayerNet类的代码实现改进如下:

import numpy as np from common.layers import * from common.gradient import numerical_gradient from collections import OrderedDict class TwoLayerNet: def __init__(self, input_size, hidden_size, output_size, weight_init_std = 0.01): # 初始化权重 self.params = {} self.params['W1'] = weight_init_std * np.random.randn(input_size, hidden_size) self.params['b1'] = np.zeros(hidden_size) self.params['W2'] = weight_init_std * np.random.randn(hidden_size, output_size) self.params['b2'] = np.zeros(output_size) # 生成层 self.layers = OrderedDict() self.layers['Affine1'] = Affine(self.params['W1'], self.params['b1']) self.layers['Relu1'] = Relu() self.layers['Affine2'] = Affine(self.params['W2'], self.params['b2']) self.lastLayer = SoftmaxWithLoss() def predict(self, x): for layer in self.layers.values(): x = layer.forward(x) return x # x:输入数据, t:监督数据 def loss(self, x, t): y = self.predict(x) return self.lastLayer.forward(y, t) def accuracy(self, x, t): y = self.predict(x) y = np.argmax(y, axis=1) if t.ndim != 1 : t = np.argmax(t, axis=1) accuracy = np.sum(y == t) / float(x.shape[0]) return accuracy # x:输入数据, t:监督数据 def numerical_gradient(self, x, t): loss_W = lambda W: self.loss(x, t) grads = {} grads['W1'] = numerical_gradient(loss_W, self.params['W1']) grads['b1'] = numerical_gradient(loss_W, self.params['b1']) grads['W2'] = numerical_gradient(loss_W, self.params['W2']) grads['b2'] = numerical_gradient(loss_W, self.params['b2']) return grads def gradient(self, x, t): # forward self.loss(x, t) # backward dout = 1 dout = self.lastLayer.backward(dout) layers = list(self.layers.values()) layers.reverse() for layer in layers: dout = layer.backward(dout) # 设定 grads = {} grads['W1'], grads['b1'] = self.layers['Affine1'].dW, self.layers['Affine1'].db grads['W2'], grads['b2'] = self.layers['Affine2'].dW, self.layers['Affine2'].db return grads

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

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

相关文章

emwin抗锯齿功能底层驱动支持

emWin抗锯齿驱动深度实践:从原理到性能优化的完整指南你有没有遇到过这样的情况?在STM32上跑emWin,画个斜线像“楼梯”,小字体边缘毛刺严重,波形图一动起来就抖——明明代码没错,UI却怎么看怎么别扭。问题很…

USB2.0双层板接口布局实战案例(含原理图)

USB2.0双层板接口设计实战:从原理到稳定通信的完整路径你有没有遇到过这样的情况?一个嵌入式项目眼看就要量产,结果USB设备插上电脑后时好时坏——有时候能识别,有时候直接“失联”。日志里全是“枚举失败”“端点未响应”&#x…

为什么具身智能系统需要能“自我闭环”的认知机制

在很多人眼中,所谓“智能系统”,无非是: 看得清楚、算得很快、决策很聪明。只要感知模型足够好,规划算法足够复杂,系统自然就会“表现出智能”。 这种理解,在纯软件系统中或许还能勉强成立,但一…

screen指令结合GDB调试嵌入式程序的场景分析

用screen和 GDB 构建高效的嵌入式调试工作流你有没有过这样的经历:一边盯着串口终端看启动日志,一边在另一个窗口敲 GDB 命令,手忙脚乱地来回切换,结果一不小心关掉了 OpenOCD 那个“不起眼”的后台窗口——于是整个调试环境崩溃&…

STM32CubeMX安装步骤手把手教程(零基础适用)

零基础也能搞定!STM32CubeMX安装全攻略,手把手带你避坑起飞 你是不是也曾在准备开始嵌入式开发时,面对“STM32CubeMX怎么装?”这个问题一头雾水?点开官网下载页面,一堆术语扑面而来:JRE、离线包…

51单片机串口通信实验:零基础实现数据收发

51单片机串口通信实战:从点亮“Hello World”到全双工收发你有没有过这样的经历?写好一段代码,烧录进单片机,然后……盯着几个LED灯猜:“它到底运行到哪一步了?”没有反馈的开发,就像在黑暗中走…

【C++藏宝阁】C++入门:命名空间(namespace)详解

🌈个人主页:聆风吟 🔥系列专栏:C藏宝阁 🔖少年有梦不应止于心动,更要付诸行动。 文章目录📚专栏订阅推荐📋前言:为什么需要命名空间?一、命名空间的定义二、命…

DevicePairingHandler.dll文件丢失找不到问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

揭秘大数据领域 Eureka 的服务发现的缓存更新机制

揭秘大数据领域 Eureka 的服务发现的缓存更新机制 关键词:大数据、Eureka、服务发现、缓存更新机制、微服务 摘要:在大数据和微服务架构盛行的今天,服务发现是保障系统高效运行的关键环节。Eureka 作为 Netflix 开源的服务发现框架,在业界得到了广泛应用。其缓存更新机制对…

零基础学习JLink下载的完整操作流程

从零开始掌握J-Link固件烧录:深入理解调试原理与实战技巧 你是否曾遇到这样的场景? 编译好的程序无法下载到STM32板子上,Keil提示“Cortex-M Debug Error”;或者在产线批量烧录时,每台设备都要手动点击“Program”&a…

Arduino寻迹小车图解说明:电路连接全解析

从零搭建Arduino寻迹小车:电路连接与控制逻辑全拆解你有没有试过看着别人做的智能小车自动沿着黑线跑,心里痒痒也想动手做一个?别急——其实它没那么神秘。今天我们就来手把手拆解一台Arduino寻迹小车的完整实现过程,不讲空话&…

DevicePairingProxy.dll文件丢失找不到问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

虚拟机性能优化实战技术文章大纲CPU分配策略:核心数、亲和性设置

虚拟机性能优化实战技术文章大纲虚拟机性能优化概述虚拟机性能优化的定义与重要性常见性能瓶颈与挑战优化目标:资源利用率、响应速度、稳定性硬件资源配置优化CPU分配策略:核心数、亲和性设置内存分配:动态内存管理、大页内存启用磁盘I/O优化…

Arduino IDE环境搭建实战案例(新手必看)

从零开始玩转硬件编程:Arduino IDE 环境搭建实战全记录 你有没有过这样的经历?买了一块 Arduino 开发板,兴致勃勃插上电脑,结果打开 Arduino IDE 却发现“端口灰了”、“上传失败”、“找不到设备”……明明照着教程一步步来&…

曾仕强老师谈婚姻前应该做什么

网址:曾仕强老师谈婚姻前应该做什么

【2025最新】基于SpringBoot+Vue的洗衣店订单管理系统管理系统源码+MyBatis+MySQL

💡实话实说:CSDN上做毕设辅导的都是专业技术服务,大家都要生活,这个很正常。我和其他人不同的是,我有自己的项目库存,不需要找别人拿货再加价。我就是个在校研究生,兼职赚点饭钱贴补生活费&…

ModbusPoll下载通信测试:操作指南从零实现

从零开始用 ModbusPoll 测试通信:手把手带你跑通第一次读取 你有没有过这样的经历? 新接了一个智能电表,说明书上写着“支持 Modbus RTU”,但怎么都读不出数据;或者调试PLC时,不确定寄存器地址对不对&…

DeviceDisplayStatusManager.dll文件丢失找不到问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

【2025最新】基于SpringBoot+Vue的美发门店管理系统管理系统源码+MyBatis+MySQL

💡实话实说:CSDN上做毕设辅导的都是专业技术服务,大家都要生活,这个很正常。我和其他人不同的是,我有自己的项目库存,不需要找别人拿货再加价。我就是个在校研究生,兼职赚点饭钱贴补生活费&…

DeviceMetadataParsers.dll文件丢失找不到问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…