fastai11-Midlevel Data

fastai可以做到5行代码训练一个模型, 这也正是它吸引我的地方

from fastai.text.all import *

dls = TextDataLoaders.from_folder(untar_data(URLs.IMDB), valid='test')

path = untar_data(URLs.IMDB)
dls = DataBlock(
    blocks=(TextBlock.from_folder(path),CategoryBlock),
    get_y = parent_label,
    get_items=partial(get_text_files, folders=['train', 'test']),
    splitter=GrandparentSplitter(valid_name='test')
).dataloaders(path)

但是它有时不够灵活, 这是就需要用到中级API

在看这个之前做了一个小项目, 已经用过中级api来处理音频-->图像, 真的很方便. 这种设计符合常理, 看代码示例就行

编写自己的Transform

class NormalizeMean(Transform):
    def setups(self, items): self.mean = sum(items)/len(items)
    def encodes(self, x): return x-self.mean
    def decodes(self, x): return x+self.mean

tfm = NormalizeMean()
tfm.setup([1,2,3,4,5])
start = 2
y = tfm(start)
z = tfm.decode(y)
tfm.mean,y,z

output: (3.0, -1.0, 2.0)

Pipeline | 管道

用于将多个转换组合在一起

# 分词再编码(数值化)
tfms = Pipeline([tok, num])
t = tfms(txts[0]); t[:20]

tensor([ 2, 8, 76, 10, 23, 3112, 23, 34, 3113, ...])

TfmdLists

TfmdLists可以一次性执行所有的预处理操作, 将原始项目转换为具有输入和目标的元组.

cut = int(len(files)*0.8)
splits = [list(range(cut)), list(range(cut,len(files)))]
tls = TfmdLists(files, [Tokenizer.from_folder(path), Numericalize], 
                splits=splits)

结论

下面的实现和文章开头的实现一致

tfms = [[Tokenizer.from_folder(path), Numericalize], [parent_label, Categorize]]
files = get_text_files(path, folders = ['train', 'test'])
splits = GrandparentSplitter(valid_name='test')(files)
dsets = Datasets(files, tfms, splits=splits)
dls = dsets.dataloaders(dl_type=SortedDL, before_batch=pad_input)

一个计算机视觉的小例子

def label_func(fname):
    return re.match(r'^(.*)_\d+.jpg$', fname.name).groups()[0]

class SiameseTransform(Transform):
    def __init__(self, files, label_func, splits):
        self.labels = files.map(label_func).unique()
        self.lbl2files = {l: L(f for f in files if label_func(f) == l) 
                          for l in self.labels}
        self.label_func = label_func
        self.valid = {f: self._draw(f) for f in files[splits[1]]}
        
    def encodes(self, f):
        f2,t = self.valid.get(f, self._draw(f))
        img1,img2 = PILImage.create(f),PILImage.create(f2)
        return SiameseImage(img1, img2, t)
    
    def _draw(self, f):
        same = random.random() < 0.5
        cls = self.label_func(f)
        if not same: 
            cls = random.choice(L(l for l in self.labels if l != cls))
        return random.choice(self.lbl2files[cls]),same

splits = RandomSplitter()(files)
tfm = SiameseTransform(files, label_func, splits)
tls = TfmdLists(files, tfm, splits=splits)
dls = tls.dataloaders(after_item=[Resize(224), ToTensor], 
    after_batch=[IntToFloatTensor, Normalize.from_stats(*imagenet_stats)])
Google Colaboratory

Read more

自建中转节点

落地鸡正常搭建xui面板 x-ui面板实现Vless+reality+tcp+xtls-rprx-vison代理💡docker部署出现了点问题无法解决,改用FranzKafkaYu的脚本 1. 一键安装 bash <(curl -Ls https://raw.githubusercontent.com/FranzKafkaYu/x-ui/master/install.sh) bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) 2. 访问ip:端口,在侧边栏转到设置会自动设置根路径,确实任何信息都可以在vps终端输入x-ui重启脚本按7查看 3. 添加一条入站记录 💡x-ui不是通过docker安装,ip不能填172.17.0.1. 如果出现xray内核error,删除最新用户重新添加可解决 4.

By kamado nezuko

pt刷流

此次尝试是基于github上的这个项目, 还没有试过, 祝我好运吧 运行脚本 GitHub - jerry048/Dedicated-SeedboxContribute to jerry048/Dedicated-Seedbox development by creating an account on GitHub.GitHubjerry048💡无语, 我是在nodeseek看到一个问题才想自己试试的, https://www.nodeseek.com/post-80622-1, 帖子里提到要自己安装一系列包, 觉得好麻烦, 然后我呀就按照官网一个个装好了, 运行大佬的一键脚本, 好家伙, 大佬的一键脚本就是一键帮我们安装好这些包的 bash <(wget -qO- https://raw.githubusercontent.com/jerry048/Dedicated-Seedbox/main/Install.sh) -u jerry048 -p 1LDw39VOgors -c

By kamado nezuko