模型构建以及训练用到的重要API

1. 模型构建

1.1 读入数据

import numpy as np
data = np.fromfile(datafile, sep=' ')

datafile为数据所在的地址,sep为数据的分隔符号,用这条语句可以方便地将数据以一维数组的方式取出。

1.2 数据格式转换

data = data.reshape(row_num, column_num) # row_num为行数,column_num为列数

在波士顿房价预测模型中,每一个样本有13个特征,1个目标值,即每一个样本都有14个值,所以很快可以确定列数为14,行数就是 data中数据总数/14。

1.3 数据集划分

offset = int(data.shape[0] * ratio)
training_data = data[:offset]

ratio就是我们需要划分的比例,data.shape[0]就是样本的总数。

1.4 归一化处理

for i in range(feature_num):
    data[:, i] = (data[:, i] - avgs[i]) / (maximums[i] - minimums[i])

将数据放缩到0~1之间,起到统一量纲的作用。

1.5 构建模型

np.random.seed(0) 
# seed( ) 用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed( )值,则每次生成的随即数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
numpy.random.rand(d0,d1,,dn)
# rand函数根据给定维度生成[0,1)之间的数据,包含0,不包含1
# dn表格每个维度
# 返回值为指定维度的array
np.dot(x, y)
# 将x与y矩阵中的元素做点乘
np.mean(x, axis= )
# 对矩阵x中的元素求平均,返回一个实数
# axis表示对矩阵x的哪一维求平均。

2. 模型训练

2.1 使用Numpy进行梯度计算

def gradient(self, x, y):
        z = self.forward(x)
        gradient_w = (z-y)*x
        gradient_w = np.mean(gradient_w, axis=0)
        gradient_w = gradient_w[:, np.newaxis]
        gradient_b = (z - y)
        gradient_b = np.mean(gradient_b)        
        return gradient_w, gradient_b

2.2 梯度更新

def update(self, gradient_w, gradient_b, eta = 0.01):
    self.w = self.w - eta * gradient_w
    self.b = self.b - eta * gradient_b

2.3 训练过程封装

def train(self, x, y, iterations=1000, eta=0.01):
    losses = []
    for i in range(iterations):
        z = self.forward(x)								# 前向计算
        L = self.loss(z, y)								# 损失函数
        gradient_w, gradient_b = self.gradient(x, y)	  # 计算梯度
        self.update(gradient_w, gradient_b, eta)		  # 更新梯度
        losses.append(L)
        if (i+1) % 10 == 0:
            print('iter {}, loss {}'.format(i, L))
    return losses

2.4 随机梯度下降法SGD

核心概念:

  • mini-batch:每次迭代时抽取出来的一批数据被称为一个mini-batch。
  • batch_size:一个mini-batch所包含的样本数目称为batch_size。
  • epoch:当程序迭代的时候,按mini-batch逐渐抽取出样本,当把整个数据集都遍历到了的时候,则完成了一轮训练,也叫一个epoch。启动训练时,可以将训练的轮数num_epochs和batch_size作为参数传入。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在下六斤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值