深度学习Matplotlib操作

Matplotlib时python中最常用的可视化工具之一,在函数设计上参考了MATLAB

1图标展示:

以梯度下降法找到 f(x)=x*x的极小值。(梯度下降法推荐B站梗直哥视频)

简单讲解:就是找到山谷在哪里的问题,通过函数值减去学习率乘这一点的导数得到下一步的值,重复多次,次数由迭代周期决定。

学习率为1时在最小值左右反复横跳,过小效率变低,过大准确率下降。我理解的就是每次迭代的步长,步大了不准,步小了太慢。

第一步:创建函数目标及函数目标的求导函数

import numpy as np
import matpoltlib.pyplot as plt

#目标函数:y=x^2
def func(x):
    return np.square(x)

#目标函数一阶导数也即偏导数:dy/dx=2*x
def dfunc(x):
    return 2*x

第二步:梯度算法实现

def gradient_descent(x_start,func_deri,epochs,learning_rate):
    """
    梯度下降法。给定起始点与目标函数的一阶导函数,求在epochs次迭代中x的更新值
    args:
        x_start:x的起点
        func_deri:目标函数的一阶导函数
        epochs:迭代周期
        learning_rate:学习率
    return :
        xs每次迭代后的位置(包括起始点),长度为epochs+1
    """
    theta_x=np.zeros(epochs+1)
    temp_x=x_start
    theta_x[0]=temp_x
    for i in range(epochs):
        deri_x=func_deri(temp_x)
        delta=-deri_x*learning_rate
        temp_x=temp_x+delta
        theta_x[i+1]=temp_x
    return theta_x

第三步:利用Matplotlib实现图形绘制

def mat_plot():
    #实现图像绘制
    line_x=np.linspace(-5,5,100)    #返回一个从-5到5的等距的含100个元素的队列
    line_y=func(line_x)
    
    x_start=-5
    epochs=5
    lr=0.3
    x=gradient_descent(x_start,dfunc,epochs,lr)

    color='r'
    #polt实现绘制的主功能
    plt.plot(line_x,line_y,c='b')                 #绘制f=x^2图像
    plt.plot(x,func(x),c=color,label='lr={}'.format(lr))  #绘制阶梯点连线
    plt.scatter(x,func(x),c=color, )                      #绘制阶梯点
    #legend函数显示比例  ??  
    plt.legend()                                   #显示图注
    #show函数显示
    plt.show()                                     #展示图,不写不展示
mat_plot()

运行记录:

        错误:SyntaxError:positional argument follows keyword argument

                抄错了,绘图部分:plt.plot参数中label='lr={ }'.format(lr)   第一次 . 写成 ,了

        label='lr={}中间不要有括号

        x=gradient_descent()中最后一个参数写成lr=lr 不行,说接收到未期待参数,不明白为什么

补充:库的安装:window+r打开终端,输入  pip install  库名

在改了一堆小错误后,终于运行起来了,happy!!!

成果展示:深度学习Matplotlib操作_第1张图片

你可能感兴趣的:(matplotlib,深度学习,python)