《深度学习之PyTorch实战计算机视觉》笔记

首先说,感觉这本书超级适合新手入门的!!!就是从python开始那种

我是已经乱七八糟的学过python,包括一些plt、numpy、opencv,复习了一遍线性代数,尝试学习过一丢丢神经网络才拿到这本书的,所以感觉嗯,1/3 的内容直接略过了(每当这种情况我都有点心疼书钱)但是对于新手我觉得这本书很好的,内容都是有用的,方面都比较全,虽然不是很详细,但是可以对应再查嘛

书籍目录:

  • 第一章      浅谈人工智能、神经网络和计算机视觉       P1~P14    相当于概论啦
  • 第二章      相关的数学知识                                               矩阵 、导数 (居然列出了教科书上的公式们,还带简单例题)    
  • 第三章      神经网络基础                                                   恍然大悟的感觉,一下子懂了几个之前看别的书怎么也没懂得点
  • 第四章      卷积神经网络                                                   没看呢,待更
  • 第五章      python基础                                                        什么列表切片啥特基础的,还有numpy,plt,甚至有Anaconda的安装...
  • 第六章      pyTorch基础                                                      没看呢,待更
  • 第七章      迁移学习                                                            没看呢,待更
  • 第八章      图像风格迁移实战                                            就是想学这个才买的哈哈, 没看呢,待更
  • 第九章      多模型融合                                                         没看呢,待更
  • 第十章       循环神经网络                                                     没看呢,待更
  • 第十一章   自动编码器                                                         没看呢,待更

笔记1:数据预览和数据装载 书6.4

原书代码整理:

import torch
from torchvision import datasets,transforms
import torchvision
from torch.autograd import  Variable
import numpy as np
import cv2
transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize(mean=[0.5,0.5,0.5],std=[0.5,0.5,0.5])])
data_train=datasets.MNIST(root="./data",  transform=transform, train=True,
                          download=True
                          )
data_test=datasets.MNIST(root="./data", transform=transform, train=False)
data_loader_train=torch.utils.data.DataLoader(dataset=data_train,
                                              batch_size=16,
                                              shuffle=True)
data_loader_test=torch.utils.data.DataLoader(dataset=data_test,
                                             batch_size=16,
                                             shuffle=True)

images,labels=next(iter(data_loader_train))
img=torchvision.utils.make_grid(images)

img=img.numpy().transpose(1,2,0)

#cv2.imshow('win',img);
std=[0.5,0.5,0.5]
mean=[0.5,0.5,0.5]

img=img*std+mean

print([labels[i] for i in range(16)])

cv2.imshow('win',img);
key_pressed=cv2.waitKey(0);

执行结果:

代码详解:

引入包就不说了 *略

#数据变换
transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize(mean=[0.5,0.5,0.5],std=[0.5,0.5,0.5])])

transforms.Compose()  多种数据变换,容器

transforms.Compose()  相当一种容器,对多种数据变换组合,实例代码中进行了两种变换

transforms.ToTensor()   数据类型转换

将数据转换为Tensor类型,才能再Pytorch中进行计算

transforms.Normalize()  标准化变换

x^{norma}=\frac{x-mean}{std}

#下载训练集和测试集
data_train=datasets.MNIST(root="./data",
                          transform=transform,
                          train=True,
                          download=True
                          )
data_test=datasets.MNIST(root="./data",
                         transform=transform,
                         train=False)

下载训练集和测试集,下载到了当前路径中,实现下载的代码是torchvision.dataset.MNIST

transform用于指定变换,transform之前已经定义过

train=True 代表载入的是数据集的训练集部分,=False:测试集部分

#数据装载
data_loader_train=torch.utils.data.DataLoader(dataset=data_train, #指定数据集
                                              batch_size=64,    
                                              shuffle=True)     
data_loader_test=torch.utils.data.DataLoader(dataset=data_test,  batch_size=64, shuffle=True)

torch.utils.data.DataLoader()数据装载

batch_size 需要将图片打包送给模型训练,设定每个包的大小(图片数量)

shuffle 是否将图片打乱

images,labels=next(iter(data_loader_train))

iter()生成迭代器

   output: 

next()返回迭代器的下一个项目

   output:

#网格变换前,四个维度(batch_size,channel,height,weight)
img=torchvision.utils.make_grid(images) #三个维度 (channel,height,weight)
img=img.numpy().transpose(1,2,0)        #改变维度顺序(height,weight,channel)

torchvision.utils.make_grid() 将一个批次的图片构造成网格模式

一个批次的图片整合在了一起(如执行结果),减去了batch_size维度

  

transpose()  改变维度顺序

 (channel,height,weight) -->   img=img.numpy().transpose(1,2,0)     -->(height,weight,channel)

std=[0.5,0.5,0.5]
mean=[0.5,0.5,0.5]
img=img*std+mean

这步处理我没有懂,列出前后对比吧

#打印这批次图片的标签
print([labels[i] for i in range(16)])
#显示
cv2.imshow('win',img);
key_pressed=cv2.waitKey(0);

书中显示是用的plt,但是我的plt不显示图片。。。

我遇到的坑

1.torchvision  我用的是windows,而Anaconda Cloud 里torchvision没有win版本的,其实直接用 pip install torchvision 就可以

  但是我的安装成功了,import  torchvision却会报错,原以为我之前都是conda安装的,所以pip安装不在一个解析器下所以不好使,但是经历了一天半(包括想放弃win而安装ubuntu虚拟机吧啦吧啦)后,终于发现哪出了问题:

我的pillow 包版本低,所以找不到image模块  所以 conda update pillow  之后就ok了,import  torchvision终于正常

2. 我用matplotlib中的pyplot时(plt) plt.imshow()不显示图片,受到之前的教训,把matplotlib升级试了试,问题来了,在它升级过程中,不知道它和pillow有什么关系,竟将pillow降级了,可想而知,我的torchvision又不能用了

所以最后又把pillow给更新了,用cv2代替plt的显示功能

猜你喜欢

转载自blog.csdn.net/afeiererer/article/details/81710315