用mnist简单训练个逻辑回归(单层神经网络)


先说个小事情

这个功能挺方便。

大体上总结以下流程

1.先整理数据集(这个是固定的东西,没什么可动的。)

import requests
DATA_PATH = Path("data") 
PATH = DATA_PATH / "mnist"
PATH.mkdir(parents=True, exist_ok=True)
URL = "https://github.com/pytorch/tutorials/raw/master/_static/" 
FILENAME = "mnist.pkl.gz"
if not (PATH / FILENAME).exists():
    content = requests.get(URL + FILENAME).content
    (PATH / FILENAME).open("wb").write(content)

再对数据集进行适当的变换,变成适合torch的形式

import pickle
import gzip

with gzip.open((PATH / FILENAME).as_posix(), "rb") as f:
        ((x_train, y_train), (x_valid, y_valid), _) = pickle.load(f, encoding="latin-1")

#每张图片尺寸是 28 x 28,被存储为长度为 784(=28x28)的向量。可以利用 `matplotlib` 看看其中一张图像,想要将其展示出来首先还需要先把其 reshape 为2D。

#```python
from matplotlib import pyplot
import numpy as np

pyplot.imshow(x_valid[1].reshape((28, 28)), cmap="gray")
print(x_train.shape)

#改变数据集形式
import torch
x_train, y_train, x_valid, y_valid = map(
    torch.as_tensor, (x_train, y_train, x_valid, y_valid)
)
n,c = x_train.shape
print(x_train,y_train)
print(n,c)

2.定义一下建立模型时会用到的一些参数和函数

3.建立回归模型对象

4.迭代更新权重和偏置

可以看到这个只有一层的神经网络(逻辑回归)结果还可以,