求偏导数函数如 numerical_gradient(f,x) 是根据
来求得的。它的输入x ,可以是1维的,也可以是多维的。
比如求x=np.array([1])处的偏导数
比如求x=np.array([1.0,2.0,3.0])处的偏导数
比如求x=np.array([[1.0,2.0,5.0],[3.0,4.0,6.0]]) 是2*3矩阵,求x处的偏导数
# -*- 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()