神经网络的数学基础

news/2025/3/6 19:00:45/文章来源:https://www.cnblogs.com/VickyWu/p/18756125

神经网络就是由一系列的张量运算组成

张量点积

import numpy as np
z=np.dot(x,y)
  • 两个向量x,y的点积
def naive_vector_dot(x,y):assert len(x.shape)==1assert len(y.shape)==1assert x.shape[0]==y.shape[0] #x的第0维和y的第0维要相同z=0.  #浮点数for i in range(x.shape[0]):z+=x[i]*y[i]return z
  • 一个矩阵x和一个向量y的点积
import numpy as npdef naive_matrix_vector_dot(x,y):assert len(x.shape)==2assert len(y.shape)==1assert x.shape[1]==y.shape[0]z=np.zero(x.shape[0])for i in range(x.shape[0]):for j in range(x.shape[1]):z[i]+=x[i,j]*y[j]return z

同样也可以复用前面的代码:

def naive_matrix_vector_dot(x,y):z=np.zeros(x.shape[0])for i in range(x.shape[0]):z[i]=naive_vector_dot(x[i, :],y)return z
  • 两个矩阵之间的点积
def naive_matrix_dot(x,y):assert len(x.shape)==2assert len(y.shape)==2assert x.shape[1]==y.shape[0] #x的1维和y的0维z=np.zeros((x.shape[0],y.shape[1]))for i in range(x.shape[0]):for j in range(y.shape[1]):row_x=x[i, :]column_y=y[:, j]z[i,j]=naive_vector_dot(row_x,column_y)return z

张量点积同样可以适用于更高维的张量!!!

但是形状得遵循与前面2D张量相同的原则:
(a,b,c,d) . (d,) -> (a,b,c)
(a,b,c,d) . (d,e) ->(a,b,c,e)
以此类推!!

张量变形

变形后的张量元素总个数与初始张量相同。一种特殊的张量变形是转置。

张量运算的导数——梯度(多元函数导数,输入可能有多个权重)

  • 例如输入的是一个矩阵W(同时还有输入的向量x)以此计算预测值y_pred,计算损失(或者说预测值y_pred和目标y之间的距离)
    保持x和y不变,那么就可以看作预测值y_pred和目标y之间的距离
    loss_value=f(W)
  • 若当前W的值为w0,f在W0点的导数是一个张量gradient(f)(W0),其形状与W相同
  • 训练循环trianing loop:
    1. 抽取训练样本x和对应目标的y组成的数据批量
    2. 在x上运行网络【这一步叫前向传播(forward pass)】,得到预测值y_pred。
    3. 计算网络在这批数据上的损失,用于衡量y_pred和y之间的距离。
    4. 更新网络的所有权重,使网络在这批数据上的损失略微下降
      • 可以采用随机梯度下降(小批量随机梯度下降SGD):
        计算损失相对于网络参数的梯度【一次反向传播(backward pass)】
        将参数沿着梯度的反方向移动一点,比如W -= step*gradient,从而使这批数据的损失减小一点

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

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

相关文章

MyBatis与其使用方法讲解

ORM在讲解Mybatis之前,我们需了解一个概念ORM(Object-Relational Mapping)对象关系映射,其是数据库与Java对象进行映射的一个技术.通过使用ORM,我们可以不用编写负责的Sql语句,而是通过操作对象来实现增删改查操作缺优分析优点提高开发效率,减少代码的重复性和维护成本 增加代码…

系统流程图

1.图书馆借阅管理系统流程图: 背景说明:在学校图书馆借阅管理系统中,学生借阅图书需要经过一系列流程。首先,学生携带校园卡前往借阅处,工作人员通过刷卡设备读取学生信息,系统验证学生身份是否有效。若身份无效,系统提示原因(如校园卡过期、欠费等)。若身份有效,学生…

基于Microsoft.Extensions.AI核心库实现RAG应用

本文介绍了如何基于Microsoft.Extensions.AI + Microsoft.Extensions.VectorData 一步一步地实现一个RAG(检索增强生成)应用,相信会对你有所帮助。如果你也是.NET程序员希望参与AI应用的开发,那就快快了解和使用基于Microsoft.Extensioins.AI + Microsoft.Extensions.Vecto…

Linux shell su command All In One

Linux shell su command All In One su !== sudo substitute user => su, 替换用户/切换用户 superuser do => sudo, 执行超级管理员用户权限 su - run a command with substitute user and group ID su - 使用替代用户和组 ID 来运行命令Linux shell su command All In …

座椅控制器SCM

智能座椅控制器SCM是经纬恒润设计研发的车身舒适性控制模块,实现电动座椅14向位姿调节及通风、加热、腰托、按摩等控制功能。其基于人机交互和整车中央控制,匹配多种应用场景,实现迎宾、一键零重力、二排方便上下车等座舱内前后排座椅联动的姿态和空间自动调整。 智能…

React18 函数组件的底层渲染机制与形参props的使用细节

前言: Vue中的组件开发: 1.全局组件和局部组件 2.函数组件和类组件(vue3不具备functional函数组件) React中的组件化开发: 没有明确全局和局部的概念,可以理解为都是局部组件,不过可以把组件注册到React上,这样每个组件只要导入React中即可使用 1.函数组件 2.类组件 3.…

c# 托管堆和垃圾回收的clr的控制

前言 简单讲述一下垃圾回收,我们能做的一些控制。 正文 强制回收 class Program {static void Main(){var str = new StringBuilder();var x = "";for (int i = 0; i < 500; i++){x += "xxxxxxxxsadasdasdsadsaewqeqczxcxzgsfaswqeqwrqwewqeasdasqweqwrqsda…

PHP调用redis消息队列案例

一、代码实例://需要成功引入并使用redis$redis = RedisManager::$redis;// 生产者:将订单加入队列(右端插入)function producer($orderId,$redis) { $redis->rPush(task_queue, $orderId); print_r("<br/>追加入列<br/>"); print_r($or…

redis消息队列案例

一、代码实例://需要成功引入并使用redis$redis = RedisManager::$redis;// 生产者:将订单加入队列(右端插入)function producer($orderId,$redis) { $redis->rPush(task_queue, $orderId); print_r("<br/>追加入列<br/>"); print_r($or…