import torch
from torch import nn
from torch.nn import functional as F
from torch import optim import torchvision
from matplotlib import pyplot as plt # 小工具 def plot_curve(data):
fig = plt.figure()
plt.plot(range(len(data)),data,color='blue')
plt.legend(['value'],loc='upper right')
plt.xlabel('step')
plt.tlabel('value')
plt.show() def plot_image(img,label,name):
fig = plt.figure()
for i in range(6):
plt.subplot(2,3,i+1)
plt,tight_layout()
plt.imshow(img[i][0]*0.3081+0.1307,cmap='gray',interpolation='none')
plt.title("{}:{}".format(name,label[i].item()))
plt.xticks([])
plt.xticks([]) plt.show() def one_hot(label,depth = 10):
out = torch.zeros(label.size(0),depth)
idx = torch.LongTensor(label).view(-1,1)
out.scatter_(dim=1,index=idx,value=1)
return out # 一次加载多少图片
batch_size = 512
# step1. load dataset 数据加载
train_loader = torch.utils.data.DataLoader(
torchvision.datasets.MINST('mnist_data',train=True,download=True,
transform=torchvision.transforms.Compose([
torchvision.transfroms.ToTensor(), torchvision.transfroms.Normalize(
(0.1307,),(0.3081,))
])),
batch_size=batch_size,shuffle=True)
test_loader = torch.utils.data.DataLoader(
torchvision.datasets.MINST('mnist_data/',train=False,download=True,
transform=torchvision.transforms.Compose([
torchvision.transfroms.ToTensor(),
torchvision.transfroms.Normalize(
(0.1307,),(0.3081,))
])),
batch_size=batch_size,shuffle=False) # 网络创建
class Net(nn.Module): def __init__(self):
super(Net,self).__init__() #xw+b
self.fc1 = nn.Linear(28*28,256)
self.fc2 = nn.Linear(256,64)
self.fc3 = nn.Linear(64,10) def forward(self,x):
# x:[batch_size,1,28,28]
# h1 = relu(xw1+b1)
x = F.relu(self.fc1(x))
# h1 = relu(h1w2+b2)
x = F.relu(self.fc2(x))
# h3 = h2w3+b3
x = self.fc3(x) return x net = Net()
# [w1,b1,w2,b1,w3,b3]
optimizer = optim.SGD(net.parameters(),lr=0.01,momentum=0.9) train_loss = [] # 训练
for epoch in range(3): for batch_idx,(x,y) in enumerate(train_loader): # x: [b,1,28,28], y:[512]
# [b,1,28,28]-->[b,feature]
x = x.view(x.size(0),28*28)
# --> [b,10]
out = net(x)
# --> [b,10]
y_onehot = one_hot(y)
# loss = mse(out,y_onehot)
loss = F.mse_loss(out,y_onehot)
# 清零梯度
optimizer.zero_grad()
# 计算梯度
loss.backward()
#w' = w - lr*grad 更新梯度
optimizer.step() train_loss.append(loss.item()) if batch_idx % 10 == 0:
print(epoch,batch_idx,loss.item()) plot_curve(train_loss) # 得到一个比较好的 [w1,b1,w2,b1,w3,b3] # 验证准确率
total_correct = 0
for x,y in test_loader"
x = x.view(x.size(0),28*28)
out = net(x)
# out: [b,10] --> pred: [b]
pred = out.argmax(dim = 1)
correct = pred.eq(y).sum().float().item()
total_correct += correct total_num = len(test_loader.dataset)
acc = total_correct / total_num
print('test acc:',acc) # 直观显示验证
x,y = next(iter(test_loader))
out = net(x.view(x.size(0),28*28))
pred = out.argmax(dim = 1)
plot_image(x,pred,'test')

龙良曲pytorch学习笔记_03的更多相关文章

  1. Pytorch学习笔记(二)---- 神经网络搭建

    记录如何用Pytorch搭建LeNet-5,大体步骤包括:网络的搭建->前向传播->定义Loss和Optimizer->训练 # -*- coding: utf-8 -*- # Al ...

  2. Pytorch学习笔记(一)---- 基础语法

    书上内容太多太杂,看完容易忘记,特此记录方便日后查看,所有基础语法以代码形式呈现,代码和注释均来源与书本和案例的整理. # -*- coding: utf-8 -*- # All codes and ...

  3. 【pytorch】pytorch学习笔记(一)

    原文地址:https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html 什么是pytorch? pytorch是一个基于p ...

  4. 【深度学习】Pytorch 学习笔记

    目录 Pytorch Leture 05: Linear Rregression in the Pytorch Way Logistic Regression 逻辑回归 - 二分类 Lecture07 ...

  5. Pytorch学习笔记(一)——简介

    一.Tensor Tensor是Pytorch中重要的数据结构,可以认为是一个高维数组.Tensor可以是一个标量.一维数组(向量).二维数组(矩阵)或者高维数组等.Tensor和numpy的ndar ...

  6. [PyTorch 学习笔记] 1.3 张量操作与线性回归

    本章代码:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson1/linear_regression.py 张量的操作 拼 ...

  7. [PyTorch 学习笔记] 1.1 PyTorch 简介与安装

    PyTorch 的诞生 2017 年 1 月,FAIR(Facebook AI Research)发布了 PyTorch.PyTorch 是在 Torch 基础上用 python 语言重新打造的一款深 ...

  8. [PyTorch 学习笔记] 1.4 计算图与动态图机制

    本章代码:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson1/computational_graph.py 计算图 深 ...

  9. [PyTorch 学习笔记] 2.2 图片预处理 transforms 模块机制

    PyTorch 的数据增强 我们在安装PyTorch时,还安装了torchvision,这是一个计算机视觉工具包.有 3 个主要的模块: torchvision.transforms: 里面包括常用的 ...

随机推荐

  1. 005jz2440开发板恢复出厂系统

  2. 1037 在霍格沃茨找零钱 (20 分)C语言

    题目描述 如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 -- 就如海格告诉哈利的:"十七个银西可(Sickle)兑一个加隆(Galleon),二 十九个纳特(Knut)兑一个西可 ...

  3. Python for Data Analysis 学习心得(四) - 数据清洗、接合

    一.文字处理 之前在练习爬虫时,常常爬了一堆乱七八糟的字符下来,当时就有找网络上一些清洗数据的方式,这边pandas也有提供一些,可以参考使用看看.下面为两个比较常见的指令,往往会搭配使用. spli ...

  4. 16.用pycharm导入自己写的模块时,import无法识别的解决办法

    我们用pycharm打开自己写的代码,当多个文件之间有相互依赖的关系的时候,import无法识别自己写的文件,但是我们写的文件又确实在同一个文件夹中, 这种问题可以用下面的方法解决: 1)打开File ...

  5. structs2的048漏洞复现 2.3.32版本

    S2-048 远程代码执行漏洞 影响版本: 2.0.0 - 2.3.32 之前在网上说只要时2.3.*的版本都有这个漏洞,自己装了个2.3.34的试了几次都没有执行 然后下载了找到了这篇文章才知道影响 ...

  6. 《C++Primer》第五版习题解答--第四章【学习笔记】

    [C++Primer]第五版习题解答--第四章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/11 第四章:表达式 练习4. ...

  7. 能快速理解Java_集合类_的文章

    目录 @ 这篇文章是我学习完Java集合类做的笔记和总结,如果你想认真细读这篇文章,请做好受虐的准备(建议电脑看),因为这篇文章有点长,ヽ(ー_ー)ノ. 如果在看我这篇文章过程中,发现了错误,望指点. ...

  8. [apue] 作为 daemon, 启动 Unix Domain Socket 侦听失败?

    前段时间写一个传递文件句柄的小 demo,有 server 端.有 client 端,之间通过 Unix Domain Socket 通讯. 在普通模式下,双方可以正常建立连接,当server端作为d ...

  9. 点分治 (等级排) codeforces 321C

    Now Fox Ciel becomes a commander of Tree Land. Tree Land, like its name said, has n cities connected ...

  10. 【转】oracle条件子句执行顺序

    Oracle WHERE条件执行顺序:ORACLE采用自下而上的顺序解析WHERE子句 1.据此那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾例如:SELECT … FROM EMP E ...