Lecture 03 学习讲义
正文
工具
按问题查找
Lecture 031. 先写预测,再确定协议 · 实现代码

1. 先写预测,再确定协议 · 实现代码

独立阅读

按问题继续

同源参数的冻结/局部/全量/scratch与BN模式辨析

展开完整实现代码
TRAIN_LIMIT=256
DX=2
EPOCHS=4
BATCH_SIZE=64
LEARNING_RATE=0.002
SEED=20260917
with np.load(io.BytesIO(asset_bytes['target.npz']),allow_pickle=False) as z:
    target={k:z[k].copy() for k in z.files}
provenance=json.loads(asset_bytes['target-provenance.json'])
assert 16<=TRAIN_LIMIT<=256 and -4<=DX<=4 and EPOCHS>=1
x=torch.tensor(target['images'],dtype=torch.float32)/255
def shift_x(a,dx):
    b=torch.zeros_like(a)
    if dx>=0:b[:,:,:,dx:]=a[:,:,:,:a.shape[-1]-dx]
    else:b[:,:,:,:dx]=a[:,:,:,-dx:]
    return b
x=shift_x(x,DX)
y=torch.tensor((target['digit_labels']>=5).astype(np.int64))
train_idx=np.flatnonzero(target['split']==0)[:TRAIN_LIMIT]
val_idx=np.flatnonzero(target['split']==1)
heldout_idx=np.flatnonzero(target['split']==2)
train_x,train_y=x[train_idx],y[train_idx]
val_x,val_y=x[val_idx],y[val_idx]
assert len(set(target['official_train_ids']))==640
assert not set(train_idx)&set(val_idx) and not set(train_idx)&set(heldout_idx)
print('训练/验证/保留:',len(train_idx),len(val_idx),len(heldout_idx),'固定横移',DX)
print('训练标签计数',torch.bincount(train_y,minlength=2).tolist(),'验证标签计数',torch.bincount(val_y,minlength=2).tolist())
fig,axes=plt.subplots(1,8,figsize=(12,2))
for i,ax in enumerate(axes):
    ax.imshow(train_x[i,0],cmap='gray',vmin=0,vmax=1);ax.set_title(f'digit {target["digit_labels"][train_idx[i]]}: y={train_y[i].item()}');ax.axis('off')
plt.show()