深度学习,线性模型实战,求助

我想要咨询求助

# -*- codeing = utf-8 -*-
# @Time : 2020/9/23 11:00
# @Author : 宋保贤
# @File : demo1.py
# @Software : PyCharm
import numpy as np


def main():

    # 加载训练集数据,这些数据是通过真实模型添加观测误差采样得到的

    lr = 0.01  # 学习率
    initial_b = 0  # 初始化 b 为 0
    initial_w = 0  # 初始化 w 为 0
    num_iterations = 1000               # 共循环迭代次数
    # 训练优化 1000 次,返回最优 w*,b*和训练 Loss 的下降过程
    [b, w], losses = gradient_descent(data, initial_b, initial_w, lr, num_iterations)
    loss = mse(b, w, data)    # 计算最优数值解 w,b 上的均方差
    print(f'Final loss:{loss}, w:{w}, b:{b}')


data = []   # 保存样本集的列表
for i in range(100):   # 循环采样 100 个点
    x = np.random.uniform(-10., 10.)    # 随机采样输入 x
    # 采样高斯噪声
    eps = np.random.normal(0., 0.1)    # #  均值为 0,方差为   0.1的平方
    # 得到模型的输出
    y = 1.477 * x + 0.089 + eps
    data.append([x, y])     # 保存样本点  append()函数用于在列表末尾添加新的对象。
data = np.array(data)    # 转换为 2D Numpy 数组


def mse(b, w, points):
    # 根据当前的 w,b 参数计算均方差损失
    totalerror = 0
    global i, x, y
    for i in range(0, len(points)):   # 循环迭代所有点
        x = points[i, 0]  # 获得 i 号点的输入 x [横坐标,纵坐标]
        y = points[i, 1]  # 获得 i 号点的输出 y [横坐标,纵坐标]
    # 计算差的平方,并累加
    totalerror += (y - (w * x + b)) ** 2      # *  代表乘法   ** 代表乘方
    # 将累加的误差求平均,得到均方差
    return totalerror / float(len(points))


def step_gradient(b_current, w_current, points, lr):
    # 计算误差函数在所有点上的导数,并更新 w,b   不连续梯度
    b_gradient = 0
    w_gradient = 0
    m = float(len(points))  # 总样本数
    global i, x, y
    for i in range(0, len(points)):
        x = points[i, 0]
        y = points[i, 1]
        # 误差函数对 b 的导数:grad_b = 2(wx+b-y),参考公式(2.3)
        b_gradient += (2/m) * ((w_current * x + b_current) - y)
        # 误差函数对 w 的导数:grad_w = 2(wx+b-y)*x,参考公式(2.2)
        w_gradient += (2/m) * x * ((w_current * x + b_current) - y)
    # 根据梯度下降算法更新 w',b',其中 lr 为学习率,用来缩放
    new_b = b_current - (lr * b_gradient)
    new_w = w_current - (lr * w_gradient)
    return [new_b, new_w]


def gradient_descent(points, starting_b, starting_w, lr, num_iterations):
    # 循环更新 w,b 多次
    b = starting_b  # b 的初始值
    w = starting_w  # w 的初始值
    # 根据梯度下降算法更新多次  共循环迭代 num_iterations 个 Epoch
    for step in range(num_iterations):
        # 计算梯度并更新一次
        b, w = step_gradient(b, w, np.array(points), lr)
        loss = mse(b, w, points)  # 计算当前的均方差,用于监控训练进度
        if step % 50 == 0:  # 打印误差和实时的 w,b 值
            print(f"iteration:{step}, loss:{loss}, w:{w}, b:{b}")
    return [b, w]  # 返回最后一次的 w,b


if __name__ == "__main__":
    main()

但是,他会报错。

深度学习,线性模型实战,求助_第1张图片
希望大佬,帮我解决一下。我是新人,谢谢!

你可能感兴趣的:(python,神经网络,深度学习,tensorflow,机器学习)