关于最简单的机器学习的梯度下降公式的求导过程
·
那么对该式求导可得
然后由
由求导的连续法则
那么loss对k求导得
用python的numpy表示为
grad_w = 2/sample_num * np.dot(-(y - y_pred),X)
对b求导同理
完整代码如下
import numpy as np
import matplotlib.pyplot as plt
# import tensorflow as tf
# from tensorflow.examples.tutorials.mnist import input_data
true_w = 2.5
true_b = 1.0
sample_num = 199
X = np.linspace(0,10,sample_num)
noise = np.random.normal(0,2.0,sample_num)
#第一个参数是均值,第二个参数是标准差,第三个值是样本数量
y = true_w*X + true_b +noise
plt.figure(figsize = (10,6))
#宽10英寸,高6英寸
plt.scatter(X,y)#画的散点图
# plt.show()
def linear_model(X,w,b):
return X*w +b
def loss_f(y_true,y_pred):
#MSE
return np.mean((y_true - y_pred)**2)
w = 0
b = 0
learning_rate = 0.01 #是自己试的,通过经验来
loses = []#观察每一步损失有多大
epoches = 1000
#因为样本量小,所以不用分batch
for epoch in range(epoches):
y_pred = linear_model(X,w,b)#X是药物的计量,X,w,b都是向量
loss = loss_f(y,y_pred)
loses.append(loss)
#现在就要开始进行梯度下降啦
grad_w = 2/sample_num * np.dot(-(y - y_pred),X)
grad_b = 2/sample_num * np.sum(-y + y_pred)
w = w - learning_rate * grad_w
b = b - learning_rate * grad_b
if (epoch+1)%100 == 0:
print("{}{}{}{}".format(epoch+1,loss,w,",",b))
print("final w = ",w)
print("final b = ",b)
更多推荐
所有评论(0)