发布于2020-03-11 19:55 阅读(1894) 评论(0) 点赞(28) 收藏(4)
最近在学习pytorch实现深度神经网络的教程,强推deeplizard的系列教程,有能力的可以自己去搜索一下原地址,有详细的文字教案和每个part的测试题。虽然是全英文教程但以我托福听力18分的水平(哭了)也全程听完了,另外在优兔上面还可以按快捷键C开启自动字幕,不过这个自动字幕吧感觉开了还不如不开emmm,总之强烈推荐,真的讲的特别好!
B站链接:https://www.bilibili.com/video/av78848066
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
import numpy as np
import matplotlib.pyplot as plt
torch.set_printoptions(linewidth=120)
torch.set_grad_enabled(True)
from torch.utils.tensorboard import SummaryWriter
batch_size = 100
lr = 0.01
train_set = torchvision.datasets.FashionMNIST(
root='./data/FashionMNIST'
,train=True
,download=True
,transform=transforms.Compose([
transforms.ToTensor()
])
)
class Network(nn.Module):
def __init__(self):
super(Network,self).__init__()
self.conv1 = nn.Conv2d(in_channels=1,out_channels=6,kernel_size=5)
self.conv2 = nn.Conv2d(in_channels=6,out_channels=12,kernel_size=5)
self.fc1 = nn.Linear(in_features=12*4*4,out_features=120)
self.fc2 = nn.Linear(in_features=120,out_features=60)
self.out = nn.Linear(in_features=60,out_features=10)
def forward(self,t):
t = F.relu(self.conv1(t))
t = F.max_pool2d(t,kernel_size=2,stride=2)
t = F.relu(self.conv2(t))
t = F.max_pool2d(t,kernel_size=2,stride=2)
t = F.relu(self.fc1(t.reshape(-1,12*4*4)))
t = F.relu(self.fc2(t))
t = self.out(t)
return t
def get_num_correct(preds,labels):
return preds.argmax(dim=1).eq(labels).sum().item()
net = Network()
comment = f'batchsize={batch_size},lr={lr}'
tb = SummaryWriter(comment=comment)
data_loader = torch.utils.data.DataLoader(train_set,batch_size=batch_size)
images,labels = next(iter(data_loader))
grid = torchvision.utils.make_grid(images)
tb.add_images('images',grid.unsqueeze(dim=0))
tb.add_graph(net,images)
optimizer = optim.Adam(net.parameters(),lr=lr)
for epoch in range(5):
total_correct = 0
total_loss = 0
for batch in data_loader:
images,labels = batch
preds = net(images)
loss = F.cross_entropy(preds,labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
num_correct = get_num_correct(preds,labels)
total_correct += num_correct
total_loss += loss.item()
accuracy = total_correct/len(train_set)
tb.add_scalar('loss',total_loss,epoch)
tb.add_scalar('accuracy',accuracy,epoch)
print(f'epoch:{epoch},total_correct:{total_correct},total_loss:{total_loss},accuracy:{accuracy}')
print('done.')
tb.close()
这里使用的dataset是改良版的MNIST:FashionMNIST。我们知道原来的MNIST是一个数字手写体0-9的一个数据库,labels一共有10个,其中train_set有6w个,test_set有1w个。后来出现的FashionMNIST和MNIST基本是一样的,不过内容从简单的手写体变成了衣服/裤子/鞋子。使用torch自带的torchvision.datasets.FashionMNIST
函数就可以直接从网上下载下来。
tensorboard是tensorflow的一个很强大的可视化工具,能很方便的出图(论文就靠你了。。),现在只要版本在1.1.0以上的pytorch也可以使用tensorboard。
查看自己pytorch版本的方法:
import torch
print(torch.__version__)
下载tensorboard:
pip install tensorboard -i https://pypi.tuna.tsinghua.edu.cn/simple
这里为了下载的更快些,使用了清华的镜像源。
引入tensorboard的格式:
from torch.utils.tensorboard import SummaryWriter
tensorboard读取文件的默认地址是./runs,在程序里面可以往里面写net, images, loss, accuracy以及net的所有参数。具体实现我上面的程序有部分,更详细地也可以自行百度或者去我发的最上面那个网址里面找讲的教程。
程序跑完过后,在终端里面输入:
tensorboard --logdir=runs
然后就会告诉你tensorboard现在运行的server地址,默认的是:
localhost:6006
随便打开一个浏览器,输入这个地址,就可以看到tensorboard的运行情况啦(如图)
作者:32738ew
链接:https://www.pythonheidong.com/blog/article/252507/f3efbaf17746fbdeb1df/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!