赞
踩
https://blog.csdn.net/PolarisRisingWar/article/details/116069338
自定义的data类要继承Dataset类
self相当于一个全局变量,以便类中每个函数共享使用,否则就不需要写
eg 数据集url蚂蚁蜜蜂分类数据集和下载连接https://download.pytorch.org/tutorial/hymenoptera_data.zip
from torch.utils.data import Dataset from PIL import Image import os class 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) #img_path='/Users/fanzhilin/Downloads/hymenoptera_data/train/ants/0013035.jpg' 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) ants_dataset =MyData('/Users/fanzhilin/Downloads/hymenoptera_data/train','ants') print(len(ants_dataset))#ants训练集长度
需要先转换成tensor类型才能显示
add_scalar()
eg 画出y=2x图
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter("logs")# 放在当前目录logs目录,可以自己改名字
# 画出 y =2x
for i in range(100):
writer.add_scalar("y=2x",2*i,i)
writer.close()
打开logs文件,在终端运行 tensorboard --logdir=logs ,也可以指定端口–port 6007, 便可以通过网页访问
查看def,需要传入 (torch.Tensor, numpy.array, or string/blobname)类型的y轴数据,需要把图片类型转换一下,从PIL到numpy arrary,需要传入参数dataformats=‘HWC’ 指定每一维的含义
eg
from torch.utils.tensorboard import SummaryWriter import numpy as np from PIL import Image writer = SummaryWriter("logs") img_path="/Users/fanzhilin/Downloads/hymenoptera_data/train/ants/0013035.jpg" img_PIL =Image.open(img_path) img_arrary = np.array(img_PIL) print(img_arrary.shape) writer.add_image("ant",img_arrary,1,dataformats='HWC')#从PIL到numpy arrary,需要传入参数dataformats='HWC' 指定每一维的含义 # 画出 y =2x for i in range(100): writer.add_scalar("y=2x",2*i,i) writer.close()
就是一个工具箱
使用注意点⚠️
ToTensor类 ,为什么需要转换?包含了一些dl的参数
Normalize类,归一化
Resize类
transforms.Resize(x)等比例缩放,将图片短边缩放至size,长宽比保持不变,i.e,如果高度>宽度,则图像将被重新缩放为(size*高度/宽度,size)将图片短边缩放至x,长宽比保持不变 transforms.Resize(x)
Compose 就是将函数进行组合,需要提供一个转换的列表,相对应合并执行
RandomCrop 随机裁剪 ,用于数据增强
from torchvision import transforms from PIL import Image from torch.utils.tensorboard import SummaryWriter img_path="/Users/fanzhilin/Downloads/hymenoptera_data/train/ants/0013035.jpg" img=Image.open(img_path) writer=SummaryWriter("logs") #ToTensor trans_tensor = transforms.ToTensor()# 创建对象 img_tensor=trans_tensor(img)#变为tensor writer.add_image("Totensor",img_tensor,0 ) #Normalize print(img_tensor[0][0][0]) trans_norm = transforms.Normalize([0.5,0.5,0.5],[2,1,1]) img_norm=trans_norm(img_tensor) print(img_norm[0][0][0]) writer.add_image("Normalize",img_norm,0 ) #Resize print(img.size) trans_resize=transforms.Resize((512,512)) img_resize = trans_resize(img)#PIL 类型 img_resize=trans_tensor(img_resize)#想要在tensorboard显示需要变成tensor类型 writer.add_image("Resize",img_resize,0) print(img_resize.size()) # Compose resize 结合 trans_resize2 = transforms.Resize(512) trans_compose = transforms.Compose([trans_resize2,trans_tensor]) img_resize2 = trans_compose(img) writer.add_image("Resize",img_resize2,1) #RandomCrop trans_random=transforms.RandomCrop(400) #(h,w)传入也可以 trans_compose2= transforms.Compose([trans_random,trans_tensor]) for i in range(10):#随机裁剪10个 img_crop = trans_compose2(img) writer.add_image("RandomCrop",img_crop,i) writer.close()
datasets
官网数据集https://pytorch.org/vision/stable/datasets.html
可以吧url拷贝,用迅雷下载
import torchvision dataset_trans=torchvision.transforms.Compose( [torchvision.transforms.ToTensor()] )#把数据集每一个全变成tensor,方便使用tensorboard显示 train_set = torchvision.datasets.CIFAR10(root='./dataset',train=True,transform=dataset_trans,download=True) test_set = torchvision.datasets.CIFAR10(root='./dataset',train=False,transform=dataset_trans,download=True) #如果root没有目录会自动建立,建议设置download=true,如果没有回下载到本地,并且会自动解压 print(train_set[0])#第一条 print(train_set.classes)#label img,traget=train_set[0]#打印查看格式,前一个是img,后一个是label print(img) print(traget) print(test_set.classes[traget]) img.show()
类似抽牌
import torchvision from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriter test_data = torchvision.datasets.CIFAR10(root='./dataset',train=False,transform=torchvision.transforms.ToTensor()) test_loader = DataLoader(dataset=test_data,batch_size=4,shuffle=True,num_workers=0,drop_last=False) #batch_size = 4 从dataset取4个数据,打包返回 #shuffle = True 每次抽取都是随机的 #drop_last=False,最后一次取如果不够取不舍去 img,target = test_data[0] print(img.shape) print(target) writer = SummaryWriter("dataloader") for epoch in range(2): step=0 for data in test_loader: imgs,targets = data # print(imgs.shape)#打包返回的数据torch.Size([4, 3, 32, 32]) 4数据 3通道rgb h w # print(targets)#tensor([5, 9, 2, 4]) 是label writer.add_images("Epoch :{}".format(epoch),imgs,step) step=step+1 writer.close()
Eg 简单的nn
from torch import nn
import torch.nn.functional as F
import torch
class Model(nn.Module):
def __init__(self):
super().__init__()
#nn.module内的call方法里调用了forward,通过打断点也可以知道!
def forward(self,input):
return input+1
nn1=Model()
x= torch.tensor(1)
print(nn1(x))
卷积操作
2022太乱了,去youtube看2020了,妈的没弹幕看着难受
http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML20.html
python 多环境管理pyenv
https://github.com/pyenv/pyenv
https://zhuanlan.zhihu.com/p/36402791
1如何精准提出需求
2 如何更正错误
3 判断是否ai生成的物件
4是否会泄漏隐私
由InstructGPT 推测
1学习文字接龙,学到的是几率分布,然后随机抽取一个词出来。但实际每次输出的结果都不同
GPT在网络上大量搜集网络数据,不需要人介入
2人类来引导接龙的方向,并提供正确答案,
3模仿人类的喜欢
4用增强式学习 强化学习学习 reward
两个方向:成为通才 或 专才
所有自然语言处理的问题都是 问答QA的问题
https://arxiv.org/abs/1806.08730
让chatgpt自己说说如何针对特定任务产生prompt
BERT,类似文字填空的模型
对预训练模型进行改造
加外挂Head
微调参数 fine tune
…
微调Adapter 的参数( efficient finetune)
语言模型本身不动,只finetune微调adapter参数
in-context learning 范例学习
题目叙述学习Instruct learning、 instruction tuning
T0模型
FLAN paper
在给机器范例同时,顺便给出推论过程,给出答案
zero - shot COT 甚至直接可以一句话:Lets think step by step
有的时候人也不知道解答的过程是什么
Self—consistency 解决每次结果都不一样
Leat - to - most promptting
把复杂的问题拆解,把难的问题简化,看到数学问题,让机器做in context learing
让机器找prompt
soft prompt 我们给机器的prompt 是向量,可以train,类似于adapter
用reinforcement learning
直接用大型LM 去自己找prompt
把输入 输出 给他 ,让LM去给出prompt ,自己催眠自己
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。