当前位置: 首页 > news >正文

持续记录FASTAI学习踩坑

  1. 安装

推荐用conda,具体如下:

conda create -n fastai_env python=3.10
conda activate fastai_env
conda install -c pytorch -c fastai fastai
conda install jupyterlab

然后激活虚拟环境:

conda activate fastai_env

安装IPython Kernel:

conda install ipykernel

将虚拟环境添加到 Jupyter Notebook 的 kernel 列表中:

python -m ipykernel install --user --name fastai_env --display-name "Python (fastai_env)"

启动 Jupyter Notebook:

jupyter notebook

在 Jupyter Notebook 中:

点击右上角的 New 按钮。

在下拉菜单中,你应该会看到刚刚添加的内核(如 Python (fastai_env))。

选择该内核即可在虚拟环境中运行代码。
在终端fastai_env环境中安装fastbook:

pip install -U fastbook

至此,环境基本搭建完成。

  1. Error displaying widget
pip show ipywidgets
conda update ipywidgets jupyter
conda install -c conda-forge ipywidgets

执行上述命令后,widget运行正常,可上传图片

  1. AttributeError: ‘FileUpload’ object has no attribute ‘data’
    错误原因是ipywidgets版本问题,把原代码注释掉,做以下修改:
#img = PILImage.create(uploader.data[0])
img = PILImage.create(uploader.value[0].content.tobytes())

修改后,可以正常上传猫狗图片进行分类

  1. TypeError: ‘NoneType’ object is not iterable
    运行dls = bears.dataloaders(path),报错TypeError: ‘NoneType’ object is not iterable
    下面是GITHUB上大佬给出的整个代码,亲测可以运行成功
#hide
! [ -e /content ] && pip install -Uqq fastbook
import fastbook
fastbook.setup_book()

#hide
from fastbook import *
from fastai.vision.widgets import *
# Add below import (based on Is It A Bird? notebook)
from fastdownload import download_url

# Replaced search_images_bing with DuckDuckGo
search_images_ddg

# Use function definition from "Is it a bird?" notebook
def search_images(term, max_images=30):
    print(f"Searching for '{term}'")
    return L(search_images_ddg(term, max_images=max_images))

results = search_images_ddg('grizzly bear')
ims = results.attrgot('contentUrl')
len(ims)

#hide
ims = ['http://3.bp.blogspot.com/-S1scRCkI3vY/UHzV2kucsPI/AAAAAAAAA-k/YQ5UzHEm9Ss/s1600/Grizzly%2BBear%2BWildlife.jpg']

dest = 'images/grizzly.jpg'
download_url(ims[0], dest)

bear_types = 'grizzly','black','teddy'
path = Path('bears')

from time import sleep

for o in bear_types:
    dest = (path/o)
    dest.mkdir(exist_ok=True, parents=True)
    # results = search_images(f'{o} bear')
    download_images(dest, urls=search_images(f'{o} bear'))
    sleep(5)  # Pause between bear_types searches to avoid over-loading server

fns = get_image_files(path)
fns

len(fns)

failed = verify_images(fns)
failed

failed.map(Path.unlink);

bears = DataBlock(
    blocks=(ImageBlock, CategoryBlock),
    get_items=get_image_files,
    splitter=RandomSplitter(valid_pct=0.2, seed=42),
    get_y=parent_label,
    item_tfms=Resize(128))

dls = bears.dataloaders(path)

dls.valid.show_batch(max_n=4, nrows=1)

bears = bears.new(item_tfms=Resize(128, ResizeMethod.Squish))
dls = bears.dataloaders(path)
dls.valid.show_batch(max_n=4, nrows=1)

bears = bears.new(item_tfms=Resize(128, ResizeMethod.Pad, pad_mode='zeros'))
dls = bears.dataloaders(path)
dls.valid.show_batch(max_n=4, nrows=1)

bears = bears.new(item_tfms=RandomResizedCrop(128, min_scale=0.3))
dls = bears.dataloaders(path)
dls.train.show_batch(max_n=4, nrows=1, unique=True)

bears = bears.new(item_tfms=Resize(128), batch_tfms=aug_transforms(mult=2))
dls = bears.dataloaders(path)
dls.train.show_batch(max_n=8, nrows=2, unique=True)

bears = bears.new(
    item_tfms=RandomResizedCrop(224, min_scale=0.5),
    batch_tfms=aug_transforms())
dls = bears.dataloaders(path)

learn = vision_learner(dls, resnet18, metrics=error_rate)
learn.fine_tune(4)

interp = ClassificationInterpretation.from_learner(learn)
interp.plot_confusion_matrix()

interp.plot_top_losses(5, nrows=1)

#hide_output
cleaner = ImageClassifierCleaner(learn)
cleaner

#hide
for idx in cleaner.delete(): cleaner.fns[idx].unlink()
for idx,cat in cleaner.change(): shutil.move(str(cleaner.fns[idx]), path/cat)

相关文章:

  • 单片机 Bootloade与二进制文件的生成
  • 什么是电力交易员
  • 基于ffmpeg+openGL ES实现的视频编辑工具-添加滤镜(七)
  • Ecode在流程表单中插入自定义内容
  • 从CNN到Transformer:遥感影像目标检测的未来趋势
  • 语音控制热水器WTK69000离线语音识别芯片方案:迈向智能家居新时代
  • 一款社交媒体中查用户名的工具
  • 【Python】如何在 Linux/Windows 系统中设置 PYTHONPATH 环境变量
  • 什么是 Vue 的自定义事件?如何触发和监听?
  • js面试八股
  • Git笔记汇总,持续更新~
  • 快速提升网站收录:利用网站内链布局
  • 出行项目案例
  • C++ ——继承
  • ElasticSearch公共方法封装
  • Python+Selenium+Pytest+POM自动化测试框架封装
  • 【Deepseek+Dify】wsl2+docker+Deepseek+Dify部署本地大模型知识库问题总结
  • 后“智驾平权”时代,谁为安全冗余和体验升级“买单”
  • 如何通过 Python 实现一个消息队列,为在线客服系统与海外运营的APP对接
  • 数据结构之【顺序表简介】
  • 知名猎头公司创始人兼首席执行官庄华因突发疾病逝世,享年62岁
  • 中哥两国元首共同见证签署《中华人民共和国政府与哥伦比亚共和国政府关于共同推进丝绸之路经济带和21世纪海上丝绸之路建设的合作规划》
  • 跨文化戏剧的拓荒者与传承者——洪深与复旦剧社的百年回响
  • 专访|茸主:杀回UFC,只为给自己一个交代
  • 江西省市场监管局原局长谢来发被双开:违规接受旅游活动安排
  • 富家罹盗与财富迷思:《西游记》与《蜃楼志》中的强盗案