《动手学深度学习》-10感知机的简约实现
·
一原理 类似softmax,在中间加了一层。 h=a<w1,x>+b1,a是激活函数 o=<w2,h>+b2 y=softmax(o)二pycharm环境代码实现 import torch import torchvision from torchvision import transforms from torch.utils import data import d2l from torch import nn import TIME1 import matplotlib.pyplot as plt trans = transforms.ToTensor() #把图片转成预处理,转成张量 mnist_train = torchvision.datasets.FashionMNIST( root="D:\PycharmDocument\limu\data", train=True, transform=trans, download=True) mnist_test = torchvision.datasets.FashionMNIST( root="D:\PycharmDocument\limu\data", train=False, transform=trans, download=True) batch_size=256 train_iter = data.DataLoader(mnist_train, batch_size, shuffle=True,num_workers=0) test_iter = data.DataLoader(mnist_test, batch_size, shuffle=True,num_workers=0) num_inputs=784 num_outputs=10 num_hidden=256 W1=nn.Parameter(torch.randn(num_inputs,num_hidden,requires_grad=True)) b1=nn.Parameter(torch.zeros(num_hidden,requires_grad=True)) W2=nn.Parameter(torch.randn(num_hidden,num_outputs,requires_grad=True)) b2=nn.Parameter(torch.zeros(num_outputs,requires_grad=True)) params=[W1,b1,W2,b2] def relu(x): a=torch.zeros_like(x) return torch.max(a,x) def net(x): X=x.reshape(-1,num_inputs) H=relu(torch.matmul(X,W1)+b1) return torch.matmul(H,W2)+b2 loss=nn.CrossEntropyLoss() num_epochs=10 lr=0.1 # for epoch in range(num_epochs): # for X,y in train_iter: # l=loss(net(X),y) # l.backward() # sgd(params,lr,batch_size) # print(f'epch: {epoch+1}, loss: {l.item()}') def updater(batch_size): with torch.no_grad(): for param in params: param -= lr * param.grad/batch_size param.grad.zero_() def train_epoch(test_iter,train_iter,loss, updater,num_epochs,net): animit=d2l.Animator(xlabel='epoch',ylabel='loss',xlim=[0,15],ylim=[0,1]legend=['train loss', 'train acc', 'test acc']) for epoch in range(num_epochs): test_acc=TIME1.evaluate_accuracy(test_iter,net) train_metric=TIME1.train_epoch_ch3(net, train_iter, loss, updater) animit.add(epoch+1,train_metric+(test_acc,)) train_epoch(test_iter,train_iter,loss, updater,10,net) plt.ioff() plt.show(block=True)
![]()
更多推荐
二pycharm环境代码实现
import torch
import torchvision
from torchvision import transforms
from torch.utils import data
import d2l
from torch import nn
import TIME1
import matplotlib.pyplot as plt
trans = transforms.ToTensor() #把图片转成预处理,转成张量
mnist_train = torchvision.datasets.FashionMNIST(
root="D:\PycharmDocument\limu\data", train=True, transform=trans, download=True)
mnist_test = torchvision.datasets.FashionMNIST(
root="D:\PycharmDocument\limu\data", train=False, transform=trans, download=True)
batch_size=256
train_iter = data.DataLoader(mnist_train, batch_size, shuffle=True,num_workers=0)
test_iter = data.DataLoader(mnist_test, batch_size, shuffle=True,num_workers=0)
num_inputs=784
num_outputs=10
num_hidden=256
W1=nn.Parameter(torch.randn(num_inputs,num_hidden,requires_grad=True))
b1=nn.Parameter(torch.zeros(num_hidden,requires_grad=True))
W2=nn.Parameter(torch.randn(num_hidden,num_outputs,requires_grad=True))
b2=nn.Parameter(torch.zeros(num_outputs,requires_grad=True))
params=[W1,b1,W2,b2]
def relu(x):
a=torch.zeros_like(x)
return torch.max(a,x)
def net(x):
X=x.reshape(-1,num_inputs)
H=relu(torch.matmul(X,W1)+b1)
return torch.matmul(H,W2)+b2
loss=nn.CrossEntropyLoss()
num_epochs=10
lr=0.1
# for epoch in range(num_epochs):
# for X,y in train_iter:
# l=loss(net(X),y)
# l.backward()
# sgd(params,lr,batch_size)
# print(f'epch: {epoch+1}, loss: {l.item()}')
def updater(batch_size):
with torch.no_grad():
for param in params:
param -= lr * param.grad/batch_size
param.grad.zero_()
def train_epoch(test_iter,train_iter,loss, updater,num_epochs,net):
animit=d2l.Animator(xlabel='epoch',ylabel='loss',xlim=[0,15],ylim=[0,1]legend=['train loss', 'train acc', 'test acc'])
for epoch in range(num_epochs):
test_acc=TIME1.evaluate_accuracy(test_iter,net)
train_metric=TIME1.train_epoch_ch3(net, train_iter, loss, updater)
animit.add(epoch+1,train_metric+(test_acc,))
train_epoch(test_iter,train_iter,loss, updater,10,net)
plt.ioff()
plt.show(block=True)


所有评论(0)