动手学深度学习-task01

Task-1:
线性回归、多层感知机、softmax函数

(1)线性回归作为基本的机器学习算法,实现较简单,应用广泛。
以下为用pytorch编写的线性回归类

import torch.nn as nn
import torch
from torch.autograd import Variable
from torch import optim
from torch.utils import data
import random
class linear_regression(nn.Module):
    def __init__(self,x,y,batch_size=10,batch=False,iter_number=1000,lr=0.001,bias=True):
        super(linear_regression, self).__init__()
        self.x=x
        self.y=y
        self.iter_number=iter_number
        self.lr=lr
        self.bias=bias
        self.batch_size=batch_size#进行批量梯度下降
        self.batch=batch
    def compute(self,w,x):#进行预测
        predict=w*x
        return predict
    def loss(self,y,y_p):
        loss=((y-y_p)**2).sum()
        return loss
    def SGD(self,w,x,y,lr):
        index=random.randint(0,x.size(0)-1)
        rand_x=x[index]
        rand_y=y[index]
        w.data=w.data+lr*(rand_y-w*rand_x)*rand_x
        return w

def Linear(x,y,batch_size=10,batch=False,iter_number=10000,lr=0.001,bias=True):
    if bias: # 生成权重(可设置是否添加偏差)
        weight=Variable(torch.rand(size=(1,x.size(1))),requires_grad=True)
    else:
        weight=Variable(torch.rand(size=(1,x.size(1))),requires_grad=True)
    model=linear_regression(x=x,y=y,batch_size=batch_size,batch=batch,lr=lr,bias=bias)
    dataset = data.TensorDataset(x, y)
    dataset = data.DataLoader(dataset, batch_size=batch_size, shuffle=True)
    for i in range(iter_number):# 迭代多少次
        y_predict = model.compute(weight, x)  # 计算预测值
        loss = model.loss(y, y_predict)  # 计算损失函数
        loss.backward()
        weight=model.SGD(weight,x,y,lr)
        print('第{}次迭代已完成,损失误差为{}'.format(i+1,loss))

运行输出结果为:

第9117次迭代已完成,损失误差为697.6427001953125
第9118次迭代已完成,损失误差为697.6484375
第9119次迭代已完成,损失误差为697.6598510742188
第9120次迭代已完成,损失误差为697.6563720703125

(2)多层感知机
感知机的原理只是以设定一个超平面来进行划分,使误分类的样本个数最小,但其损失函数并不是以最小误分类数来设定的,而是求解样本的误分类点离超平面的距离,令其距离最小,从而实现样本的划分。感知机的原理在支持向量机的部分会得到进一步的优化。

你可能感兴趣的:(动手学深度学习-task01)