[LAB 02 · 参数迁移:冻结、局部与全量微调](/course/notebooks/4bd450d54870432db91c80a4df563b8e.html) # 准备:本实验的固定材料 · 实现代码 [独立阅读](/course/notebook-blocks/186427ff91eb43f1841c3fb1342dc90a.html) 按问题继续 同源参数的冻结/局部/全量/scratch与BN模式辨析 展开完整实现代码 ``` # 当前项目中的独立材料:已存在则复用,缺失才从本讲原站准备。 from pathlib import Path import io, zipfile, urllib.request _base = Path.cwd() _folder = 'lab09-transfer' _sentinel = 'data/train-images-idx3-ubyte.gz' _choices = [_base/_folder, _base/'lecture03-labs'/_folder, _base] _ready = next((p for p in _choices if (p/_sentinel).is_file()), None) if _ready is None: _url = 'https://codingai-lec03.pages.dev/course/materials/' + _folder + '.zip' _payload = urllib.request.urlopen(_url, timeout=60).read() with zipfile.ZipFile(io.BytesIO(_payload)) as _archive: _names = [i.filename for i in _archive.infolist() if not i.is_dir()] _prefix = _folder + '/' _prefixed = all(n.startswith(_prefix) for n in _names) _destination = _base if _prefixed else _base/_folder for _item in _archive.infolist(): _target = (_destination/_item.filename).resolve() if not _target.is_relative_to(_destination.resolve()): raise ValueError('材料包中有越界路径,停止解压。') if _item.is_dir(): _target.mkdir(parents=True, exist_ok=True) elif not _target.exists(): _target.parent.mkdir(parents=True, exist_ok=True) _target.write_bytes(_archive.read(_item)) _ready = next((p for p in _choices if (p/_sentinel).is_file()), None) assert _ready is not None, '请将本讲完整材料包解压到当前项目的 ' + _folder + '/;保留文件结构。' LAB_ROOT = _ready print('材料目录已就绪:', LAB_ROOT) import copy, gzip, hashlib, io, json, os, time from pathlib import Path from collections import OrderedDict import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Rectangle import torch from torch import nn from torch.nn import functional as F torch.set_num_threads(2) torch.manual_seed(20260917) ROOT=LAB_ROOT if not (ROOT/'data').is_dir() and (ROOT/'lab09-transfer/data').is_dir():ROOT=ROOT/'lab09-transfer' assert (ROOT/'data').is_dir(), '请解压独立 lab09-transfer 包并保留目录结构。' OUT=ROOT/'runs/current';OUT.mkdir(parents=True,exist_ok=True) ```