继续学了,注意要多看官方文档,看源码,看模块的输入和输出
1. python文件、python控制台和jupter的不同 运行同一块代码:
1 2 3 4 5 print ("Start" )a = "hello world" b = "2024" c = a + b print (c)
python文件是以整体代码为一块运行的 python控制台是以每一行为一块运行的(也能以任意行运行) jupyter是以任意行为块运行的 后两者,当某一块出错时,修改后前面的块并不需要再次运行。
运行方式
优点
缺点
python文件
传播方便、适用大型项目
需要从头运行
python控制台
显示每个变量属性
不利于代码阅读和修改
jupyter
利于代码阅读和修改
环境需要配置
2. pytorch加载数据 使用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 39 40 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_list = os.listdir(self.path) def __getitem__ (self, idx ): img_name = self.img_list[idx] img_item_path = os.path.join(self.path, img_name) img = Image.open (img_item_path) label = self.label_dir return img, label def __len__ (self ): return len (self.img_list) root_dir = "dataset/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[1 ] train_data = ants_dataset + bees_dataset print (len (train_data))img, label = train_data[125 ] img.show()
3. Tensorboard的使用 安装tensorboardconda install tensorboard
作用:画网格结构图,精确率、学习率、损失曲线
add_scalar示例:
1 2 3 4 5 6 7 8 from torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter("logs" ) for i in range (100 ): writer.add_scalar("y=2x" , i * 2 , i) writer.close()
打开tensorboard查看: (pytorch) D:\learning\pytorch> tensorboard –logdir=logs 指定端口打开: (pytorch) D:\learning\pytorch>tensorboard –logdir=logs –port=6007
add_image示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 from torch.utils.tensorboard import SummaryWriterimport numpy as npfrom PIL import Imagewriter = SummaryWriter("logs" ) img_path = "dataset/train/bees_image/16838648_415acd9e3f.jpg" img = Image.open (img_path) print (type (img))numpy_img = np.array(img) print (numpy_img.shape)writer.add_image("test" , numpy_img, 2 , dataformats="HWC" ) writer.close()
transform.ToTensor示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 from torch.utils.tensorboard import SummaryWriter from torchvision import transformsfrom PIL import Imageimg_path = "dataset/train/ants_image/0013035.jpg" img = Image.open (img_path) writer = SummaryWriter("logs" ) tensor_trans = transforms.ToTensor() tensor_img = tensor_trans(img) print (tensor_img)writer.add_image("Tensor_img" , tensor_img) writer.close()
Normalize的使用 作用是将输入图像的像素值缩放到一个标准化的范围。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 from torch.utils.tensorboard import SummaryWriter from PIL import Imagefrom torchvision import transformsimg_path = "dataset/train/ants_image/0013035.jpg" img = Image.open (img_path) writer = SummaryWriter("logs" ) tensor_trans = transforms.ToTensor() tensor_img = tensor_trans(img) print (tensor_img[0 ][0 ][0 ])trans_norm = transforms.Normalize([0.5 , 0.5 , 0.5 ], [0.5 , 0.5 , 0.5 ]) img_norms =trans_norm(tensor_img) print (img_norms[0 ][0 ][0 ])writer.add_image("Normalize_img" , img_norms) writer.close()
Resize的使用 1 2 3 4 5 6 7 8 9 print (img.size)trans_resize = transforms.Resize((512 , 512 )) img_resize = trans_resize(img) img_resize = tensor_trans(img_resize) print (img_resize.size)writer.add_image("Resize_img" , img_resize)
Compose的使用 作用时将多个图像变换操作组合在一起,使得它们可以依次对图像进行处理。前一个操作的输出作为后一个操作的输入。
1 2 3 4 5 6 trans_resize_2 = transforms.Resize(512 ) trans_compose = transforms.Compose([trans_resize_2, tensor_trans]) img_resize_2 = trans_compose(img) writer.add_image("Resize_img_2" , img_resize_2)
RandomCrop使用 作用是从图像中随机裁剪出一个指定大小的区域
1 2 3 4 5 6 7 trans_crop = transforms.RandomCrop(256 ) trans_compose_2 = transforms.Compose([trans_crop, tensor_trans]) for i in range (10 ): img_crop = trans_compose_2(img) writer.add_image("RandomCrop_img" , img_crop, i)
5. 使用torchvision提供的数据集 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 from torch.utils.tensorboard import SummaryWriterimport torchvisiondataset_transform = torchvision.transforms.Compose([ torchvision.transforms.ToTensor() ]) writer = SummaryWriter("logs" ) train_set = torchvision.datasets.CIFAR10(root="./dataset" , train=True , transform=dataset_transform, download=True ) test_set = torchvision.datasets.CIFAR10(root="./dataset" , train=False , transform=dataset_transform, download=True ) print (test_set[1 ])for i in range (10 ): img, target = test_set[i] writer.add_image("test_set" , img, i) writer.close()
6. DataLoader的使用 用于从 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 from torch.utils.tensorboard import SummaryWriterfrom torch.utils.data import DataLoaderimport torchvisiontest_set = torchvision.datasets.CIFAR10(root="./dataset" , train=False , transform=torchvision.transforms.ToTensor(), download=True ) test_loader = DataLoader(test_set, batch_size=64 , shuffle=True , num_workers=0 , drop_last=False ) writer = SummaryWriter("logs" ) img, target = test_set[0 ] print (img.shape)print (target)for epoch in range (2 ): step = 0 for data in test_loader: imgs, targets = data writer.add_images("Epoch:{}" .format (epoch), imgs, step) step += 1 writer.close()