其他笔记 PyTorch深度学习(一) Drift1ng 2025-11-23 2025-11-25 环境配置 1 conda create -n pytorch python=3.8
启动这个pytorch这个环境
关闭这个环境
查看这个环境中有那些pip包
接着安装pytorchhttps://pytorch.org/
安装的时候可以看一下GPU
1 https://www.geforce.cn/hardware/technology/cude/supported-gpus
如果电脑上没有英伟达的显卡就在安装的时候CUDA选择None,接着就是复制下面的命令执行,在下面这个虚拟环境中输入指令
接着验证环境,先输入python进入环境
1 2 3 import torchtorch.cuda.is_available()
使用编辑器Jupyter要先安装对应的包
启动方法
1 (pytorch)C:Users>jupyter notebook
两大法宝函数
dir()函数 这个dir就是查看一些模块的分区有什么模块,这个是可以一步一步的查看这个模块中的内容
help()函数 这个函数可以让我们知道每个工具是如何使用的,工具使用方法。
Dataset 使用下面代码可以查看这个Dataset的官方说明使用
1 2 from torch.utils.data import Datasethelp (Dataset)
Dataset代码实现
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 from torch.utils.data import Datasetfrom PIL import Imageimport osclass MyData (Dataset ): def __init__ (self,root_dir,label_dir ): self .root_dir = root_dir self .label_dir = label_dir 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 = Image.open (img_item_path) label = self .label_dir return img,label def __len__ (self ): return len (self .img_path) root_dir = "hymenoptera_data/train" ants_label_dir = "ants" bees_label_dir= "bees" ants_dataset = MyData(root_dir,ants_label_dir) bees_dataset = MyData(root_dir,bees_label_dir) img,label = ants_dataset[0 ] img,label = bees_dataset[2 ] train_dataset = ants_dataset + bees_dataset img,label = train_dataset[124 ] img.show()
TensorBoard的使用 绘制简单的图像
1 2 3 4 5 6 7 8 9 10 from torch.utils.tensorboard import SummaryWriterwrite = SummaryWriter("logs" ) for i in range (100 ): write.add_scalar("y=x的函数" ,i,i) write.close()
安装tensorboard
1 (pytorch) G:\pytorch>pip install tensorboard
运行上面的python代码就可以得到一个log文件夹,这个文件夹中就有数据,接下来就是查看这个数据,指定端口
1 (pytorch) G:\pytorch>tensorboard --logdir=logs --port=6007
安装opencv
1 pip install opencv-python
查看一个图片的类型
1 2 3 4 5 from PIL import Imageimage_path = "hymenoptera_data/train/ants/0013035.jpg" img = Image.open (image_path) print (type (img))
利用Numpy对图片进行处理
1 2 3 import numpy as npimg_array = np.array(img_path)
实操
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 from torch.utils.tensorboard import SummaryWriterimport numpy as npfrom PIL import Imagewrite = SummaryWriter("logs" ) image_path = "hymenoptera_data/train/ants/24335309_c5ea483bb8.jpg" img_PIL = Image.open (image_path) img_array = np.array(img_PIL) print (type (img_array))print (img_array.shape) write.add_image("test" ,img_array,1 ,dataformats="HWC" ) for i in range (100 ): write.add_scalar("y=x的函数" ,i,i) write.close()
将图片数据类型转化为tensor类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 from torchvision import transformsfrom PIL import Imagefrom torch.utils.tensorboard import SummaryWriterimg_path = "hymenoptera_data/train/ants/0013035.jpg" img = Image.open (img_path) img_tensord = transforms.ToTensor() img_tensor = img_tensord(img) writer = SummaryWriter("logs" ) writer.add_image("test" ,img_tensor,3 ,dataformats="CHW" ) writer.close()
__call__的用法1 2 3 4 5 6 7 8 9 10 11 12 13 class Person : def __call__ (self,name ): print ("__call__" +"hello" +name) def hello (self,name ): print ("hello" +name) person = Person() person("zhangsan" ) person.hello("lisi" )
从上述的代码运行结果可以知道这个__call__方法的使用是不用使用.去调用这个方法,直接是可以使用这个方法
Normalize的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 from PIL import Imagefrom torchvision import transformsfrom torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter("logs" ) img = Image.open ("hymenoptera_data/train/ants/0013035.jpg" ) print (img)trans_tensor = transforms.ToTensor() img_tensor = trans_tensor(img) writer.add_image("ants" , img_tensor, 1 ) print (img_tensor[0 ][0 ][0 ])trans_norm = transforms.Normalize((0.5 , 0.5 , 0.5 ), (0.5 , 0.5 , 0.5 )) img_norm = trans_norm(img_tensor) print (img_norm[0 ][0 ][0 ])writer.add_image("ants_norm" , img_norm, 1 ) writer.close()
Resize的使用 主要是对图片的缩放将比例修改
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 from PIL import Imagefrom torchvision import transformsfrom torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter("logs" ) img = Image.open ("hymenoptera_data/train/ants/0013035.jpg" ) print (img)trans_tensor = transforms.ToTensor() img_tensor = trans_tensor(img) writer.add_image("ants" , img_tensor, 1 ) print (img_tensor[0 ][0 ][0 ])trans_norm = transforms.Normalize((0.5 , 0.5 , 0.5 ), (0.5 , 0.5 , 0.5 )) img_norm = trans_norm(img_tensor) print (img_norm[0 ][0 ][0 ])writer.add_image("ants_norm" , img_norm, 1 ) print (img.size)trans_resize = transforms.Resize((512 , 512 )) img_resize = trans_resize(img) print (img_resize)print (img_resize.size)img_tensor_resize = trans_tensor(img_resize) print (img_tensor_resize)writer.add_image("ants_resize" , img_tensor_resize, 1 ) writer.close()
Compose的使用 Compose()中的参数需要时一个列表Python中,列表的表示形式为[数据1,数据2,…],在Compose中,数据需要transforms类型所以得到,Compose([transforms参数1,transforms参数2,…])
1 2 3 4 5 6 7 8 9 trans_resize_2 = transforms.Resize(512 ) trans_compose = transforms.Compose([trans_resize_2, trans_tensor]) img_resize_2 = trans_compose(img) print (img_resize_2)print (img_resize_2.size)writer.add_image("ants_resize_2" , img_resize_2, 1 )
torchvision 官方学习文档
1 https://docs.pytorch.org/vision/stable/
使用CIFAR10数据
1 2 3 4 5 6 7 8 9 10 11 12 13 import torchvisiontrain_set = torchvision.datasets.CIFAR10(root='./data' , train=True , download=True ) test_set = torchvision.datasets.CIFAR10(root='./data' , train=False , download=True ) print (train_set[0 ]) print (train_set.classes) img, label = train_set[0 ] print (img) print (label) print (train_set.classes[label]) img.show()
这个主要是对数据进行下载并查看第一个数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 import torchvisionfrom torch.utils.tensorboard import SummaryWriterdataset_transforms = torchvision.transforms.Compose([ torchvision.transforms.ToTensor() ]) train_set = torchvision.datasets.CIFAR10(root='./data' , train=True ,transform=dataset_transforms, download=True ) test_set = torchvision.datasets.CIFAR10(root='./data' , train=False ,transform=dataset_transforms, download=True ) writer = SummaryWriter("p10" ) for i in range (10 ): img, label = train_set[i] writer.add_image("train_set" , img, i) writer.close()
上述是将dataset与transform结合,dataloader的使用
1 https://docs.pytorch.org/docs/stable/data.html#torch.utils.data.DataLoader
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import torchvisionfrom torch.utils.data import DataLoaderfrom torch.utils.tensorboard import SummaryWritertest_dataset = torchvision.datasets.CIFAR10(root='./data' , train=False , download=True , transform=torchvision.transforms.ToTensor()) test_loader = DataLoader(dataset=test_dataset, batch_size=64 , shuffle=False , num_workers=0 ,drop_last=True ) img, target = test_dataset[0 ] print (img.shape, target)writer = SummaryWriter("p11" ) for epoch in range (2 ): step = 0 for data in test_loader: imgs, targets = data writer.add_images("Epoch{}_Step{}_Images" .format (epoch, step), imgs, step) step += 1 writer.close()