安装

pytorch的安装

面对不同的工作环境,对于pytorch的版本要求可能不同,而不能同时安装两个环境,因此就需要Anaconda集成的conda包解决这个问题,它可以创造出两个屋子,分别存放不同的版本

conda create -n pytorch python=3.6

pFdvub4.png
(安装完成),这里由于个人是AMD显卡,因此仅安装了cpu版本,对于学习来说应当已近是足够的

关于jupter的安装

jupyter是直接安装在base环境中的,可以用conda list指令看到base环境中是有一系列“i”开头的文件包的,而在jupyter环境中是没有的
pFdvG26.png
此时,我们需要使用conda install nb_conda便可以将Jupyter安装在pytorch环境中了
安装完成后,输入jupter notebook即可打开jupyter
pFdvdVH.png
右上角选择new,我们是conda版本pytorch,在此创建代码即可

Dataset类的实例

前置的两个帮手函数:

1、dir()获得文件包
2、help()获得指定函数的作用
实例的数据集:蚂蚁蜜蜂/练手数据集:

链接: https://pan.baidu.com/s/1jZoTmoFzaTLWh4lKBHVbEA 密码: 5suq

process

导入pytorch的常用包和图像处理的包之后,这里用控制台可以清晰看到每步走的流程
首先设置一个路径,方便起见,将数据包直接移到了项目文件夹中,在pycharm页面,直接copy路径即可,我此处使用的是相对路劲,因为使用绝对路径换一台电脑可能就使用不了了。随后将这张图片由地址赋给一个变量,使用show函数即可获得图片
pFdv2qg.png
以上是直接获得一张图片的情况,如果想要获得一组图片,则需要导入系统包os。下图操作分别为设置一个root_dir,这里设置为train数据集的相对地址。label_dir则为自己对这个文件夹下分类的定义。随后用path变量保存拼接后的地址,使用os.path.join()函数将一个地址和地址下的子文件夹拼接起来。最后用image_path保存由地址转为图像后的列表,使用方法为os.listdir()
pFdvfaj.png
获得一张图片的系列信息
pFdvIGq.png
获得一组数据的长度
这里通过初始化获得了蚂蚁数据集和蜜蜂数据集,将他们相加混合在一起放入train_dataset中,直接调用len函数获得列表长度即可获得整个数据集的长度
pFdvoR0.png

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from torch.utils.data import Dataset
# utils是常用的一些工具
from PIL import Image
# 图像处理的库
import os


# 要想获得一组图片,需要导入系统的包

class MyData(Dataset):
def __init__(self, root_dir, label_dir):
# self的作用为令这个方法下的变量成为整个类中的全局变量
self.root_dir = root_dir
self.label_dir = label_dir
self.path = os.path.join(root_dir, label_dir)
self.img_path = os.listdir(self.path)

def __getitem__(self, idx):
img_name = self.img_path[idx]
# 获得这个文件的名称
img_item_path = os.path.join(self.root_dir, self.label_dir, img_name)
# 拼接处这个文件的地址
img = Image.open(img_item_path)
# 获得这张图片
label = self.label_dir
return img, label

def __len__(self):
return len(self.img_path)
# 直接用len函数获得列表长度即可


root_dir = "dataset/train"
ants_label_dir = "ants_image"
bees_label_dir = "bees_image"
ants_dataset = MyData(root_dir, ants_label_dir)
bees_dataset = MyData(root_dir, bees_label_dir)
train_dataset = ants_dataset + bees_dataset
print(train_dataset.__len__())

Tensorboard

在pytorch环境使用pip install tensorboard命令安装tensorboard(注意,这里如果网速不好会pip失败,建议手机热点或者尾巴加上国内镜像链接)
pFwSHQP.png
出现这个界面即为安装成功

输出y=x函数图像的代码

1
2
3
4
5
6
7
8
from torch.utils.tensorboard import SummaryWriter
import six
writer = SummaryWriter("logs")

for i in range(100):
writer.add_scalar("y=x", i, i)

writer.close()

出现的问题

1、在pycharm中terminal没有pytorch环境
解决方案:设置中将终端中的Shell Path改为C:\Windows\system32\cmd.exe
2、运行文件时提示没有six包(这个是导入Summary Writer产生的问题)
解决方案:直接import six

最后可以看到文件夹一块会多出一个“logs”文件夹,下面是tensorboard的一些事件文件
pFwpmWR.png

如何打开这个文件?

在terminal窗口输入tensorboard –logdir=logs (后面跟的logs就是指定文件夹),注如果很多人使用的话,可以在末尾加上指定以防冲突,如–port=6007
点击下方的端口就可以看到绘制的图像了
pFwp1eO.png
注意:logs会记录所有writer添加的图像,如我先做了y=x,再做了y=2x,那么现在的图像就会是二者的拟合。而解决这个问题只需要将logs文件夹下的文件删除重新运行即可
pFw9Vnf.png

通过writer.add_image函数将图像添加至步骤中更直观的运行

实现代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np
from torch.utils.tensorboard import SummaryWriter
import six
import numpy as mp
from PIL import Image

writer = SummaryWriter("logs")
image_path = "dataset/train/ants_image/0013035.jpg"
img_PIL = Image.open(image_path) # 通过open函数获得这张图片
img_array = np.array(img_PIL) # 将这个图像文件改成numpy型,因为add_scalar函数需要指定类型
writer.add_image("test", img_array, 1, dataformats='HWC')
for i in range(100):
writer.add_scalar("y=x", 3*i, i)

writer.close()

实现结果

pFwp3wD.png
注意,add_image函数的对象只能是特定类型,并且图像的格式必须要按照要求,详细如下,可参照维度所在的位置调整