当前位置:   article > 正文

李宏毅 深度学习【持续更新】_李宏毅深度学习教程leedl

李宏毅深度学习教程leedl

目录

pytorch快速入门

csdn快速入门

https://blog.csdn.net/PolarisRisingWar/article/details/116069338

  • 工具箱dir() 、help() 或者 类名??、 ipython交互式操作
  • pycharm 的好处就是可以看到实时变量的值
OS包
  • os.path.join() 拼接路径
  • os.listdir( ) 返回目录下的文件列表
PIL包
  • from PIL import Image 导入
  • Image.open(path) 读取图片,读出的图片类型是JepgImageFile类型
  • img.show() 显示
Opencv包
  • import cv2
  • cv2.imread() 读出的图片类型是numpy
Dataset类
  • 自定义的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训练集长度 
    
    • 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
Tensorboard的使用

需要先转换成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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

打开logs文件,在终端运行 tensorboard --logdir=logs ,也可以指定端口–port 6007, 便可以通过网页访问

  • add_image()、add_images()一次添加多个图片

查看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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
torchvision.transforms 的使用

就是一个工具箱

image-20230318160812381

使用注意点⚠️

image-20230318203251123
  • 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()
    
    
    
    • 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
torchvision中数据集的使用
  • datasets

    官网数据集https://pytorch.org/vision/stable/datasets.html

    可以吧url拷贝,用迅雷下载image-20230318204747333

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()
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
DataLoader的使用(torch.utils.data)

类似抽牌

image-20230318210645834
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()
  • 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
image-20230319142145568
神经网络的搭建nn.Module

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))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

卷积操作

深度学习 李宏毅

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

Chatgpt

1 研究方向

1如何精准提出需求

  • 如何调教

2 如何更正错误

  • chatgpt的预训练资料只有2021年9月之前的
  • 如何让机器修改一个错误而不弄错别的地方?——Neural editing

3 判断是否ai生成的物件

4是否会泄漏隐私

  • 但是可以绕着弯问他,当问到一定特定问题,让机器忘记Machine Unlearning

2 Chatgpt学习的步骤

由InstructGPT 推测

  • 1学习文字接龙,学到的是几率分布,然后随机抽取一个词出来。但实际每次输出的结果都不同

    GPT在网络上大量搜集网络数据,不需要人介入

  • 2人类来引导接龙的方向,并提供正确答案,

  • 3模仿人类的喜欢

  • 4用增强式学习 强化学习学习 reward

3 Fine tune vs. Prompt

两个方向:成为通才 或 专才

image-20230322112742011
  • 所有自然语言处理的问题都是 问答QA的问题

    image-20230321213303203

    https://arxiv.org/abs/1806.08730

  • 让chatgpt自己说说如何针对特定任务产生prompt

    image-20230321220827330

期待一 |成为专才, 加外挂 or fine tune or Adapter

BERT,类似文字填空的模型

image-20230322113007782

对预训练模型进行改造

  1. 加外挂Head

    image-20230322113106703

  2. 微调参数 fine tune

    微调Adapter 的参数( efficient finetune)

    语言模型本身不动,只finetune微调adapter参数

    image-20230322113301682

期待二|成为通才
image-20230322113656348

in-context learning 范例学习

image-20230322114157563
  • 可能范例学习只对大型模型有明显效果
image-20230322114354759

题目叙述学习Instruct learning、 instruction tuning

  • T0模型

    image-20230322114936039

  • FLAN paper

    image-20230322115011277

chain of thought (COT )Promptting
  • 在给机器范例同时,顺便给出推论过程,给出答案

    image-20230322115310148

  • zero - shot COT 甚至直接可以一句话:Lets think step by step

    有的时候人也不知道解答的过程是什么

    image-20230322115402586

  • Self—consistency 解决每次结果都不一样

    image-20230322115536362

  • Leat - to - most promptting

    把复杂的问题拆解,把难的问题简化,看到数学问题,让机器做in context learing

    image-20230322115838147

让机器找prompt

  • soft prompt 我们给机器的prompt 是向量,可以train,类似于adapter

    image-20230322115953453
  • 用reinforcement learning

    image-20230322120307349
  • 直接用大型LM 去自己找prompt

    把输入 输出 给他 ,让LM去给出prompt ,自己催眠自己

    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/537532
推荐阅读
相关标签