{"version":2,"relationshipURLBase":"https://codingai-lec03.pages.dev/course/notebook-blocks/7a1ffe32994142c180210d4ed48e445f.html","relationshipResolution":"Resolve relative relationship URLs against relationshipURLBase; complete records and absolute URLs are in blocks.","title":"h 与 z：目标作用在哪一层？ · 实现代码","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/7a1ffe32994142c180210d4ed48e445f.html","markdown":"https://codingai-lec03.pages.dev/course/notebook-blocks/7a1ffe32994142c180210d4ed48e445f.md","pages":[{"id":"reading-opening","title":"h 与 z：目标作用在哪一层？ · 实现代码","unit":"h 与 z：目标作用在哪一层？ · 实现代码","unitId":"notebook-blocks/7a1ffe32994142c180210d4ed48e445f","chapter":"course","number":1}],"aliases":[{"oldId":"b-f351e45f83f742bd9eb81c3e","targetId":"b-f351e45f83f742bd9eb81c3e","page":"reading-opening","operation":"move","beforeSHA256":"66fcbfd55e8ee49e9b36e857c1385fb66cc262f5d574a2759c494c801fe22adc","afterSHA256":"66fcbfd55e8ee49e9b36e857c1385fb66cc262f5d574a2759c494c801fe22adc","reason":"Same source body in authored semantic page"},{"oldId":"b-383ae936f417e2339b9a055b","targetId":"b-383ae936f417e2339b9a055b","page":"reading-opening","operation":"move","beforeSHA256":"97d489c8b2d84b857e9987d6e3e2cc217913106d939d5dc6eecfd066958eb85b","afterSHA256":"97d489c8b2d84b857e9987d6e3e2cc217913106d939d5dc6eecfd066958eb85b","reason":"Same source body in authored semantic page"},{"oldId":"b-00cf3096f9cc57562b4452ee","targetId":"b-00cf3096f9cc57562b4452ee","page":"reading-opening","operation":"move","beforeSHA256":"42cba31deccba2a350b9b23bd0ca1dcaa4c4c5cb9d35c773e1fcb89124788ccd","afterSHA256":"42cba31deccba2a350b9b23bd0ca1dcaa4c4c5cb9d35c773e1fcb89124788ccd","reason":"Same source body in authored semantic page"},{"oldId":"b-60c244574a052030790534ae","targetId":"b-60c244574a052030790534ae","page":"reading-opening","operation":"move","beforeSHA256":"7d0c53df1bc36d8ae47159a38d1da25d7b95cb99a23f0973fb743325017d6c63","afterSHA256":"7d0c53df1bc36d8ae47159a38d1da25d7b95cb99a23f0973fb743325017d6c63","reason":"Same source body in authored semantic page"},{"oldId":"b-d279962614a7b573d9ab8bfc","targetId":"b-d279962614a7b573d9ab8bfc","page":"reading-opening","operation":"move","beforeSHA256":"82501e784ec1c1a42f128baa406d84dc7b8a04583b7be1c4579de0bc12cabed6","afterSHA256":"82501e784ec1c1a42f128baa406d84dc7b8a04583b7be1c4579de0bc12cabed6","reason":"Same source body in authored semantic page"}],"blocks":[{"id":"b-f351e45f83f742bd9eb81c3e","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/7a1ffe32994142c180210d4ed48e445f.html#b-f351e45f83f742bd9eb81c3e","content":"[LAB 06 · 颜色干预：视图、投影与读出](/course/notebooks/7c4f531113d7473abc174e2e014e1340.html)","sha256":"66fcbfd55e8ee49e9b36e857c1385fb66cc262f5d574a2759c494c801fe22adc","chapter":{"id":"course","title":"h 与 z：目标作用在哪一层？ · 实现代码"},"unit":{"id":"notebook-blocks/7a1ffe32994142c180210d4ed48e445f","title":"h 与 z：目标作用在哪一层？ · 实现代码"},"page":{"id":"reading-opening","title":"h 与 z：目标作用在哪一层？ · 实现代码","number":1},"sectionTitle":"h 与 z：目标作用在哪一层？ · 实现代码","currentQuestion":"h 与 z：目标作用在哪一层？ · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-383ae936f417e2339b9a055b","prerequisites":[],"relatedBlocks":[]},{"id":"b-383ae936f417e2339b9a055b","type":"h1","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/7a1ffe32994142c180210d4ed48e445f.html#b-383ae936f417e2339b9a055b","content":"# h 与 z：目标作用在哪一层？ · 实现代码","sha256":"97d489c8b2d84b857e9987d6e3e2cc217913106d939d5dc6eecfd066958eb85b","chapter":{"id":"course","title":"h 与 z：目标作用在哪一层？ · 实现代码"},"unit":{"id":"notebook-blocks/7a1ffe32994142c180210d4ed48e445f","title":"h 与 z：目标作用在哪一层？ · 实现代码"},"page":{"id":"reading-opening","title":"h 与 z：目标作用在哪一层？ · 实现代码","number":1},"sectionTitle":"h 与 z：目标作用在哪一层？ · 实现代码","currentQuestion":"h 与 z：目标作用在哪一层？ · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-f351e45f83f742bd9eb81c3e","nextBlock":"b-00cf3096f9cc57562b4452ee","prerequisites":[{"id":"b-f351e45f83f742bd9eb81c3e","url":"#b-f351e45f83f742bd9eb81c3e","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-00cf3096f9cc57562b4452ee","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/7a1ffe32994142c180210d4ed48e445f.html#b-00cf3096f9cc57562b4452ee","content":"主线阅读与优先实验","sha256":"42cba31deccba2a350b9b23bd0ca1dcaa4c4c5cb9d35c773e1fcb89124788ccd","chapter":{"id":"course","title":"h 与 z：目标作用在哪一层？ · 实现代码"},"unit":{"id":"notebook-blocks/7a1ffe32994142c180210d4ed48e445f","title":"h 与 z：目标作用在哪一层？ · 实现代码"},"page":{"id":"reading-opening","title":"h 与 z：目标作用在哪一层？ · 实现代码","number":1},"sectionTitle":"h 与 z：目标作用在哪一层？ · 实现代码","currentQuestion":"h 与 z：目标作用在哪一层？ · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-383ae936f417e2339b9a055b","nextBlock":"b-60c244574a052030790534ae","prerequisites":[{"id":"b-383ae936f417e2339b9a055b","url":"#b-383ae936f417e2339b9a055b","role":"section-title"},{"id":"b-f351e45f83f742bd9eb81c3e","url":"#b-f351e45f83f742bd9eb81c3e","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-60c244574a052030790534ae","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/7a1ffe32994142c180210d4ed48e445f.html#b-60c244574a052030790534ae","content":"真实RGB对比训练、唯一指定增强变化、h/z形状与颜色读出","sha256":"7d0c53df1bc36d8ae47159a38d1da25d7b95cb99a23f0973fb743325017d6c63","chapter":{"id":"course","title":"h 与 z：目标作用在哪一层？ · 实现代码"},"unit":{"id":"notebook-blocks/7a1ffe32994142c180210d4ed48e445f","title":"h 与 z：目标作用在哪一层？ · 实现代码"},"page":{"id":"reading-opening","title":"h 与 z：目标作用在哪一层？ · 实现代码","number":1},"sectionTitle":"h 与 z：目标作用在哪一层？ · 实现代码","currentQuestion":"h 与 z：目标作用在哪一层？ · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-00cf3096f9cc57562b4452ee","nextBlock":"b-d279962614a7b573d9ab8bfc","prerequisites":[{"id":"b-383ae936f417e2339b9a055b","url":"#b-383ae936f417e2339b9a055b","role":"section-title"},{"id":"b-f351e45f83f742bd9eb81c3e","url":"#b-f351e45f83f742bd9eb81c3e","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-d279962614a7b573d9ab8bfc","type":"pre","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/7a1ffe32994142c180210d4ed48e445f.html#b-d279962614a7b573d9ab8bfc","content":"```\nclass ImageEncoder(nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.conv=nn.Sequential(nn.Conv2d(3,12,3,padding=1),nn.ReLU(),\n          nn.Conv2d(12,24,3,stride=2,padding=1),nn.ReLU(),\n          nn.Conv2d(24,24,3,stride=2,padding=1),nn.ReLU())\n        self.readout=nn.Linear(24*4*4,48)\n    def forward(self,x): return self.readout(self.conv(x).flatten(1))\n\nclass ContrastiveModel(nn.Module):\n    def __init__(self):\n        super().__init__(); self.encoder=ImageEncoder()\n        self.projector=nn.Sequential(nn.Linear(48,48),nn.ReLU(),nn.Linear(48,24))\n    def forward(self,x):\n        h=self.encoder(x); z=self.projector(h)\n        return h,z\n\ndef info_nce(z1,z2,tau=.2):\n    z=F.normalize(torch.cat([z1,z2]),dim=1); n=len(z1)\n    logits=z@z.T/tau\n    logits=logits.masked_fill(torch.eye(2*n,dtype=torch.bool),-1e9)\n    positive=(torch.arange(2*n)+n)%(2*n)\n    return F.cross_entropy(logits,positive)\n\ndef train_simclr(initial,x,train,destroy_color,epochs=40):\n    # Equal initialization, minibatch ordering, optimizer, steps, and RNG streams.\n    torch.manual_seed(SEED+1)\n    model=copy.deepcopy(initial); opt=torch.optim.Adam(model.parameters(),lr=.002)\n    history=[]; before=next(model.encoder.parameters()).detach().clone()\n    for epoch in range(epochs):\n        model.train(); losses=[]\n        for ids in torch.as_tensor(train)[torch.randperm(len(train))].split(60):\n            batch=x[ids]; a,b=views(batch,destroy_color),views(batch,destroy_color)\n            loss=info_nce(model(a)[1],model(b)[1])\n            opt.zero_grad(); loss.backward(); opt.step(); losses.append(float(loss.detach()))\n        history.append(float(np.mean(losses)))\n    delta=float((next(model.encoder.parameters()).detach()-before).norm())\n    assert delta>0\n    return model,history,delta\n```","sha256":"82501e784ec1c1a42f128baa406d84dc7b8a04583b7be1c4579de0bc12cabed6","chapter":{"id":"course","title":"h 与 z：目标作用在哪一层？ · 实现代码"},"unit":{"id":"notebook-blocks/7a1ffe32994142c180210d4ed48e445f","title":"h 与 z：目标作用在哪一层？ · 实现代码"},"page":{"id":"reading-opening","title":"h 与 z：目标作用在哪一层？ · 实现代码","number":1},"sectionTitle":"h 与 z：目标作用在哪一层？ · 实现代码","currentQuestion":"h 与 z：目标作用在哪一层？ · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-60c244574a052030790534ae","nextBlock":null,"prerequisites":[{"id":"b-383ae936f417e2339b9a055b","url":"#b-383ae936f417e2339b9a055b","role":"section-title"},{"id":"b-f351e45f83f742bd9eb81c3e","url":"#b-f351e45f83f742bd9eb81c3e","role":"problem-context"}],"relatedBlocks":[]}]}
