目录
1. Pytorch安装:
可以参考之前的文章:Win10 下安装 CUDA Toolkit
简单检查下:
代码:
import torch
print(torch.__version__) #版本
print(torch.cuda.is_available()) #GPU是否可用
结果:
1.10.2
True
2. 梯度下降算法(Gradient Descent)
2.1 梯度下降的原理:
梯度下降算法(Gradient Descent Optimization)是神经网络模型训练最常用的优化算法。对于深度学习模型,基本都是采用梯度下降算法来进行优化训练的。梯度下降算法背后的原理:目标函数 [公式] 关于参数 [公式] 的梯度将是损失函数(loss function)上升最快的方向。而我们要最小化loss,只需要将参数沿着梯度相反的方向前进一个步长,就可以实现目标函数(loss function)的下降。
具体可以一文看懂常用的梯度下降算法
2.2 梯度下降运用例子:
假设: 我们有数据集合X,Y ,并且Y与X的关系满足:
我们的目标就就是:求W,b 并且使得loss 最小
运用梯度下降的方法:
先求梯度:
得到新的w’ 与b‘ 然后进行迭代,根据当前的w,b,lr 代入运算
2.3 python代码实现:
首先有数据集合:data.csv,其中包括了X,Y的数值.
compute_error_for_line_given_points 函数计算loss:
def compute_error_for_line_given_points(b, w, points):
#保存总loss
totalError = 0
for i in range(0, len(points)):
x = points[i, 0]
y = points[i, 1]
totalError += (y - (w * x + b)) ** 2
return totalError / float(len(points))
step_gradient 函数计算新的w’ 与b’
def step_gradient(b_current, w_current, points, learningRate):
b_gradient = 0
w_gradient = 0
N = float(len(points))
for i in range(0, len(points)):
x = points[i, 0]
y = points[i, 1]
b_gradient += -(2/N) * (y - ((w_current * x) + b_current))
w_gradient += -(2/N) * x * (y - ((w_current * x) + b_current))
new_b = b_current - (learningRate * b_gradient)
new_w = w_current - (learningRate * w_gradient)
return [new_b, new_w]
gradient_descent_runner 迭代的次数与w,b的的更新
run 运行函数:
def run():
points = np.genfromtxt("data.csv", delimiter=",")
learning_rate = 0.0001
initial_b = 0 # initial y-intercept guess
initial_m = 0 # initial slope guess
num_iterations = 1000
print("Starting gradient descent at b = {0}, m = {1}, error = {2}"
.format(initial_b, initial_m,
compute_error_for_line_given_points(initial_b, initial_m, points))
)
print("Running...")
[b, m] = gradient_descent_runner(points, initial_b, initial_m, learning_rate, num_iterations)
print("After {0} iterations b = {1}, m = {2}, error = {3}".
format(num_iterations, b, m,
compute_error_for_line_given_points(b, m, points))
)
主函数main:
if __name__ == '__main__':
run()
2.4. 运行结果
Starting gradient descent at b = 0, m = 0, error = 5565.107834483211
Running...
After 1000 iterations b = 0.08893651993741346, m = 1.4777440851894448, error = 112.61481011613473
3. 代码整合:
无需积分:代码与数据