zoukankan      html  css  js  c++  java
  • 神经网络学习笔记3

    神经网络
    ①梯度
    梯度法:在学习时找到最优参数,使用梯度寻找函数最小值方法:函数取值从
    梯度:表示各点处函数减少最多的方向,不一定指向最小值,但沿着方向可以最大限度减少函数的值。所以在寻找函数最小值的时候,以梯度信息为线索决定前进方向。
    学习率:在神经网络学习中,决定在一次学习中应该学习多少,以及在多大程度上更新参数

    使用python实现梯度下降法

    def gradient_descent(f,init_x,lr=0.01,step_num=100):
    x=init_x
    for i in range(setp_num):
    grad=numrical_gradient(f(x),x)
    x -= lr*grad
    return x

    f是要进行优化的函数,init_x是初始值,lr是学习率learning rate,step_num是梯度法的重复次数
    numerical_gradient(f,x)求函数的梯度,使用该计算的梯度乘以学习率得到的值更新操作,由step_num指定重复的次数。该函数还可以求函数最小值

    学习率过大,会发散成一个比较大的值;学习率过小,基本上没怎么更新就结束。设置合适的学习率非常重要。

    ※神经网络的梯度

    example:
    对于一个2*3权重W的神经网络,损失用L表示
    以一个简单的神经网络为例,实现求梯度代码
    实现一个名为simpleNet的类

    # coding: utf-8
    import sys, os
    sys.path.append(os.pardir)  # 为了导入父目录中的文件而进行的设定
    import numpy as np
    from common.functions import softmax, cross_entropy_error
    from common.gradient import numerical_gradient
    
    
    class simpleNet:
        def __init__(self):
            self.W = np.random.randn(2,3) #使用高斯分布进行初始化
    
        def predict(self, x):
            return np.dot(x, self.W)
    
        def loss(self, x, t):
            z = self.predict(x)
            y = softmax(z)
            loss = cross_entropy_error(y, t)
    
            return loss
    
    
    x = np.array([0.6, 0.9])
    
    t = np.array([0, 0, 1])
    
    net = simpleNet()
    print(net.W) #输出权重参数
    
    p=net.predict(x)
    print(p)
    
    
    
    f = lambda w: net.loss(x, t)
    dW = numerical_gradient(f, net.W)
    
    print(dW)

    numerical_gradient(f,x)参数是f函数,x为传给f的参数
    这里参数x取net.W,定义一个计算损失函数的新函数f,把新定义的函数传给numerical_gradient(f,x)

  • 相关阅读:
    怎样解决Script error报错问题
    怎样监听页面加载完成事件
    怎样推迟某个函数的执行
    怎样获取网页加载到现在的时间
    怎样获取用户当前选中的文本
    怎样调出打印界面
    怎样取余或取整
    怎样让元素节点滚动到特定位置
    怎样将页面滚动至特定位置
    怎样移动浏览器窗口位置
  • 原文地址:https://www.cnblogs.com/AKsnoopy/p/13488152.html
Copyright © 2011-2022 走看看