李沐《动手学深度学习》softmax回归python代码实现

一、手动实现softmax回归

# 手动实现softmax回归
# %matplotlib inline
import torch
from d2l import torch as d2l
import matplotlib.pyplot as plt
from IPython import display

# 参数初始化:
batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)

# 将28*28的图片展开成一维的784长度的向量
num_inputs = 784
num_outputs = 10

# 初始化参数w的一个784*10的矩阵,偏置项b是一个长度为10的向量
W = torch.normal(0,0.1,size=(num_inputs, num_outputs), requires_grad = True)
b = torch.zeros(num_outputs, requires_grad = True)
lr = 0.1

# 累加器
class Accumulator():
    def __init__(self, n):
        self.data = [0.0] * n
    def add(self, *args):
        # 以n=2为例,每次add(arg1, arg2),则data[0]+=arg1, data[1]+=arg2
        self.data = [a + float(b) for a, b in zip(self.data, args)]
    def reset(self):
        self.data = [0.0] * len(self.data)
    def __getitem__(self, idx):
        return self.data[idx]

# 定义一个动画类
class Animator:
    def __init__(self, xlabel=None, ylabel=None, legend=None, 
                  xlim=None, ylim=None, xscale='linear', yscale='linear', 
                  fmts=('-', 'm', 'g--', 'r:'), nrows=1, ncols=1, figsize=(3.5, 3.5)):

        if legend is None:
            legend = []

        self.fig, self.axes = plt.subplots(nrows, ncols, figsize = figsize)
        
        if nrows * ncols == 1: # 如果只有一个子图
            self.axes = [self.axes, ] # 也处理成list,为和多子图的情况统一处理
    

你可能感兴趣的:(深度学习,回归,python,机器学习,算法,人工智能)