大一/python/DL/api

导入

1
2
3
from torch.utils import data
import torch
from torch import nn#neural network

数据

1
2
3
4
5
6
7
8
9
trans = torchvision.transforms.ToTensor()#变换为张量
mnist_train = torchvision.datasets.MNIST(
root="./data", train=True, transform=trans, download=True)
mnist_test = torchvision.datasets.MNIST(
root="./data", train=False, transform=trans, download=True)

train_iter=data.DataLoader(mnist_train,256,True)
test_iter=data.DataLoader(mnist_test,256,True)
#变成一个迭代器

注意labels的形状为$m\times 1$而非$m$

返回一个迭代器,用$\rm next(iter(data))$来访问

网络结构

1
2
3
4
5
6
7
#先定义参数
def init_weight(m):
if type(m)==nn.linear:
nn.init.normal_(m.weight,std=0.01,mean=0)
#不能用randn,太大了
net.apply(init_weight)
net=nn.Sequential(nn.Linear(2,1))

优化

1
2
3
4
5
6
7
8
9
10
11
12
loss=nn.MSELoss()#损失函数
trainer=torch.optim.SGD(net.parameters(),lr=0.03)
#实例化优化器

for epoch in range(epochs):
for X, y in data_iter:#迭代器每次返回X和y
l = loss(net(X) ,y)
trainer.zero_grad()#清零梯度
l.backward()
trainer.step()#自动前进
l = loss(net(feature), lables)#每轮再计算loss
print(f'epoch {epoch + 1}, loss {l:f}')
Shiwei Pan wechat