龙曲良-TensorFlow-深度学习 学习笔记 第二章 回归问题

2.1 神经元模型

在这里插入图片描述
梯度为各个向量的偏导数组成的向量

f=wx+b

IndentationError: unindent does not match any outer indentation level
占位问题 一定要用同样的tab来进行代码对齐!

推导两个导数的函数公式如下:
在这里插入图片描述
在这里插入图片描述
然后用代码表示出:

  1. 初始化一个加了误差的模型的数据
  2. 计算这个模型和真实数据的误差
  3. 计算梯度(b和w的导数参照上面的公式)
  4. 梯度更新(自己定义计算训练的次数 更新依照x=x-学习率*梯度

代码如下 :主要就是按照以上流程进行

import tensorflow as tf
import sys
import numpy as np


#采样数据
data=[]
for i in range (100):        #循环采样100次
 x=np.random.uniform(-10.,10.)      #均匀分布的U中随机采样数据x
 eps =np.random.normal(0.,0.01)    #噪声
 y=1.477*x+0.089+eps
 data.append([x,y])
data=np.array(data)  #转化为2维数组

#计算误差
#循环计算每个点与真实值的差的平方和 以获得均方误差
def mse(w,b,points):
 totalError=0
 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):
    b_gradient=0  #计算函数误差在所有点上的导数,并更新w,b
    w_gradient=0
    M=float(len(points))   #总样本数
    for i in range(0,len(points)):
        x=points[i,0]
        y=points[i,1]
        b_gradient += (2/M) * ((w_current*x+b_current)-y)  #函数对b的导数
        w_gradient += (2/M) * ((w_current*x+b_current)-y) * x   #函数对w的导数
    new_b = b_current - (lr * b_gradient)      #根据算法更新w b其中lr是学习率
    new_w = w_current - (lr * w_gradient)
    return [new_b, new_w]

#梯度更新  根据 x=x-(学习率)* (导数)
def gradient_descent(points, starting_b, starting_w, lr, num_iterations):

    b = starting_b  # b的初始值  # 循环更新 w,b 多次
    w = starting_w  # w的初始值

    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

def main():
    lr=0.01 #学习率
    initial_b = 0  # 初始化b为0
    initial_w = 0  # 初始化w为0
    num_iterations = 1000  # 训练优化1000次,返回最优w*,b*和训练Loss的下降过程
    [b, w] = 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}')

但是这个代码块并没有运行出结果 ,没有输出

希望可以帮助到你!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值