主页 > 手机  > 

深度学习02神经网络实现手写数字案例

深度学习02神经网络实现手写数字案例

目录

下载手写数字图像(图像+标签)

展示手写数字图片

数据打包

判断当前设备是否支持GPU

建立神经网络模型

设置训练集与测试集

创建损失函数、优化器

开始训练


下载手写数字图像(图像+标签) training_data=datasets.MNIST(    root='data',    train=True,    download=True,    transform=ToTensor(), ) test_data=datasets.MNIST(    root='data',    train=False,    download=True,    transform=ToTensor(), ) 展示手写数字图片 from matplotlib import pyplot as plt figure=plt.figure() for i in range(16):    img,label=training_data[i+59000]    figure.add_subplot(4,4,i+1)    plt.title(label)    plt.axis('off')    plt.imshow(img.squeeze(),cmap='gray')    a=img.squeeze() plt.show()

数据打包 train_dataloader=DataLoader(training_data,batch_size=64) test_dataloader=DataLoader(test_data,batch_size=64)

判断当前设备是否支持GPU device='cuda' if torch.cuda.is_available() else 'mps' if torch.backends.mps.is_available() else 'cpu' print(device) 建立神经网络模型 class  Neturalwork(nn.Module):    def __init__(self):        super().__init__()        self.flatten=nn.Flatten()        self.hidden1=nn.Linear(28*28,128)        self.hidden2=nn.Linear(128,256)        self.out=nn.Linear(256,10)    def forward(self,x):        x=self.flatten(x)        x=self.hidden1(x)        x=torch.sigmoid(x)        x=self.hidden2(x)        x=torch.sigmoid(x)        x=self.out(x)        return x ​ model=Neturalwork().to(device) print(model)

 

设置训练集与测试集 def train(dataloader,model,loss_fn,optimizer):    model.train()    batch_size_num=1    for x,y in dataloader:        x,y=x.to(device),y.to(device)        pred=model.forward(x)        loss=loss_fn(pred,y) ​        optimizer.zero_grad()        loss.backward()        optimizer.step()        loss_value=loss.item()        if batch_size_num%100==0:            print(f'loss:{loss_value:>7f} [number:{batch_size_num}]')        batch_size_num+=1 ​ def test(dataloader,model,loss_fn):    size=len(dataloader.dataset)    num_batches=len(dataloader)    model.eval()    test_loss,correct=0,0    with torch.no_grad():        for x,y in dataloader:            x,y=x.to(device),y.to(device)            pred=model.forward(x)            test_loss+=loss_fn(pred,y).item()            correct+=(pred.argmax(1)==y).type(torch.float).sum().item()            a=(pred.argmax(1)==y)            b=(pred.argmax(1)==y).type(torch.float)    test_loss/=num_batches    correct/=size    print(f'Test result:\n Accuracy:{(100*correct)}%,Avg loss:{test_loss}') 创建损失函数、优化器 loss_fn=nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.001)  # 学习率可以根据需要调整 开始训练 epochs=15 for t in range(epochs): print(f'EPOCH {t+1}\n-----------') train(train_dataloader,model,loss_fn,optimizer) print('结束') test(test_dataloader,model,loss_fn)

标签:

深度学习02神经网络实现手写数字案例由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“深度学习02神经网络实现手写数字案例