环境配置 
作为学习,还是用anaconda新建一个虚拟环境比较好.在terminal中conda create -n pytorch python=3.8 -y新建一个环境,使用python3.8版本。然后切换到pytorch环境,pip list看一下有什么包,发现没有pytorch,于是需要自己安装一下。来到pyorch官网 ,根据自己电脑型号选择对应版本,他会自动生成一条安装命令,在当前虚拟环境运行即可。
安装好了以后,再配置一下pycharm和Jupyter,以后两个应该都会用。File->New Project->Pure Python->Python Interpreter->Previously Configured Interpreter->Add Interpreter->Add Local Interpreter->Conda Environment->Use existing environment选择自己刚刚创建的虚拟环境。这里我的pycharm是2022的,不同版本可能略有差异。conda install nb_conda安装nb_conda,这是一个用于在Jupyter Notebook中管理Conda环境的扩展,运行以后就可以在Jupyter中使用创建的环境。安装好以后在环境中运行Jupyter notebook就可以启动了,启动后notebook页面的new下面会出现自己创建的环境。
至此,相关环境就已经配置好了。
python几个帮助调试的函数 
dir() 
help() 
print(type())//打印返回值类型 
 
dir()函数可以查看目标中包含什么模块。
然后就可以用help()来看它的使用方法:
Dataset 
加载数据主要用到两个类:Dataset和Dataloader.
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 from  torch.utils.data import  Datasetfrom  PIL import  Image   import  osclass  MyData (Dataset ):           def  __init__ (self,root_dir,label_dir ):          self.root_dir = root_dir             self.lable_dir = label_dir           self.path = os.path.join(self.root_dir,self.lable_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.lable_dir,img_name)          img = Image.open (img_item_path)          label = self.lable_dir           return  img,label;        def  __len__ (self ):           return  len (self.img_path) root_dir = "dataset/train"  ant_label_dir = "ants"  bee_label_dir = "bees"  ants_dataset = MyData(root_dir,ant_label_dir) bees_dataset = MyData(root_dir,bee_label_dir) train_dataset = ants_dataset + bees_dataset  img1,label1 = train_dataset[120 ] img2,label2 = train_dataset[150 ] print (img1) img1.show()  img2.show() 
Tendorboard 
tensorboard可以将数据可视化。他之前属于tensorflow,后来可以单独安装使用了。但是我在单独使用它过程中,出现了无法显示图像的问题,报错failed to fetch run.尝试了很多方法都没用,想什么改绝对路径这些。后来索性把tensorflow也安装了,然后就好用了。
add_scalar() 
1 2 3 4 5 6 7 8 9 10 11 12 13 from  torch.utils.tensorboard import  SummaryWriterwriter = SummaryWriter("logs" )                                             for  i in  range (100 ):    writer.add_scalar("y=x" ,i,i)  writer.close() 
1 2 tensorboard --logdir=logs 
上述代码用tensorboard简单画了一个y=x的图像。
add_image() 
前三个常用的参数
其中numpy.ndarray有不同shape,对应了不用的dataformats.默认是3HW.
1 2 3 4 from  PIL import  Imageimg = Image.open (image_path) print (type (img))<class  'PIL.JpegImagePlugin.JpegImageFile' > 
可以使用numpy,这样将PIL的图片转换成的img是满足要求的类型:
1 2 3 4 5 6 7 8 import  numpy as  npimg_array = np.array(img) print (type (img_array))<class  'numpy.ndarray' > print (img_array.shape)(512 , 768 , 3 )  writer.add_image("test" ,img_array,1 ,dataformats="HWC" ) 
Transforms 
简单的使用 
transform可以将对象转换为tensor类型,该类型中记录了深度学习中需要的一系列属性。
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 41 42 43 44 45 46 47 48 49 50 51 from  PIL import  Imagefrom  torch.utils.tensorboard import  SummaryWriterfrom  torchvision import  transformsimg_path = "data/train/ants_image/0013035.jpg"  img = Image.open (img_path) tensor_trains = transforms.ToTensor()    tensor_img = tensor_trains(img)  writer = SummaryWriter("logs" ) writer.add_image("image" ,tensor_img) print (tensor_img[0 ][0 ][0 ]) trans_norm = transforms.Normalize([2 ,0.7 ,2 ],[0.4 ,0.8 ,2 ]) img_norm = trans_norm(tensor_img) print (img_norm[0 ][0 ][0 ])  writer.add_image("normalize" ,img_norm,3 ) print (img.size)trans_resize = transforms.Resize((512 , 512 )) img_resize = trans_resize(img) img_resize = tensor_trans(img_resize) writer.add_image("Resize" , img_resize, 0 ) print (img_resize)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_resize_2, 1 ) trans_random = transforms.RandomCrop((500 , 600 )) trans_compose_2 = transforms.Compose([trans_random, tensor_trans]) for  i in  range (10 ):    img_crop = trans_compose_2(img)     writer.add_image("RandomCropHW" , img_crop, i) writer.close() 
_call_  
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class  Person :    def  __call__ (self, name ):         print ("__call__"  + name)     def  hello (self, name ):         print ("hello"  + name) person = Person() person("zhangsan" ) person.hello("lisi" ) __call__zhangsan hellolisi 
可以看出该方法使得一个类实例变得像函数一样可以被调用,并且能够接受参数。
Dataloader 
dataset是对数据集进行预处理,Dataloader就是怎么将数据集应用到神经网络中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import  torchvision.datasetsfrom  torch.utils.data import  DataLoaderfrom  torch.utils.tensorboard import  SummaryWritertest_set = torchvision.datasets.CIFAR10("./dataset1" , train=False , transform=torchvision.transforms.ToTensor()) test_loader = DataLoader(dataset=test_set, batch_size=64 , shuffle=True , num_workers=0 , drop_last=False ) writer = SummaryWriter("dataloader" ) for  epoch in  range (2 ):    step = 0      for  data in  test_loader:         imgs, target = data         writer.add_images("Epoch: {}" .format (epoch), imgs, step)         step = step + 1  writer.close()