用Numpy实现一个简单的神经网络

news/2024/7/24 9:09:49

本示例来自于PyTorch的官网上的一个warm-up小示例, 觉得很有代表性, 所有这里单独记录一下.
对于numpy来说, 它对计算图, 深度学习, 梯度等等概念几乎是不知道的, 但是, 如果我们了解简单神经网络的具体结构, 那么我们就可以很轻易的用numpy来实现这个简单网络, 对此, 我们通常需要自己来实现前向计算和反向计算的逻辑, 下面我们来实现一个具有两层隐藏层的简单网络:

import numpy as np

# N 为batch size, D_in 为输入维度
# H 为隐藏层的维度, D_out 为输出的维度
N, D_in, H, D_out = 64, 1000, 100, 10

# 创建随机的输入和输出数据
x = np.random.randn(N, D_in) # N × D_in 的矩阵
y = np.random.randn(N, D_out) # N × D_out 的矩阵

# 对两个隐藏层w1,w2进行初始化
w1 = np.random.randn(D_in, H)
w2 = np.random.randn(H, D_out)

# 设置学习率
learning_rate = 1e-6
for t in range(500):
    # 前向传播: 计算预测结果 y_pred
    h = x.dot(w1) # x维度为64 × 1000, w1维度为 1000 × 100, 计算完以后, h维度为 64 × 100
    h_relu = np.maximum(h,0)
    y = h_relu.dot(w2) # h_relu维度为 64×100, w2维度为100×10, y的维度为64×10

    # 计算损失
    loss = np.square(y_pred - y).sum()
    print(t, loss)

    # 反向传播根据loss更新w1和w2的值
    grad_y_pred = 2.0*(y_pred - y) # 对y_pred求导
    grad_w2 = h_relu.T.dot(grad_y_pred) # 对w2求导, 微分矩阵应该与w2的size相同
    grad_h_relu = grad_y_pred.dot(w2.T) # 对h_relu求导
    grad_h = grad_h_relu.copy()
    grad_h[h < 0] = grad_h_relu # 经过relu, 将小于0的梯度归0
    grad_w1 = x.T.dot(grad_h)

    # Update weights
    w1 = w1 - learning_rate * grad_w1
    w2 = w2 - learning_rate * grad_w2

在执行上述代码以后, w1w2的值会是的预测出来的pred_yy之间的平方损失越来越小.


http://www.niftyadmin.cn/n/1016537.html

相关文章

CNN:add padding pixels 解释

一句话总结 padding是增加各个边的pixels的数量&#xff0c;目的是保持feature map 不要太小&#xff0c;但也没必要超过原图的大小&#xff0c;所以不可以任意数量&#xff1b;padding的上限是维持feature map 大小与原图大小一致&#xff0c;具体增加pixel的数量多少&#xf…

安装 maskrcnn-benchmark 报错command 'gcc' failed with exit status 1

command ‘gcc’ failed with exit status 1 更换 gcc 版本.(太高不行, 太低也不行) 建议使用4.9或者5.4版本的gcc. 如果更换后, 会产生一大堆其他cpp文件错误, 则删除那些文件(我这里是在练习用的cpp文件夹下报错)

【转】NMS【non-maximum suppression】—非极大值抑制

原文&#xff1a;https://blog.csdn.net/shuzfan/article/details/52711706 NMS&#xff08;non maximum suppression&#xff09;&#xff0c;中文名非极大值抑制&#xff0c;在很多计算机视觉任务中都有广泛应用&#xff0c;如&#xff1a;边缘检测、目标检测等。 这里主要…

安装 maskrcnn-benchmark: command ':/usr/local/cuda/bin/nvcc' failed with exit status 1

command ‘:/usr/local/cuda/bin/nvcc’ failed with exit status 1 unable to execute :/usr/local/cuda/bin/nvcc: No such file or directory error: command :/usr/local/cuda/bin/nvcc failed with exit status 1提示找不到 nvcc, 但是输入 nvcc --version, 却可以正常显…

【Pytorch-入门】windows+Anaconda虚拟环境搭建(避免不必要的包冲突)

前言 实验需要&#xff0c;之前使的tensorflow【因为自己手边的服务器都是windows环境TT...】&#xff0c;但身边的师兄们用的都是pytorch&#xff0c;自己查了查现在做科研基本上都是用的pytorch&#xff0c;而且现在pytorch的windows版本也已经很成熟了&#xff0c;fastai深…

【目标检测】评价指标-分类汇总【持续更新】

一、检测-正确-相关评价指标 1、准确率&#xff08;Accuracy&#xff09;&#xff1a; 分对的样本数除以所有的样本数 &#xff0c;即&#xff1a;准确&#xff08;分类&#xff09;率 正确预测的正反例数 / 总数。 准确率一般用来评估模型的全局准确程度&#xff0c;不能包…

MaskrcnnBenchmark 源码解析-模型定义(modeling)之骨架网络(backbone)

源码文件 不论是在训练脚本文件 train_net.py 还是在测试脚本文件 test_net.py 中, 都调用了 build_detection_model(cfg) 函数来创建模型, 该函数封装了模型定义的内部细节, 使得我们可以通过配置文件轻松的组合出不同类型的模型, 为了能够更好的了解模型的内部细节, 我们有必…

【转】python处理xml数据文件

实验需要&#xff0c;数据有一部分是xml的&#xff0c;顺便学一下xml文件的处理方法&#xff0c;原文格式不是很美观&#xff0c;这里我稍微调整了一下&#xff1a; 原文&#xff1a;https://www.cnblogs.com/fnng/p/3581433.html 关于python读取xml文章很多&#xff0c;但大多…