python 求偏导数 调用偏导数函数的输入

求偏导数函数如 numerical_gradient(f,x) 是根据

python 求偏导数 调用偏导数函数的输入_第1张图片

来求得的。它的输入x ,可以是1维的,也可以是多维的。

比如求x=np.array([1])处的偏导数

python 求偏导数 调用偏导数函数的输入_第2张图片

比如求x=np.array([1.0,2.0,3.0])处的偏导数

python 求偏导数 调用偏导数函数的输入_第3张图片

 

比如求x=np.array([[1.0,2.0,5.0],[3.0,4.0,6.0]])  是2*3矩阵,求x处的偏导数

python 求偏导数 调用偏导数函数的输入_第4张图片

 

# -*- coding: utf-8 -*-
"""
Created on Tue Jun 26 09:04:14 2019

@author: Administrator
"""
import sys, os
sys.path.append(os.pardir)
import numpy as np
from common.gradient import numerical_gradient
import matplotlib.pylab as plt

class simple:
    def __init__(self,x,y):
        self.x=x
        self.y=y     
        
    def f(self):
        z=np.sum((self.x**2)/20+self.y**2)
        return z
    
    
    def grad(self):
        grads={}  
        self.f()
        Func=lambda W:self.f()
        grads['x']=numerical_gradient(Func,self.x)
        grads['y']=numerical_gradient(Func,self.y)
        return grads


params={}
params['x']=np.array([1.0])

#params['x']=np.array([1.0,2.0,3.0])

#params['x']=np.array([[1.0,2.0,5.0],[3.0,4.0,6.0]])
print(params['x'])
params['y']=np.array([1.0])
Net=simple(params['x'],params['y'])
grads=Net.grad()
plt.plot(params['x'],grads['x'],"ro") 
plt.xlabel('x')
plt.ylabel('dx')
plt.title('gradient')
plt.show()  

你可能感兴趣的:(python)