使用numpy实现神经网络模块

class Network(object):def __init__(self, num_of_weights):# 随机产生w的初始值# 为了保持程序每次运行结果的一致性,此处设置固定的随机数种子np.random.seed(0)self.w = np.random.randn(num_of_weights, 1)self.b = 0.def forward(self, x):z = np.dot(x, self.w) + self.breturn zdef loss(self, z, y):error = z - ynum_samples = error.shape[0]cost = error * errorcost = np.sum(cost) / num_samplesreturn costdef gradient(self, x, y):z = self.forward(x)gradient_w = (z-y)*xgradient_w = np.mean(gradient_w, axis=0)gradient_w = gradient_w[:, np.newaxis]gradient_b = (z - y)gradient_b = np.mean(gradient_b)return gradient_w, gradient_b
# 调用上面定义的gradient函数,计算梯度
# 初始化网络
net = Network(13)
# 设置[w5, w9] = [-100., -100.]
net.w[5] = -100.0
net.w[9] = -100.0z = net.forward(x)
loss = net.loss(z, y)
gradient_w, gradient_b = net.gradient(x, y)
gradient_w5 = gradient_w[5][0]
gradient_w9 = gradient_w[9][0]
print('point {}, loss {}'.format([net.w[5][0], net.w[9][0]], loss))
print('gradient {}'.format([gradient_w5, gradient_w9]))
point [-100.0, -100.0], loss 686.3005008179159
gradient [-0.850073323995813, -6.138412364807849]运行上面的代码,可以发现沿着梯度反方向走一小步,下一个点的损失函数的确减少了。感兴趣的话,大家可以尝试不停的点击上面的代码块,观察损失函数是否一直在变小。在上述代码中,每次更新参数使用的语句: net.w[5] = net.w[5] - eta * gradient_w5相减:参数需要向梯度的反方向移动。
eta:控制每次参数值沿着梯度反方向变动的大小,即每次移动的步长,又称为学习率。
大家可以思考下,为什么之前我们要做输入特征的归一化,保持尺度一致?这是为了让统一的步长更加合适。如 图8 所示,特征输入归一化后,不同参数输出的Loss是一个比较规整的曲线,学习率可以设置成统一的值 ;特征输入未归一化时,不同特征对应的参数所需的步长不一致,尺度较大的参数需要大步长,尺寸较小的参数需要小步长,导致无法设置统一的学习率。

在这里插入图片描述

图8:未归一化的特征,会导致不同特征维度的理想步长不同

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

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

相关文章

一句话超短摘要,速览752篇EMNLP论文

文 | Posy阿花今年的EMNLP今天开始召开啦,不知道大家的论文列表都刷完没有呀~ 什么?论文太多,看不过来,怎么办?看了论文题目还是不知道讲的是什么,怎么办?别担心,今天阿花给大家带来…

LeetCode 136. 只出现一次的数字(异或^)

文章目录1. 题目信息2. 解题1. 题目信息 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例…

阿里蚂蚁金服中间件(Java 4轮面试题含答案):Redis缓存+线程锁+微服务等

第一轮 说说HaspMap底层原理?再说说它跟HaspTable和ConcurrentHashMap他们之间的相同点和不同点? 讲讲jdk1.7和1.8的区别? 几种内置的线程池 MySQL事务隔离级别以及MVCC机制 Redis缓存雪崩、缓存穿透以及如何解决? 分布式架构…

简述python setup.py install的过程

原文连接:https://www.jianshu.com/p/f8ffbf18c312 简述python setup.py install的过程0.4872018.06.27 18:24:01字数 372阅读 31,948python setup.py install 是我们用来安装下载的python包或者自己按照python官方规范开发的扩展包的常用指令。通过这个命令&#x…

IDEA:将web工程部署到tomcat

在项目结构中进行部署即可:

NeurIPS 2020 所有RL papers全扫荡

文 | 微尘-黄含驰源 | 知乎论文列表1.《Breaking the Sample Size Barrier in Model-Based Reinforcement Learning with a Generative Model》关键词:model-based reinforcement learning, minimaxity, planning, policy evaluation, instance-dependent guarantee…

java架构师进阶独孤九剑系列(一):数据结构与算法

“ 架构师进阶系列之独孤九剑,这套秘籍如果你能完整学会,年薪至少60万起,今天是架构师进阶连载开启篇。 Java程序员成长为架构师进阶步骤 未来我会用1-2个月在实战为大家讲解架构师的九大必备技能。 架构师进阶系列之独孤九剑九大步骤&…

【社招/实习】百度大搜索招聘NLP、搜索方向算法工程师!

星标/置顶小屋,带你解锁最萌最前沿的NLP、搜索与推荐技术工作职责负责百度搜索中的语义理解及相关性计算、LTR排序逻辑、query分析理解、召回匹配等相关算法创新及优化工作;关注传统机器学习与数据挖掘、深度学习、强化学习等方向的前沿技术,…

最全Java面试180题:阿里11面试+网易+百度+美团!含答案大赠送!

网络编程 ISO模型与协议 http1.0:需要使用keep-alive参数来告知服务器端要建立一个长连接 http1.1:默认长连接。支持只发送header信息,可以用作权限请求。支持Host域。 http2.0:多路复用的技术,做到同一个连接并发处…

Redis持久化(RDB 和 AOF)

一、RDB持久化 RDB(Redis DataBase): 配置文件中对其的相关配置: 触发机制: 恢复rdb文件: 优点: 缺点: 二、AOF持久化 AOF(Append Only File)&#x…

LeetCode 78. 子集(回溯)

文章目录1. 题目信息2. 解题2.1 暴力回溯2.2 循环2.3 位运算1. 题目信息 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例:输入: nums [1,2,3] 输出: [[3],[1],[2…

EMNLP'20最佳论文揭晓!八块肌肉=能打电话?!

文 | 小轶(y)背景今天上午十点刚刚颁布的EMNLP 2020最佳论文,获奖者是来自UCBerkeley团队的这篇Digital Voicing of Silent Speech。刷了那么多NLP论文,各种pretraining、BERT、XXX-former...是不是都快刷出审美疲劳了?今年的EMNLP best pape…

空洞卷积相关理解

多标签文本分类:基于语义单元的空洞卷积:https://zhuanlan.zhihu.com/p/50231229?utm_sourceweibo 原文链接:https://www.jianshu.com/p/f743bd9041b3 扩展阅读:https://blog.csdn.net/c9Yv2cf9I06K2A9E/article/details/7982559…

2019 最全阿里天猫Java 3面真题,含面试题答案!

1 阿里天猫Java一面 自我介绍 jvm GC原理,JVM怎么回收内存 ConcurrentHashMap是怎么解决并发问题的? HashMap怎么从链表转换为红黑树?如果存入的是null键,放在桶的哪个位置? 谈谈Synchronized与ReentrantLock的区别…

NumPy快速入门--形状操作

文章目录1. 更改数组的形状2. 将不同数组堆叠在一起3. 将一个数组分成几个较小的数组1. 更改数组的形状 >>> import numpy as np >>> a np.floor(10*np.random.random((3,4))) >>> a array([[2., 2., 5., 6.],[2., 7., 4., 2.],[9., 3., 5., 8.]]…

深度学习语义分割理论与实战指南.pdf

深度学习语义分割理论与实战指南 V1.0 版本已经完成,主要包括语义分割概述、关键技术组件、数据模块、经典分割网络与架构、PyTorch基本实战方法等五个部分。获取方式:扫描关注下方公众号回复 语义分割 即可。图像分类、目标检测和图像分割是基于深度学习…

Jedis工具类

目录 一、基本使用 1、xml 引入依赖 2、简单测试 二、工具类 1、编写redis属性文件 2、编写工具类 3、使用测试 Jedis是Redis官方推荐的Java连接开发工具。 一、基本使用 1、xml 引入依赖 <dependencies><dependency><groupId>redis.clients</gr…

最新鲜的美团Java面试41题(三面技术+HR面):Redis+Kafka+分布式

Java一面 hashmap与concurrenthashmap的区别 垃圾回收算法以及垃圾回收器 CMS的回收步骤 G1和CMS的区别 CMS哪个阶段是并发的哪个阶段是串行的&#xff1f; G1内部是如何分区的&#xff08;region&#xff09; HashMap如何解决Hash冲突 my sql 索引类别 什么是覆盖索引…

今年阿里双十一提升广告点击率居然用的是这种算法?!

文 | 阿里巴巴定向广告团队源 | 知乎写在前面的碎碎念这篇文章主要是介绍我们在CTR建模领域最新的工作CAN&#xff0c;CAN已经在双十一前全面在阿里定向广告落地&#xff0c;在线效果提升非常显著。一般文章会以事后的视角来写&#xff0c;这样思考会更完整&#xff0c;会屏蔽掉…