一、安装anaconde3
出现(base)则为安装成功
二、配置显卡
1、创建一个虚拟环境:pytorch是环境名
conda create -n pytorch python=3.6
2、激活这个环境
conda activate pytorch
3、看看pytorch中有哪些工具包
pip list
4、安装
安装torch:输入生成的指令即可
安装其他的:
例如在conda环境里安装jupyter:conda install jupyter notebook
dir():打开,看见里面有什么东西
help():该函数的使用方法(说明书)
在控制台:
dir()打开torch函数,看里面都有那些方法。
help()查看torch.cuda.is_available()函数的使用方法。
如何读取数据(得到自己想要的数据),主要涉及到两个类:
eg:一堆垃圾,如何获取可回收垃圾。
Dataset:提供一种方式去获取数据及其label。如何去获取想要的数据,例如把可回收垃圾提取出来,并且编号。【如何获取每一个数据及其label】【告诉我们总共有多少个数据】
Dataloader:为后面的网络提供不同的数据形式。例如送进网络时,对数据进行打包(数据不会一个一个送进去)。
一、准备数据集
两种方式:
方式1:图片的label是文件名字。
方式2:label放在另一个文件夹中
打开存放ants_label的文件:txt文件名和图片的文件名一致。
txt文件里存放的是label,是ants或者bees。
二、获取图片的方式
参考:https://blog.csdn.net/qq_43665602/article/details/126281393?spm=1001.2014.3001.5502
from PIL import Image
import numpy as np
path='dataset/train/ants/0013035.jpg'
img=Image.open(path)
img.show()
print('图片类型:{}'.format(type(img)))
img_arr=np.array(img)
print('ndarrary类型:{}'.format(type(img_arr)))
print('图片形状:{}'.format(img_arr.shape))
import cv2 as cv
path='dataset/train/ants/0013035.jpg'
img=cv.imread(path)
print('ndarray类型:{}'.format(type(img)))
print('图片的形状:{}'.format(img.shape))
#显示图片
cv.imshow('rgb_img',img)
#防止图片一闪而过
cv.waitKey()
举例2:灰度转换
import cv2 as cv
#读取图片(注意图片中不能有中文路径,否则加载图片失败)
img=cv.imread('../img/img.png')
#显示图片
cv.imshow('rgb_img',img)
#灰度转换
gray_img=cv.cvtColor(img,cv.COLOR_RGB2GRAY)
cv.imshow('gray_img',gray_img)
#保存图片
cv.imwrite('../img/gray_img.png',gray_img)
#让图片一直显示:0就是一直显示,3000ms就是显示3秒
cv.waitKey(0)
#释放内存
cv.destroyAllWindows()
举例3:图片剪裁
import cv2 as cv
img=cv.imread('../img/img.png')
cv.imshow('img',img)
print('原来图片的形状{}'.format(img.shape))
resize_img=cv.resize(img,dsize=(300,300))
print('修改后图片的形状{}'.format(resize_img.shape))
cv.imshow('resize_img',resize_img)
cv.waitKey(0)
cv.destroyAllWindows()
3、torchvision.io
举例:
from torchvision.io import image
path='dataset/train/ants/0013035.jpg'
img=image.read_image(path)
print('图片类型:{}'.format(type(img)))
print('图片形状:{}'.format(img.shape))
结果:
注意事项:在后续神经网络的训练及训练中,要确保其中涉及到的图像数据Tensor,并且Tensor的数据类型为浮点型。
一、PIL或者OpenCV读取后数据类型转换为Tensor
二、torch.io读取的数据为Tensor,但数据类型为ByteTensor
#一
torchvision.transforms.ToTensor()
#二
from torchvision.io import image
import torch
path='dataset/train/ants/0013035.jpg'
img=image.read_image(path)
print('转换前的图片类型:{}'.format(type(img)))
print('图片形状:{}'.format(img.shape))
img=img.type(torch.FloatTensor)
print('转换后的图片类型:{}'.format(type(img)))
结果:
torchvision读取的类型直接就是Tensor数据类型???
from torch.utils.data import Dataset
from PIL import Image
import os
#继承Dataset类
class MyData(Dataset):
def __init__(self,root_dir,label_dir):
'''初始化类:根据一个类创建实例。为整个class/后面的函数提供全局变量'''
'''获取图片的步骤
1、创建图片的列表:获取文件夹;获取文件夹下所有的图片root_dir
2、label:这里的label是图片上一级的名称(文件夹的名字)
'''
# self:指定了类里面的一个全局变量
#获取图片的列表和label
#dataset/train
self.root_dir=root_dir
#ants或bees,注意:文件名就是label
self.label_dir=label_dir
#将路径连接起来,就是ants或bees的路径
self.path=os.path.join(self.root_dir,self.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:从路径打开图片
img=Image.open(img_item_path)
#获取label
label=self.label_dir
return img,label
def __len__(self):
'''返回数据集的长度'''
return len(self.img_path)
#获取蚂蚁的数据集
root_dir="dataset/train"
ants_label_dir="ants"
ants_dataset=MyData(root_dir,ants_label_dir)
#获取蜜蜂的数据集
bees_label_dir="bees"
bees_dataset=MyData(root_dir,bees_label_dir)
#整个数据集:对象可以相加
train_dataset=ants_dataset+bees_dataset
注: 一个函数里的变量不能给另外一个函数使用,使用self.后就可以在另一个函数里使用该变量
待定
使用场景:loss的变化,找出符合预期的模型
输出某一步的图像
from torch.utils.tensorboard import SummaryWriter
import numpy as np
writer=SummaryWriter("../logs_test")
for i in range(100):
writer.add_scalar("y=2x",i,i)
writer.close()
logs文件如果和py文件放在同级,有时候会出来图像,有时候无法出来。
但是将logs文件放到根目录下,不管py文件在哪里放着,tensorboard的文件都可以出来。
在terminal输入:
结果:
多次输入的时候图像会重合:删掉logs文件或者重新新建一个logs文件。
tensorboard可以读取numpy或者tensor类型的图片。
作用:观察在不同阶段的输出结果
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
#创建一个实例
writer=SummaryWriter("../logs_test")
image_path= "data/train/ants_image/6743948_2b8c096dda.jpg"
img_PIL=Image.open(image_path)
print('img_PIL的类型:{}'.format(type(img_PIL)))
img_array=np.array(img_PIL)
print('img_array的类型:{}'.format(type(img_array)))
writer.add_image("test1",img_array,3,dataformats='HWC')
#y=x
for i in range(100):
writer.add_scalar("y=x",i,i)
writer.close()
【注意事项】
writer.add_image(“test1”,img_array,3,dataformats=‘HWC’)