一个简单的卷积神经网络——gradient_check.py

梯度检验

对于一个函数而言,通常由两种梯度计算方法:

  • 数值梯度(numerical gradient)
  • 解析梯度(analytic gradient)

神经网络的算法使用反向传播计算目标函数关于每个参数的梯度,可以当作是解析梯度

由于计算过程中,参数较多,反向传播计算的梯度很容易产生误差,导致最后的迭代效果很差

故需要通过计算数值梯度,得到梯度的近似值,然后和反向传播得到的梯度及逆行比较,若两者相差很小则证明反向传播的代码是正确的

# coding: utf-8
import numpy as np
from simple_convolution_net import SimpleConvNet

""""""
network = SimpleConvNet(input_dim=(1, 10, 10),
                        conv_param={'filter_num':10, 'filter_size':3, 'pad':0, 'stride':1},
                        hidden_size=10, output_size=10, weight_init_std=0.01)

X = np.random.rand(100).reshape((1, 1, 10, 10))
T = np.array([1]).reshape((1,1))

grad_num = network.numerical_gradient(X, T)
grad = network.gradient(X, T)

for key, val in grad_num.items():
    print(key, np.abs(grad_num[key] - grad[key]).mean())

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值