{"version":2,"relationshipURLBase":"https://codingai-lec03.pages.dev/course/notebook-blocks/61b73cd52382467c8d10d1143808ad17.html","relationshipResolution":"Resolve relative relationship URLs against relationshipURLBase; complete records and absolute URLs are in blocks.","title":"2. 图像先生成，目标句子只进入损失 · 实现代码","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/61b73cd52382467c8d10d1143808ad17.html","markdown":"https://codingai-lec03.pages.dev/course/notebook-blocks/61b73cd52382467c8d10d1143808ad17.md","pages":[{"id":"reading-opening","title":"2. 图像先生成，目标句子只进入损失 · 实现代码","unit":"2. 图像先生成，目标句子只进入损失 · 实现代码","unitId":"notebook-blocks/61b73cd52382467c8d10d1143808ad17","chapter":"course","number":1}],"aliases":[{"oldId":"b-46b89775774ccc8aa534df10","targetId":"b-46b89775774ccc8aa534df10","page":"reading-opening","operation":"move","beforeSHA256":"db08960319942d9119c9cad2cf7d0b78a68c914f8e19ab3bd375531d27c96204","afterSHA256":"db08960319942d9119c9cad2cf7d0b78a68c914f8e19ab3bd375531d27c96204","reason":"Same source body in authored semantic page"},{"oldId":"b-872952010fd45609644d04aa","targetId":"b-872952010fd45609644d04aa","page":"reading-opening","operation":"move","beforeSHA256":"effb27592f0c27ad6b9707523209fa328b943e4c04c1885adf8946a5d4401564","afterSHA256":"effb27592f0c27ad6b9707523209fa328b943e4c04c1885adf8946a5d4401564","reason":"Same source body in authored semantic page"},{"oldId":"b-745b4ade34b3fa85fcda60c4","targetId":"b-745b4ade34b3fa85fcda60c4","page":"reading-opening","operation":"move","beforeSHA256":"e91f24e4e4ca40e2099a0d81d30db6568f4bf2074b499eeee6e3959617bd97ac","afterSHA256":"e91f24e4e4ca40e2099a0d81d30db6568f4bf2074b499eeee6e3959617bd97ac","reason":"Same source body in authored semantic page"},{"oldId":"b-ff929de167c1ff9a88e4a920","targetId":"b-ff929de167c1ff9a88e4a920","page":"reading-opening","operation":"move","beforeSHA256":"6a611aef342a7535362f318ee0c33b63170ce4ab853fa44a05f76a04873fd320","afterSHA256":"6a611aef342a7535362f318ee0c33b63170ce4ab853fa44a05f76a04873fd320","reason":"Same source body in authored semantic page"},{"oldId":"b-6b51846798e2a2b62244bc5a","targetId":"b-6b51846798e2a2b62244bc5a","page":"reading-opening","operation":"move","beforeSHA256":"b0288a9b8d5d88212522932be60299343d4938528cb8e7153f5a279ed971e4e0","afterSHA256":"b0288a9b8d5d88212522932be60299343d4938528cb8e7153f5a279ed971e4e0","reason":"Same source body in authored semantic page"}],"blocks":[{"id":"b-46b89775774ccc8aa534df10","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/61b73cd52382467c8d10d1143808ad17.html#b-46b89775774ccc8aa534df10","content":"[LAB 13 · 看图生成一句话：训练、解码与消融](/course/notebooks/3da47f3ee3554ee0a36e0bb6a2fdc61f.html)","sha256":"db08960319942d9119c9cad2cf7d0b78a68c914f8e19ab3bd375531d27c96204","chapter":{"id":"course","title":"2. 图像先生成，目标句子只进入损失 · 实现代码"},"unit":{"id":"notebook-blocks/61b73cd52382467c8d10d1143808ad17","title":"2. 图像先生成，目标句子只进入损失 · 实现代码"},"page":{"id":"reading-opening","title":"2. 图像先生成，目标句子只进入损失 · 实现代码","number":1},"sectionTitle":"2. 图像先生成，目标句子只进入损失 · 实现代码","currentQuestion":"2. 图像先生成，目标句子只进入损失 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-872952010fd45609644d04aa","prerequisites":[],"relatedBlocks":[]},{"id":"b-872952010fd45609644d04aa","type":"h1","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/61b73cd52382467c8d10d1143808ad17.html#b-872952010fd45609644d04aa","content":"# 2. 图像先生成，目标句子只进入损失 · 实现代码","sha256":"effb27592f0c27ad6b9707523209fa328b943e4c04c1885adf8946a5d4401564","chapter":{"id":"course","title":"2. 图像先生成，目标句子只进入损失 · 实现代码"},"unit":{"id":"notebook-blocks/61b73cd52382467c8d10d1143808ad17","title":"2. 图像先生成，目标句子只进入损失 · 实现代码"},"page":{"id":"reading-opening","title":"2. 图像先生成，目标句子只进入损失 · 实现代码","number":1},"sectionTitle":"2. 图像先生成，目标句子只进入损失 · 实现代码","currentQuestion":"2. 图像先生成，目标句子只进入损失 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-46b89775774ccc8aa534df10","nextBlock":"b-745b4ade34b3fa85fcda60c4","prerequisites":[{"id":"b-46b89775774ccc8aa534df10","url":"#b-46b89775774ccc8aa534df10","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-745b4ade34b3fa85fcda60c4","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/61b73cd52382467c8d10d1143808ad17.html#b-745b4ade34b3fa85fcda60c4","content":"按问题继续","sha256":"e91f24e4e4ca40e2099a0d81d30db6568f4bf2074b499eeee6e3959617bd97ac","chapter":{"id":"course","title":"2. 图像先生成，目标句子只进入损失 · 实现代码"},"unit":{"id":"notebook-blocks/61b73cd52382467c8d10d1143808ad17","title":"2. 图像先生成，目标句子只进入损失 · 实现代码"},"page":{"id":"reading-opening","title":"2. 图像先生成，目标句子只进入损失 · 实现代码","number":1},"sectionTitle":"2. 图像先生成，目标句子只进入损失 · 实现代码","currentQuestion":"2. 图像先生成，目标句子只进入损失 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-872952010fd45609644d04aa","nextBlock":"b-ff929de167c1ff9a88e4a920","prerequisites":[{"id":"b-872952010fd45609644d04aa","url":"#b-872952010fd45609644d04aa","role":"section-title"},{"id":"b-46b89775774ccc8aa534df10","url":"#b-46b89775774ccc8aa534df10","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-ff929de167c1ff9a88e4a920","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/61b73cd52382467c8d10d1143808ad17.html#b-ff929de167c1ff9a88e4a920","content":"真实CNN–GRU条件训练与greedy/beam生成、遮图/错图消融","sha256":"6a611aef342a7535362f318ee0c33b63170ce4ab853fa44a05f76a04873fd320","chapter":{"id":"course","title":"2. 图像先生成，目标句子只进入损失 · 实现代码"},"unit":{"id":"notebook-blocks/61b73cd52382467c8d10d1143808ad17","title":"2. 图像先生成，目标句子只进入损失 · 实现代码"},"page":{"id":"reading-opening","title":"2. 图像先生成，目标句子只进入损失 · 实现代码","number":1},"sectionTitle":"2. 图像先生成，目标句子只进入损失 · 实现代码","currentQuestion":"2. 图像先生成，目标句子只进入损失 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-745b4ade34b3fa85fcda60c4","nextBlock":"b-6b51846798e2a2b62244bc5a","prerequisites":[{"id":"b-872952010fd45609644d04aa","url":"#b-872952010fd45609644d04aa","role":"section-title"},{"id":"b-46b89775774ccc8aa534df10","url":"#b-46b89775774ccc8aa534df10","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-6b51846798e2a2b62244bc5a","type":"pre","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/61b73cd52382467c8d10d1143808ad17.html#b-6b51846798e2a2b62244bc5a","content":"```\ndef render_object(color, shape, position, rng):\n    canvas = Image.new('RGB', (32,32), (244,242,236))\n    painter = ImageDraw.Draw(canvas)\n    cx = {'left':8, 'center':16, 'right':24}[position] + int(rng.integers(-1,2))\n    cy = 16 + int(rng.integers(-4,5)); radius = int(rng.integers(4,7))\n    box = (cx-radius, cy-radius, cx+radius, cy+radius)\n    if shape == 'square': painter.rectangle(box, fill=COLORS[color])\n    else: painter.ellipse(box, fill=COLORS[color])\n    arr = np.array(canvas).astype(np.float32) / 255\n    arr = np.clip(arr + rng.normal(0,.018,arr.shape),0,1).astype(np.float32)\n    return arr\n\ndef make_caption_data(n, seed):\n    rng = np.random.default_rng(seed); images=[]; sequences=[]; descriptions=[]\n    conditions = [(c,s,p) for c in COLORS for s in ['square','circle'] for p in ['left','center','right']]\n    for i in range(n):\n        color, shape, pos = conditions[i % len(conditions)]\n        words = ['a',color,shape] + ([] if pos=='center' else ['on',pos])\n        sequence = [BOS] + [W[w] for w in words] + [EOS]\n        sequences.append(sequence+[PAD]*(7-len(sequence)))\n        images.append(render_object(color,shape,pos,rng)); descriptions.append(' '.join(words))\n    return torch.tensor(np.stack(images)).permute(0,3,1,2), torch.tensor(sequences), descriptions\n\nXtrain, Ytrain, train_text = make_caption_data(720,13031)\nXtest, Ytest, test_text = make_caption_data(180,13033)\n# Independent random pixels/geometry; no duplicate image crosses the split.\ntrain_hashes = {hashlib.sha256(x.numpy().tobytes()).hexdigest() for x in Xtrain}\nassert not train_hashes.intersection(hashlib.sha256(x.numpy().tobytes()).hexdigest() for x in Xtest)\nnp.savez_compressed(OUT/'lab13-data.npz', train_images=Xtrain.numpy(), train_tokens=Ytrain.numpy(), test_images=Xtest.numpy(), test_tokens=Ytest.numpy())\nprint('images:', tuple(Xtrain.shape), tuple(Xtest.shape), 'tokens:', tuple(Ytrain.shape))\nprint('teacher input:', Ytrain[:3,:-1].tolist())\nprint('shifted target:',Ytrain[:3,1:].tolist())\nprint('loss mask:',Ytrain[:3,1:].ne(PAD).int().tolist())\n```","sha256":"b0288a9b8d5d88212522932be60299343d4938528cb8e7153f5a279ed971e4e0","chapter":{"id":"course","title":"2. 图像先生成，目标句子只进入损失 · 实现代码"},"unit":{"id":"notebook-blocks/61b73cd52382467c8d10d1143808ad17","title":"2. 图像先生成，目标句子只进入损失 · 实现代码"},"page":{"id":"reading-opening","title":"2. 图像先生成，目标句子只进入损失 · 实现代码","number":1},"sectionTitle":"2. 图像先生成，目标句子只进入损失 · 实现代码","currentQuestion":"2. 图像先生成，目标句子只进入损失 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-ff929de167c1ff9a88e4a920","nextBlock":null,"prerequisites":[{"id":"b-872952010fd45609644d04aa","url":"#b-872952010fd45609644d04aa","role":"section-title"},{"id":"b-46b89775774ccc8aa534df10","url":"#b-46b89775774ccc8aa534df10","role":"problem-context"}],"relatedBlocks":[]}]}
