{"version":2,"relationshipURLBase":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html","relationshipResolution":"Resolve relative relationship URLs against relationshipURLBase; complete records and absolute URLs are in blocks.","title":"LAB 06 · 颜色干预：视图、投影与读出","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html","markdown":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.md","pages":[{"id":"reading-opening","title":"LAB 06 · 颜色干预：视图、投影与读出","unit":"LAB 06 · 颜色干预：视图、投影与读出","unitId":"lab06-视图颜色与投影头","chapter":"course","number":1},{"id":"reading-block-4f88ba4daa8d4780975e85dbd7a0b3de","title":"热身：一种可行构造，尚未学习","unit":"LAB 06 · 颜色干预：视图、投影与读出","unitId":"lab06-视图颜色与投影头","chapter":"course","number":2},{"id":"reading-block-6e3608970afc452fb4e8068af2ceef5f","title":"运行准备与结果身份","unit":"LAB 06 · 颜色干预：视图、投影与读出","unitId":"lab06-视图颜色与投影头","chapter":"course","number":3},{"id":"reading-block-37c37cc1f00e4b78aa75a0720856c9a8","title":"从一张图到两个视图","unit":"LAB 06 · 颜色干预：视图、投影与读出","unitId":"lab06-视图颜色与投影头","chapter":"course","number":4},{"id":"reading-block-31c73a940ff348a4ae5a80a773d9e114","title":"h 与 z：目标作用在哪一层？","unit":"LAB 06 · 颜色干预：视图、投影与读出","unitId":"lab06-视图颜色与投影头","chapter":"course","number":5},{"id":"reading-block-67c24096691a4ebca8cea6b57a6c7785","title":"冻结评价回答另一个问题","unit":"LAB 06 · 颜色干预：视图、投影与读出","unitId":"lab06-视图颜色与投影头","chapter":"course","number":6},{"id":"reading-block-21ccc165ce674b0bba08a63ab965c04d","title":"已运行结果：一次增益也可能是另一次损失","unit":"LAB 06 · 颜色干预：视图、投影与读出","unitId":"lab06-视图颜色与投影头","chapter":"course","number":7},{"id":"reading-block-b7235416faea4815ad2db029aeb31116","title":"只改一个条件，再解释变化","unit":"LAB 06 · 颜色干预：视图、投影与读出","unitId":"lab06-视图颜色与投影头","chapter":"course","number":8}],"aliases":[{"oldId":"b-f07d0c4782778dda05eb73a6","targetId":"b-f07d0c4782778dda05eb73a6","page":"reading-opening","operation":"move","beforeSHA256":"bd246dc5f03e19133279e360942589eaecbfe3e79a05b72293b14538947562b8","afterSHA256":"bd246dc5f03e19133279e360942589eaecbfe3e79a05b72293b14538947562b8","reason":"Same source body in authored semantic page"},{"oldId":"b-b591349635851f1d644c5992","targetId":"b-b591349635851f1d644c5992","page":"reading-opening","operation":"move","beforeSHA256":"42cba31deccba2a350b9b23bd0ca1dcaa4c4c5cb9d35c773e1fcb89124788ccd","afterSHA256":"42cba31deccba2a350b9b23bd0ca1dcaa4c4c5cb9d35c773e1fcb89124788ccd","reason":"Same source body in authored semantic page"},{"oldId":"b-9090cd5b777b2f6c02cd55ac","targetId":"b-9090cd5b777b2f6c02cd55ac","page":"reading-opening","operation":"move","beforeSHA256":"7d0c53df1bc36d8ae47159a38d1da25d7b95cb99a23f0973fb743325017d6c63","afterSHA256":"7d0c53df1bc36d8ae47159a38d1da25d7b95cb99a23f0973fb743325017d6c63","reason":"Same source body in authored semantic page"},{"oldId":"b-8807b576c71ff150082cf435","targetId":"b-8807b576c71ff150082cf435","page":"reading-opening","operation":"move","beforeSHA256":"f22152fd55dcdb0090b5653d37145694fd19388d31e10226549464fe8b483578","afterSHA256":"f22152fd55dcdb0090b5653d37145694fd19388d31e10226549464fe8b483578","reason":"Same source body in authored semantic page"},{"oldId":"b-2400771defc9641aa19e11e3","targetId":"b-2400771defc9641aa19e11e3","page":"reading-opening","operation":"move","beforeSHA256":"9412c334ba69cecafc029ab0c22814d9df928a6c4d41cd69390e96b2b55ccfe2","afterSHA256":"9412c334ba69cecafc029ab0c22814d9df928a6c4d41cd69390e96b2b55ccfe2","reason":"Same source body in authored semantic page"},{"oldId":"b-22649033f7d5faeddceb4e54","targetId":"b-22649033f7d5faeddceb4e54","page":"reading-opening","operation":"move","beforeSHA256":"50c058b8d95fce98e5e519d168f67e151a75d88cab27a59c819aaca3fdc46ec9","afterSHA256":"50c058b8d95fce98e5e519d168f67e151a75d88cab27a59c819aaca3fdc46ec9","reason":"Same source body in authored semantic page"},{"oldId":"b-a16170e04b90c904fc6e7f60","targetId":"b-a16170e04b90c904fc6e7f60","page":"reading-opening","operation":"move","beforeSHA256":"9ffdbfce8c5c542503aa22a9c8622ce91a874972b637a5d1a08c0a3821543a58","afterSHA256":"9ffdbfce8c5c542503aa22a9c8622ce91a874972b637a5d1a08c0a3821543a58","reason":"Same source body in authored semantic page"},{"oldId":"b-3b9d0ff1652d0b08cd592dc5","targetId":"b-3b9d0ff1652d0b08cd592dc5","page":"reading-opening","operation":"move","beforeSHA256":"d08d0b0005a7177f54b35340307f4aaa4d9f40f0826bd8b50bdddf88d3eb7a79","afterSHA256":"d08d0b0005a7177f54b35340307f4aaa4d9f40f0826bd8b50bdddf88d3eb7a79","reason":"Same source body in authored semantic page"},{"oldId":"b-4e246aeda5a78b23135402cc","targetId":"b-4e246aeda5a78b23135402cc","page":"reading-opening","operation":"move","beforeSHA256":"d3a9e1a09a07e66e69b59cc7bf9e6fc114eee794728d02d4595951ea921735b0","afterSHA256":"d3a9e1a09a07e66e69b59cc7bf9e6fc114eee794728d02d4595951ea921735b0","reason":"Same source body in authored semantic page"},{"oldId":"b-f97f8cce91e1405c7bb5bab9","targetId":"b-f97f8cce91e1405c7bb5bab9","page":"reading-block-4f88ba4daa8d4780975e85dbd7a0b3de","operation":"move","beforeSHA256":"3857a264d4c4da09879a56ccab674cc307baa172ff59255ca1d92e3f6a458f34","afterSHA256":"3857a264d4c4da09879a56ccab674cc307baa172ff59255ca1d92e3f6a458f34","reason":"Same source body in authored semantic page"},{"oldId":"b-e07f9bc1dda675931f6952ca","targetId":"b-e07f9bc1dda675931f6952ca","page":"reading-block-4f88ba4daa8d4780975e85dbd7a0b3de","operation":"move","beforeSHA256":"17abbe4a2292ebfccea3656526f2cb6223c636cbe4615c118c316b1844498c4d","afterSHA256":"17abbe4a2292ebfccea3656526f2cb6223c636cbe4615c118c316b1844498c4d","reason":"Same source body in authored semantic page"},{"oldId":"b-0e61e50a240ce0935af5452e","targetId":"b-0e61e50a240ce0935af5452e","page":"reading-block-4f88ba4daa8d4780975e85dbd7a0b3de","operation":"move","beforeSHA256":"44b8499814a44e579c1e2ccf0edec98f706d5767cee4bed065f0bf0feb32cdd0","afterSHA256":"44b8499814a44e579c1e2ccf0edec98f706d5767cee4bed065f0bf0feb32cdd0","reason":"Same source body in authored semantic page"},{"oldId":"b-3a5f0a8039132c9c3d675e56","targetId":"b-3a5f0a8039132c9c3d675e56","page":"reading-block-6e3608970afc452fb4e8068af2ceef5f","operation":"move","beforeSHA256":"9bbc7527a59bb35d5da5d51d5f5bc342082de91f94066bfa434ed27e431f230a","afterSHA256":"9bbc7527a59bb35d5da5d51d5f5bc342082de91f94066bfa434ed27e431f230a","reason":"Same source body in authored semantic page"},{"oldId":"b-35c035df019869d83e0cf30c","targetId":"b-35c035df019869d83e0cf30c","page":"reading-block-6e3608970afc452fb4e8068af2ceef5f","operation":"move","beforeSHA256":"7c7112f4f7442896ffc602e4bca9c95cb6afe323f539ecace8877e95dc68b391","afterSHA256":"7c7112f4f7442896ffc602e4bca9c95cb6afe323f539ecace8877e95dc68b391","reason":"Same source body in authored semantic page"},{"oldId":"b-1d21e600bda06fa74c362677","targetId":"b-1d21e600bda06fa74c362677","page":"reading-block-6e3608970afc452fb4e8068af2ceef5f","operation":"move","beforeSHA256":"0d54911358d4ef6855a1b6ce3af7606e8f9b224fb59551cdc322abb7e718e7d0","afterSHA256":"0d54911358d4ef6855a1b6ce3af7606e8f9b224fb59551cdc322abb7e718e7d0","reason":"Same source body in authored semantic page"},{"oldId":"b-77ea8f01b45153e2a0775fe5","targetId":"b-77ea8f01b45153e2a0775fe5","page":"reading-block-6e3608970afc452fb4e8068af2ceef5f","operation":"move","beforeSHA256":"1c09502a0af88ecc992c812ee8a92c14817a2fea125b3fe51e4382a22823aad0","afterSHA256":"1c09502a0af88ecc992c812ee8a92c14817a2fea125b3fe51e4382a22823aad0","reason":"Same source body in authored semantic page"},{"oldId":"b-078ab2befda4e68dddf47dd5","targetId":"b-078ab2befda4e68dddf47dd5","page":"reading-block-37c37cc1f00e4b78aa75a0720856c9a8","operation":"move","beforeSHA256":"969cb09cf5fa543cc5b83c7823cd0305960a5c9334dffe11068e5957c79bca8b","afterSHA256":"969cb09cf5fa543cc5b83c7823cd0305960a5c9334dffe11068e5957c79bca8b","reason":"Same source body in authored semantic page"},{"oldId":"b-78a438d62955ab9c60ace58e","targetId":"b-78a438d62955ab9c60ace58e","page":"reading-block-37c37cc1f00e4b78aa75a0720856c9a8","operation":"move","beforeSHA256":"9400685af2917368cc81f8d370c72ce41f2eab4f9e16cd78713c8da15f728071","afterSHA256":"9400685af2917368cc81f8d370c72ce41f2eab4f9e16cd78713c8da15f728071","reason":"Same source body in authored semantic page"},{"oldId":"b-45947afef17541b997a235f4","targetId":"b-45947afef17541b997a235f4","page":"reading-block-37c37cc1f00e4b78aa75a0720856c9a8","operation":"move","beforeSHA256":"677b8cf051199cc8fc40247a469bbb8d98f1b21ebeb6d9fe934c1c4a37cd15f2","afterSHA256":"677b8cf051199cc8fc40247a469bbb8d98f1b21ebeb6d9fe934c1c4a37cd15f2","reason":"Same source body in authored semantic page"},{"oldId":"b-e478a1e0717dc5f9817e00aa","targetId":"b-e478a1e0717dc5f9817e00aa","page":"reading-block-37c37cc1f00e4b78aa75a0720856c9a8","operation":"move","beforeSHA256":"fff3ef85987d62ae174c44e0c971ba13e1a86238ac904750972abcbe6be2b303","afterSHA256":"fff3ef85987d62ae174c44e0c971ba13e1a86238ac904750972abcbe6be2b303","reason":"Same source body in authored semantic page"},{"oldId":"b-8c42943946b25ebf0ebe6fc5","targetId":"b-8c42943946b25ebf0ebe6fc5","page":"reading-block-37c37cc1f00e4b78aa75a0720856c9a8","operation":"move","beforeSHA256":"1fc0e3a0f77748e01b540c9b8a766cf620b009cb71e1e60dde57dde6d4432171","afterSHA256":"1fc0e3a0f77748e01b540c9b8a766cf620b009cb71e1e60dde57dde6d4432171","reason":"Same source body in authored semantic page"},{"oldId":"b-a6258800c1ec1b8e0a33ab41","targetId":"b-a6258800c1ec1b8e0a33ab41","page":"reading-block-37c37cc1f00e4b78aa75a0720856c9a8","operation":"move","beforeSHA256":"4402aba07dc10ac722c853b5545b3b3c9578bd60fb03a6020826cbeb9a1e3ec2","afterSHA256":"2fbebe975cdba0ea1b2ebbcaa0f80b69b6f5b44986bd2874a376e63f1f03af8a","reason":"Same source body in authored semantic page"},{"oldId":"b-5f6f885bcc8358051cb2503b","targetId":"b-5f6f885bcc8358051cb2503b","page":"reading-block-37c37cc1f00e4b78aa75a0720856c9a8","operation":"move","beforeSHA256":"96972527ba2453bb9edcf4c3998cd5d52ac9ccf98e176990200e5480fa7a4a87","afterSHA256":"96972527ba2453bb9edcf4c3998cd5d52ac9ccf98e176990200e5480fa7a4a87","reason":"Same source body in authored semantic page"},{"oldId":"b-fc2103f48ef5c4bd6312e23f","targetId":"b-fc2103f48ef5c4bd6312e23f","page":"reading-block-31c73a940ff348a4ae5a80a773d9e114","operation":"move","beforeSHA256":"6ea25181c4cd2771dbacf9087e6571862f83df120276e77a8990bcee99691352","afterSHA256":"6ea25181c4cd2771dbacf9087e6571862f83df120276e77a8990bcee99691352","reason":"Same source body in authored semantic page"},{"oldId":"b-57cd68f2ba46bb13e82a176b","targetId":"b-57cd68f2ba46bb13e82a176b","page":"reading-block-31c73a940ff348a4ae5a80a773d9e114","operation":"move","beforeSHA256":"b8ab2b679b421e5da542d6a900feb7547e977af8af2724e8fc780b382d8f275a","afterSHA256":"b8ab2b679b421e5da542d6a900feb7547e977af8af2724e8fc780b382d8f275a","reason":"Same source body in authored semantic page"},{"oldId":"b-0456de6a606ededb744ddcfd","targetId":"b-0456de6a606ededb744ddcfd","page":"reading-block-31c73a940ff348a4ae5a80a773d9e114","operation":"move","beforeSHA256":"b2abf6cc88365d2b0cc4cd4c5d14b2ceb57b0dfb28c65854de1981e7f0367ecd","afterSHA256":"b2abf6cc88365d2b0cc4cd4c5d14b2ceb57b0dfb28c65854de1981e7f0367ecd","reason":"Same source body in authored semantic page"},{"oldId":"b-dd2d7bfca7d83d347ef2af03","targetId":"b-dd2d7bfca7d83d347ef2af03","page":"reading-block-31c73a940ff348a4ae5a80a773d9e114","operation":"move","beforeSHA256":"7bbb190fa39955ab7ff06ac3f04f951bb297c5a55131c20ccc797b5d9f75e832","afterSHA256":"7bbb190fa39955ab7ff06ac3f04f951bb297c5a55131c20ccc797b5d9f75e832","reason":"Same source body in authored semantic page"},{"oldId":"b-1858cbb3674105d3c5095112","targetId":"b-1858cbb3674105d3c5095112","page":"reading-block-31c73a940ff348a4ae5a80a773d9e114","operation":"move","beforeSHA256":"d8fdcd31c90e6cd2e4cfc8d2b9336ecebbe3d2b3c8e454eb9a94468b60203d29","afterSHA256":"d8fdcd31c90e6cd2e4cfc8d2b9336ecebbe3d2b3c8e454eb9a94468b60203d29","reason":"Same source body in authored semantic page"},{"oldId":"b-8162f305814972d34443aec6","targetId":"b-8162f305814972d34443aec6","page":"reading-block-31c73a940ff348a4ae5a80a773d9e114","operation":"move","beforeSHA256":"82501e784ec1c1a42f128baa406d84dc7b8a04583b7be1c4579de0bc12cabed6","afterSHA256":"82501e784ec1c1a42f128baa406d84dc7b8a04583b7be1c4579de0bc12cabed6","reason":"Same source body in authored semantic page"},{"oldId":"b-91b365ced71f69405edb0c06","targetId":"b-91b365ced71f69405edb0c06","page":"reading-block-67c24096691a4ebca8cea6b57a6c7785","operation":"move","beforeSHA256":"52e9d100458d4004e286dcaf3558f07e9850ca132ba028471987ddb61e9df7b4","afterSHA256":"52e9d100458d4004e286dcaf3558f07e9850ca132ba028471987ddb61e9df7b4","reason":"Same source body in authored semantic page"},{"oldId":"b-71eb91f6e620e41d99de7aa0","targetId":"b-71eb91f6e620e41d99de7aa0","page":"reading-block-67c24096691a4ebca8cea6b57a6c7785","operation":"move","beforeSHA256":"4308977886df72098c7b37a05bd30f35f8df7fcb15732b5662c33461a0ca9cc3","afterSHA256":"4308977886df72098c7b37a05bd30f35f8df7fcb15732b5662c33461a0ca9cc3","reason":"Same source body in authored semantic page"},{"oldId":"b-bdeffce030729a546df77b9f","targetId":"b-bdeffce030729a546df77b9f","page":"reading-block-67c24096691a4ebca8cea6b57a6c7785","operation":"move","beforeSHA256":"becb26a4c75b610bd2df92533dfba839432960867f9e7413e25fc88acfcc23ab","afterSHA256":"becb26a4c75b610bd2df92533dfba839432960867f9e7413e25fc88acfcc23ab","reason":"Same source body in authored semantic page"},{"oldId":"b-9409d1ac401bb083639bdc9f","targetId":"b-9409d1ac401bb083639bdc9f","page":"reading-block-67c24096691a4ebca8cea6b57a6c7785","operation":"move","beforeSHA256":"8b9ce5374de71a50bb150ff0a30e2af4bbba003b016c612641bbaafbd706b979","afterSHA256":"8b9ce5374de71a50bb150ff0a30e2af4bbba003b016c612641bbaafbd706b979","reason":"Same source body in authored semantic page"},{"oldId":"b-be1aa52c6f94ecd91313d75e","targetId":"b-be1aa52c6f94ecd91313d75e","page":"reading-block-67c24096691a4ebca8cea6b57a6c7785","operation":"move","beforeSHA256":"9df41b9bf4f1e07c32bc051b82b396df27ad0d656757a0bca471bd819dde7af6","afterSHA256":"9df41b9bf4f1e07c32bc051b82b396df27ad0d656757a0bca471bd819dde7af6","reason":"Same source body in authored semantic page"},{"oldId":"b-dcc453765d80e6e3e98e6fbf","targetId":"b-dcc453765d80e6e3e98e6fbf","page":"reading-block-21ccc165ce674b0bba08a63ab965c04d","operation":"move","beforeSHA256":"727143b87c4c5e5f6b981a6b3a6167bb1e9a154f2fca7c6967e9deb4b5a979f3","afterSHA256":"727143b87c4c5e5f6b981a6b3a6167bb1e9a154f2fca7c6967e9deb4b5a979f3","reason":"Same source body in authored semantic page"},{"oldId":"b-616823c73899700dc86053be","targetId":"b-616823c73899700dc86053be","page":"reading-block-21ccc165ce674b0bba08a63ab965c04d","operation":"rewrite","beforeSHA256":"9303e7e31ba263e2516948382187fb70367acd03087477d9e4c71f6e5712a820","afterSHA256":"03c40f396886719da29d1a635f22d715e9ff155d060469a8cd7cad97e83e189d","reason":"Same source identity with figure semantics or reading context enriched"},{"oldId":"b-e5a85d0e79f828289845f2ee","targetId":"b-e5a85d0e79f828289845f2ee","page":"reading-block-21ccc165ce674b0bba08a63ab965c04d","operation":"move","beforeSHA256":"9a7236d072298bc6b4fa0b710532689a5d7affa5db2ac506e079ff55adc0007a","afterSHA256":"59197d1bc9e100e7de550c991e47cdc7285539209f5169fa30bfd833f2775aba","reason":"Same source body in authored semantic page"},{"oldId":"b-6699a9b2807efcd1d80761bd","targetId":"b-6699a9b2807efcd1d80761bd","page":"reading-block-21ccc165ce674b0bba08a63ab965c04d","operation":"move","beforeSHA256":"7c139c03d382855aca973abe7d348f3d39eed45ff9bd1b8c44a1c0c059888c16","afterSHA256":"7c139c03d382855aca973abe7d348f3d39eed45ff9bd1b8c44a1c0c059888c16","reason":"Same source body in authored semantic page"},{"oldId":"b-af8a5f14e593b6770fbd9e88","targetId":"b-af8a5f14e593b6770fbd9e88","page":"reading-block-21ccc165ce674b0bba08a63ab965c04d","operation":"move","beforeSHA256":"0a6b79af5cf229d4c70b15beb8212564fc69ecacbe804c31d64565e4f9be500f","afterSHA256":"0a6b79af5cf229d4c70b15beb8212564fc69ecacbe804c31d64565e4f9be500f","reason":"Same source body in authored semantic page"},{"oldId":"b-3a7814df0fee0de556b4c4b6","targetId":"b-3a7814df0fee0de556b4c4b6","page":"reading-block-21ccc165ce674b0bba08a63ab965c04d","operation":"move","beforeSHA256":"6a3fa7531711d17a021bb251b5a5437c1f5377a3c494046c3abb95180c6ef11d","afterSHA256":"6a3fa7531711d17a021bb251b5a5437c1f5377a3c494046c3abb95180c6ef11d","reason":"Same source body in authored semantic page"},{"oldId":"b-464cfe464ca16d96a567ea52","targetId":"b-464cfe464ca16d96a567ea52","page":"reading-block-21ccc165ce674b0bba08a63ab965c04d","operation":"move","beforeSHA256":"4109233e56d615b4632e4a50d77c5445db8b505542df377e951fdf6b036cffa8","afterSHA256":"4109233e56d615b4632e4a50d77c5445db8b505542df377e951fdf6b036cffa8","reason":"Same source body in authored semantic page"},{"oldId":"b-91b25f52cca65906f3aecfa1","targetId":"b-91b25f52cca65906f3aecfa1","page":"reading-block-b7235416faea4815ad2db029aeb31116","operation":"move","beforeSHA256":"1fd8bbe4ccc5eedb0fe6d8a6a78303daf3653857b8d44bdebc1c16b56f7fa983","afterSHA256":"1fd8bbe4ccc5eedb0fe6d8a6a78303daf3653857b8d44bdebc1c16b56f7fa983","reason":"Same source body in authored semantic page"},{"oldId":"b-56c1c8455ca24dced0eba045","targetId":"b-56c1c8455ca24dced0eba045","page":"reading-block-b7235416faea4815ad2db029aeb31116","operation":"move","beforeSHA256":"41023f7617282539855132706dc66a26dde8c897d40532a467e98feffed3f131","afterSHA256":"41023f7617282539855132706dc66a26dde8c897d40532a467e98feffed3f131","reason":"Same source body in authored semantic page"},{"oldId":"b-b36333a9a263862e65692971","targetId":"b-b36333a9a263862e65692971","page":"reading-block-b7235416faea4815ad2db029aeb31116","operation":"move","beforeSHA256":"4a9b328ef49c14942d0905661691d8e1f9e5285bb4230f22766587debb7a4b27","afterSHA256":"4a9b328ef49c14942d0905661691d8e1f9e5285bb4230f22766587debb7a4b27","reason":"Same source body in authored semantic page"},{"oldId":"b-37133f31891fe9e92727fe72","targetId":"b-37133f31891fe9e92727fe72","page":"reading-block-b7235416faea4815ad2db029aeb31116","operation":"move","beforeSHA256":"8b58ab909ed9f08bf38e6200c02fb8fbde3015b651757fd64c3caec685954b29","afterSHA256":"8b58ab909ed9f08bf38e6200c02fb8fbde3015b651757fd64c3caec685954b29","reason":"Same source body in authored semantic page"},{"oldId":"block-4f88ba4daa8d4780975e85dbd7a0b3de--热身一种可行构造尚未学习","targetId":"b-f97f8cce91e1405c7bb5bab9","operation":"retain-source-identity"},{"oldId":"block-6e3608970afc452fb4e8068af2ceef5f--运行准备与结果身份","targetId":"b-3a5f0a8039132c9c3d675e56","operation":"retain-source-identity"},{"oldId":"block-37c37cc1f00e4b78aa75a0720856c9a8--从一张图到两个视图","targetId":"b-078ab2befda4e68dddf47dd5","operation":"retain-source-identity"},{"oldId":"block-31c73a940ff348a4ae5a80a773d9e114--h-与-z目标作用在哪一层","targetId":"b-fc2103f48ef5c4bd6312e23f","operation":"retain-source-identity"},{"oldId":"block-67c24096691a4ebca8cea6b57a6c7785--冻结评价回答另一个问题","targetId":"b-91b365ced71f69405edb0c06","operation":"retain-source-identity"},{"oldId":"block-21ccc165ce674b0bba08a63ab965c04d--已运行结果一次增益也可能是另一次损失","targetId":"b-dcc453765d80e6e3e98e6fbf","operation":"retain-source-identity"},{"oldId":"block-b7235416faea4815ad2db029aeb31116--只改一个条件再解释变化","targetId":"b-91b25f52cca65906f3aecfa1","operation":"retain-source-identity"}],"blocks":[{"id":"b-f07d0c4782778dda05eb73a6","type":"h1","scope":"document","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-f07d0c4782778dda05eb73a6","content":"# LAB 06 · 颜色干预：视图、投影与读出","sha256":"bd246dc5f03e19133279e360942589eaecbfe3e79a05b72293b14538947562b8","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-opening","title":"LAB 06 · 颜色干预：视图、投影与读出","number":1},"sectionTitle":"LAB 06 · 颜色干预：视图、投影与读出","currentQuestion":"LAB 06 · 颜色干预：视图、投影与读出","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-b591349635851f1d644c5992","prerequisites":[{"id":"b-b591349635851f1d644c5992","url":"#b-b591349635851f1d644c5992","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-b591349635851f1d644c5992","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-b591349635851f1d644c5992","content":"主线阅读与优先实验","sha256":"42cba31deccba2a350b9b23bd0ca1dcaa4c4c5cb9d35c773e1fcb89124788ccd","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-opening","title":"LAB 06 · 颜色干预：视图、投影与读出","number":1},"sectionTitle":"LAB 06 · 颜色干预：视图、投影与读出","currentQuestion":"LAB 06 · 颜色干预：视图、投影与读出","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-f07d0c4782778dda05eb73a6","nextBlock":"b-9090cd5b777b2f6c02cd55ac","prerequisites":[{"id":"b-f07d0c4782778dda05eb73a6","url":"#b-f07d0c4782778dda05eb73a6","role":"section-title"}],"relatedBlocks":[]},{"id":"b-9090cd5b777b2f6c02cd55ac","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-9090cd5b777b2f6c02cd55ac","content":"真实RGB对比训练、唯一指定增强变化、h/z形状与颜色读出","sha256":"7d0c53df1bc36d8ae47159a38d1da25d7b95cb99a23f0973fb743325017d6c63","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-opening","title":"LAB 06 · 颜色干预：视图、投影与读出","number":1},"sectionTitle":"LAB 06 · 颜色干预：视图、投影与读出","currentQuestion":"LAB 06 · 颜色干预：视图、投影与读出","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-b591349635851f1d644c5992","nextBlock":"b-8807b576c71ff150082cf435","prerequisites":[{"id":"b-f07d0c4782778dda05eb73a6","url":"#b-f07d0c4782778dda05eb73a6","role":"section-title"},{"id":"b-b591349635851f1d644c5992","url":"#b-b591349635851f1d644c5992","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-8807b576c71ff150082cf435","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-8807b576c71ff150082cf435","content":"可先阅读已有结果，再决定是否运行。重算时请核对各节记录的数据、参数、环境与日期。","sha256":"f22152fd55dcdb0090b5653d37145694fd19388d31e10226549464fe8b483578","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-opening","title":"LAB 06 · 颜色干预：视图、投影与读出","number":1},"sectionTitle":"LAB 06 · 颜色干预：视图、投影与读出","currentQuestion":"LAB 06 · 颜色干预：视图、投影与读出","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-9090cd5b777b2f6c02cd55ac","nextBlock":"b-2400771defc9641aa19e11e3","prerequisites":[{"id":"b-f07d0c4782778dda05eb73a6","url":"#b-f07d0c4782778dda05eb73a6","role":"section-title"},{"id":"b-b591349635851f1d644c5992","url":"#b-b591349635851f1d644c5992","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-2400771defc9641aa19e11e3","type":"p","scope":"block-2eace28914254f4983b40086358861b9","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-2400771defc9641aa19e11e3","content":"**学习路径：** [视图、投影头与历史字典](/course/study/contrastive-views.html)","sha256":"9412c334ba69cecafc029ab0c22814d9df928a6c4d41cd69390e96b2b55ccfe2","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-opening","title":"LAB 06 · 颜色干预：视图、投影与读出","number":1},"sectionTitle":"LAB 06 · 颜色干预：视图、投影与读出","currentQuestion":"LAB 06 · 颜色干预：视图、投影与读出","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-8807b576c71ff150082cf435","nextBlock":"b-22649033f7d5faeddceb4e54","prerequisites":[{"id":"b-f07d0c4782778dda05eb73a6","url":"#b-f07d0c4782778dda05eb73a6","role":"section-title"},{"id":"b-b591349635851f1d644c5992","url":"#b-b591349635851f1d644c5992","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-22649033f7d5faeddceb4e54","type":"p","scope":"block-2eace28914254f4983b40086358861b9","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-22649033f7d5faeddceb4e54","content":"**希望模型忽略颜色，会怎样改变它对形状与颜色的判断？**","sha256":"50c058b8d95fce98e5e519d168f67e151a75d88cab27a59c819aaca3fdc46ec9","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-opening","title":"LAB 06 · 颜色干预：视图、投影与读出","number":1},"sectionTitle":"LAB 06 · 颜色干预：视图、投影与读出","currentQuestion":"LAB 06 · 颜色干预：视图、投影与读出","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-2400771defc9641aa19e11e3","nextBlock":"b-a16170e04b90c904fc6e7f60","prerequisites":[{"id":"b-f07d0c4782778dda05eb73a6","url":"#b-f07d0c4782778dda05eb73a6","role":"section-title"},{"id":"b-b591349635851f1d644c5992","url":"#b-b591349635851f1d644c5992","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-a16170e04b90c904fc6e7f60","type":"p","scope":"block-2eace28914254f4983b40086358861b9","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-a16170e04b90c904fc6e7f60","content":"先看同一源图的保色/换色视图，写下对两项任务的预测；再看真实训练的h/z读出表。颜色增强改善了本次形状读出，同时削弱颜色读出；h并不是保证保留信息的保险箱。","sha256":"9ffdbfce8c5c542503aa22a9c8622ce91a874972b637a5d1a08c0a3821543a58","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-opening","title":"LAB 06 · 颜色干预：视图、投影与读出","number":1},"sectionTitle":"LAB 06 · 颜色干预：视图、投影与读出","currentQuestion":"LAB 06 · 颜色干预：视图、投影与读出","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-22649033f7d5faeddceb4e54","nextBlock":"b-3b9d0ff1652d0b08cd592dc5","prerequisites":[{"id":"b-f07d0c4782778dda05eb73a6","url":"#b-f07d0c4782778dda05eb73a6","role":"section-title"},{"id":"b-b591349635851f1d644c5992","url":"#b-b591349635851f1d644c5992","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-3b9d0ff1652d0b08cd592dc5","type":"p","scope":"block-2eace28914254f4983b40086358861b9","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-3b9d0ff1652d0b08cd592dc5","content":"本册的重点代码是`views`、`info_nce`和冻结评价；开头二维向量只是可行构造。模型、数据和完整训练均保留，运行从新内核顺序开始。表格与图标明已有本地结果，后文另列旧云端复核，不合并成同一次测量。","sha256":"d08d0b0005a7177f54b35340307f4aaa4d9f40f0826bd8b50bdddf88d3eb7a79","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-opening","title":"LAB 06 · 颜色干预：视图、投影与读出","number":1},"sectionTitle":"LAB 06 · 颜色干预：视图、投影与读出","currentQuestion":"LAB 06 · 颜色干预：视图、投影与读出","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-a16170e04b90c904fc6e7f60","nextBlock":"b-4e246aeda5a78b23135402cc","prerequisites":[{"id":"b-f07d0c4782778dda05eb73a6","url":"#b-f07d0c4782778dda05eb73a6","role":"section-title"},{"id":"b-b591349635851f1d644c5992","url":"#b-b591349635851f1d644c5992","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-4e246aeda5a78b23135402cc","type":"p","scope":"block-2eace28914254f4983b40086358861b9","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-4e246aeda5a78b23135402cc","content":"产出一张两行对照：预测的变化、观察到的变化，以及你认为可继续检验的解释。[P13](/course/pages/l3-r2-p13.html)和[对应证据段落](/course/blocks/color-ablation-existing-image-evidence.html)与本册同题。只有想检查候选从哪里来，再接[LAB 07的历史字典](https://deepnote.com/project/38755e4e-23f6-4f5f-8c68-8a2e4114b1c1/notebook/0d1b8f6fbf6a476c93ffcc169f2ec1f4)。","sha256":"d3a9e1a09a07e66e69b59cc7bf9e6fc114eee794728d02d4595951ea921735b0","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-opening","title":"LAB 06 · 颜色干预：视图、投影与读出","number":1},"sectionTitle":"LAB 06 · 颜色干预：视图、投影与读出","currentQuestion":"LAB 06 · 颜色干预：视图、投影与读出","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-3b9d0ff1652d0b08cd592dc5","nextBlock":null,"prerequisites":[{"id":"b-f07d0c4782778dda05eb73a6","url":"#b-f07d0c4782778dda05eb73a6","role":"section-title"},{"id":"b-b591349635851f1d644c5992","url":"#b-b591349635851f1d644c5992","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-f97f8cce91e1405c7bb5bab9","type":"h2","scope":"block-4f88ba4daa8d4780975e85dbd7a0b3de","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-f97f8cce91e1405c7bb5bab9","content":"## 热身：一种可行构造，尚未学习","sha256":"3857a264d4c4da09879a56ccab674cc307baa172ff59255ca1d92e3f6a458f34","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-4f88ba4daa8d4780975e85dbd7a0b3de","title":"热身：一种可行构造，尚未学习","number":2},"sectionTitle":"热身：一种可行构造，尚未学习","currentQuestion":"热身：一种可行构造，尚未学习","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-e07f9bc1dda675931f6952ca","prerequisites":[{"id":"b-e07f9bc1dda675931f6952ca","url":"#b-e07f9bc1dda675931f6952ca","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-e07f9bc1dda675931f6952ca","type":"p","scope":"block-4f88ba4daa8d4780975e85dbd7a0b3de","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-e07f9bc1dda675931f6952ca","content":"四个向量表示两种颜色和两种亮度。令 z 等于两个通道之和，那么红与蓝可以得到相同 z。这个例子只证明“投影可以丢颜色”，没有证明训练必然如此，更没有证明 h 永远保留颜色。","sha256":"17abbe4a2292ebfccea3656526f2cb6223c636cbe4615c118c316b1844498c4d","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-4f88ba4daa8d4780975e85dbd7a0b3de","title":"热身：一种可行构造，尚未学习","number":2},"sectionTitle":"热身：一种可行构造，尚未学习","currentQuestion":"热身：一种可行构造，尚未学习","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-f97f8cce91e1405c7bb5bab9","nextBlock":"b-0e61e50a240ce0935af5452e","prerequisites":[{"id":"b-f97f8cce91e1405c7bb5bab9","url":"#b-f97f8cce91e1405c7bb5bab9","role":"section-title"}],"relatedBlocks":[]},{"id":"b-0e61e50a240ce0935af5452e","type":"pre","scope":"block-8786227a02484ba7af94410dd4963867","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-0e61e50a240ce0935af5452e","content":"```\nimport os, tempfile\nLAB_WORKDIR = tempfile.mkdtemp(prefix='lecture03-')\nos.chdir(LAB_WORKDIR)\nprint('Ephemeral experiment workspace ready')\nimport numpy as np\nh=np.array([[1.,0.],[.7,0.],[0.,1.],[0.,.7]])\ny=np.array([0,0,1,1]);z=h.sum(1,keepdims=True)\nprint('h shape',h.shape,'z shape',z.shape)\nprint('h color readout',np.argmax(h,1).tolist(),'z',z.ravel().tolist())\nprint('This is a hand-constructed projection, not learned features.')\n```","sha256":"44b8499814a44e579c1e2ccf0edec98f706d5767cee4bed065f0bf0feb32cdd0","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-4f88ba4daa8d4780975e85dbd7a0b3de","title":"热身：一种可行构造，尚未学习","number":2},"sectionTitle":"热身：一种可行构造，尚未学习","currentQuestion":"热身：一种可行构造，尚未学习","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-e07f9bc1dda675931f6952ca","nextBlock":null,"prerequisites":[{"id":"b-f97f8cce91e1405c7bb5bab9","url":"#b-f97f8cce91e1405c7bb5bab9","role":"section-title"},{"id":"b-e07f9bc1dda675931f6952ca","url":"#b-e07f9bc1dda675931f6952ca","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-3a5f0a8039132c9c3d675e56","type":"h2","scope":"block-6e3608970afc452fb4e8068af2ceef5f","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-3a5f0a8039132c9c3d675e56","content":"## 运行准备与结果身份","sha256":"9bbc7527a59bb35d5da5d51d5f5bc342082de91f94066bfa434ed27e431f230a","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-6e3608970afc452fb4e8068af2ceef5f","title":"运行准备与结果身份","number":3},"sectionTitle":"运行准备与结果身份","currentQuestion":"运行准备与结果身份","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-35c035df019869d83e0cf30c","prerequisites":[{"id":"b-35c035df019869d83e0cf30c","url":"#b-35c035df019869d83e0cf30c","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-35c035df019869d83e0cf30c","type":"p","scope":"block-6e3608970afc452fb4e8068af2ceef5f","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-35c035df019869d83e0cf30c","content":"本册包含全部生成数据、模型、损失、优化与评价代码。按顺序在**新内核**运行；不读另一册的变量，不需要下载图像或预训练权重。依赖 Python 3.12、NumPy、matplotlib、scikit-learn 和 CPU PyTorch。本次实际版本见输出 JSON；若环境缺少 PyTorch，先运行 `python -m pip install torch==2.14.0 --index-url https://download.pytorch.org/whl/cpu`，再启动内核。NumPy、matplotlib、scikit-learn 可用 `python -m pip install numpy matplotlib scikit-learn` 安装。","sha256":"7c7112f4f7442896ffc602e4bca9c95cb6afe323f539ecace8877e95dc68b391","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-6e3608970afc452fb4e8068af2ceef5f","title":"运行准备与结果身份","number":3},"sectionTitle":"运行准备与结果身份","currentQuestion":"运行准备与结果身份","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-3a5f0a8039132c9c3d675e56","nextBlock":"b-1d21e600bda06fa74c362677","prerequisites":[{"id":"b-3a5f0a8039132c9c3d675e56","url":"#b-3a5f0a8039132c9c3d675e56","role":"section-title"}],"relatedBlocks":[]},{"id":"b-1d21e600bda06fa74c362677","type":"p","scope":"block-6e3608970afc452fb4e8068af2ceef5f","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-1d21e600bda06fa74c362677","content":"下方表格和静态图来自 **2026-09-22 本地 CPU 完整训练**；它们不是原来的数值热身输出，也不代表 Deepnote 云端已重跑。运行本册会另建 `lab06-notebook-output`，保存 inputs.npz、config.json、权重、图与 results.json。CPU 时间受机器负载影响；本次每册约 10–25 秒，不能当作跨设备速度基准。单种子、小任务的结果用来检验路径和对照，不作方法排名。","sha256":"0d54911358d4ef6855a1b6ce3af7606e8f9b224fb59551cdc322abb7e718e7d0","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-6e3608970afc452fb4e8068af2ceef5f","title":"运行准备与结果身份","number":3},"sectionTitle":"运行准备与结果身份","currentQuestion":"运行准备与结果身份","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-35c035df019869d83e0cf30c","nextBlock":"b-77ea8f01b45153e2a0775fe5","prerequisites":[{"id":"b-3a5f0a8039132c9c3d675e56","url":"#b-3a5f0a8039132c9c3d675e56","role":"section-title"},{"id":"b-35c035df019869d83e0cf30c","url":"#b-35c035df019869d83e0cf30c","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-77ea8f01b45153e2a0775fe5","type":"pre","scope":"block-e9570c227f07476e8290b9418319a6f2","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-77ea8f01b45153e2a0775fe5","content":"```\n\"\"\"CPU image contrastive experiment. No class/color label enters pretraining.\"\"\"\nfrom pathlib import Path\nimport copy, hashlib, json, os, platform, time\nimport numpy as np\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.pipeline import make_pipeline\nfrom sklearn.preprocessing import StandardScaler\nimport matplotlib\nmatplotlib.use('Agg')\nimport matplotlib.pyplot as plt\n\ntorch.set_num_threads(2)\nSEED=20260922\n\nSOURCE_SHA256='09bbb32bb5502db3535d89efec2045ffcd85c249b49f622390f12875060845d4'\nprint(\"source\",SOURCE_SHA256,\"torch\",torch.__version__)\n```","sha256":"1c09502a0af88ecc992c812ee8a92c14817a2fea125b3fe51e4382a22823aad0","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-6e3608970afc452fb4e8068af2ceef5f","title":"运行准备与结果身份","number":3},"sectionTitle":"运行准备与结果身份","currentQuestion":"运行准备与结果身份","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-1d21e600bda06fa74c362677","nextBlock":null,"prerequisites":[{"id":"b-3a5f0a8039132c9c3d675e56","url":"#b-3a5f0a8039132c9c3d675e56","role":"section-title"},{"id":"b-35c035df019869d83e0cf30c","url":"#b-35c035df019869d83e0cf30c","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-078ab2befda4e68dddf47dd5","type":"h2","scope":"block-37c37cc1f00e4b78aa75a0720856c9a8","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-078ab2befda4e68dddf47dd5","content":"## 从一张图到两个视图","sha256":"969cb09cf5fa543cc5b83c7823cd0305960a5c9334dffe11068e5957c79bca8b","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-37c37cc1f00e4b78aa75a0720856c9a8","title":"从一张图到两个视图","number":4},"sectionTitle":"从一张图到两个视图","currentQuestion":"从一张图到两个视图","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-78a438d62955ab9c60ace58e","prerequisites":[{"id":"b-78a438d62955ab9c60ace58e","url":"#b-78a438d62955ab9c60ace58e","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-78a438d62955ab9c60ace58e","type":"p","scope":"block-37c37cc1f00e4b78aa75a0720856c9a8","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-78a438d62955ab9c60ace58e","content":"生成 840 张 16×16 RGB 图，600 张训练、240 张保留，每个“形状×颜色”组合各 100/40 张。位置、尺度、强度和背景噪声独立变化，源图 ID 在两侧不重叠；先分源图，再在线产生增强，不能把同一源图的两个增强分到训练和评价。","sha256":"9400685af2917368cc81f8d370c72ce41f2eab4f9e16cd78713c8da15f728071","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-37c37cc1f00e4b78aa75a0720856c9a8","title":"从一张图到两个视图","number":4},"sectionTitle":"从一张图到两个视图","currentQuestion":"从一张图到两个视图","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-078ab2befda4e68dddf47dd5","nextBlock":"b-45947afef17541b997a235f4","prerequisites":[{"id":"b-078ab2befda4e68dddf47dd5","url":"#b-078ab2befda4e68dddf47dd5","role":"section-title"}],"relatedBlocks":[]},{"id":"b-45947afef17541b997a235f4","type":"p","scope":"block-37c37cc1f00e4b78aa75a0720856c9a8","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-45947afef17541b997a235f4","content":"两个条件共用数据、初始化、批顺序、优化器和随机数流。共同增强是每图平移 ±1 像素、亮度乘以 0.8–1.2、添加标准差 0.025 的噪声。`swap-hue` 额外以 50% 概率独立交换每个视图的 R/B 通道；`keep-hue` 不交换。相同随机数仍被消耗，所以不是意外改变了其他增强。","sha256":"677b8cf051199cc8fc40247a469bbb8d98f1b21ebeb6d9fe934c1c4a37cd15f2","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-37c37cc1f00e4b78aa75a0720856c9a8","title":"从一张图到两个视图","number":4},"sectionTitle":"从一张图到两个视图","currentQuestion":"从一张图到两个视图","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-78a438d62955ab9c60ace58e","nextBlock":"b-e478a1e0717dc5f9817e00aa","prerequisites":[{"id":"b-078ab2befda4e68dddf47dd5","url":"#b-078ab2befda4e68dddf47dd5","role":"section-title"},{"id":"b-78a438d62955ab9c60ace58e","url":"#b-78a438d62955ab9c60ace58e","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-e478a1e0717dc5f9817e00aa","type":"p","scope":"block-37c37cc1f00e4b78aa75a0720856c9a8","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-e478a1e0717dc5f9817e00aa","content":"生成器知道标签，以便定义任务和分层采样；**预训练函数只接收图像和训练 ID**，没有读取形状或颜色标签。","sha256":"fff3ef85987d62ae174c44e0c971ba13e1a86238ac904750972abcbe6be2b303","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-37c37cc1f00e4b78aa75a0720856c9a8","title":"从一张图到两个视图","number":4},"sectionTitle":"从一张图到两个视图","currentQuestion":"从一张图到两个视图","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-45947afef17541b997a235f4","nextBlock":"b-8c42943946b25ebf0ebe6fc5","prerequisites":[{"id":"b-078ab2befda4e68dddf47dd5","url":"#b-078ab2befda4e68dddf47dd5","role":"section-title"},{"id":"b-78a438d62955ab9c60ace58e","url":"#b-78a438d62955ab9c60ace58e","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-8c42943946b25ebf0ebe6fc5","type":"pre","scope":"block-c62130014946402d998cecf03bd50f05","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-8c42943946b25ebf0ebe6fc5","content":"```\ndef make_data(seed=SEED):\n    rng=np.random.default_rng(seed)\n    yy,xx=np.mgrid[:16,:16]\n    images=[]; shape=[]; color=[]; split=[]\n    # Stratified before view construction. One independently generated source per ID.\n    for s in range(3):\n        for c in range(2):\n            for i in range(140):\n                cx,cy=rng.uniform(6,10,2); r=rng.uniform(3.0,4.7)\n                dx,dy=xx-cx,yy-cy\n                if s==0: mask=dx*dx+dy*dy<=r*r\n                elif s==1: mask=np.maximum(abs(dx),abs(dy))<=r\n                else: mask=abs(dx)+abs(dy)<=r*1.35\n                # Red and blue have equal channel sums: grayscale erases hue by design.\n                rgb=np.array([.9,.15,.15] if c==0 else [.15,.15,.9])\n                bg=rng.uniform(.015,.075,(16,16,1))\n                im=np.where(mask[...,None],rgb*rng.uniform(.8,1),bg)\n                im+=rng.normal(0,.012,im.shape)\n                images.append(np.clip(im,0,1).transpose(2,0,1))\n                shape.append(s); color.append(c); split.append(0 if i<100 else 1)\n    x=np.asarray(images,dtype='float32'); split=np.asarray(split)\n    ids=np.arange(len(x)); train=ids[split==0]; test=ids[split==1]\n    assert set(train).isdisjoint(test)\n    assert len({hashlib.sha256(v.tobytes()).hexdigest() for v in x})==len(x)\n    return torch.from_numpy(x),np.asarray(shape),np.asarray(color),train,test\n\ndef views(x, destroy_color=False):\n    # Independent transforms of each source; no labels/scene attributes are read.\n    a=x.clone(); n=len(a)\n    shifts=torch.randint(-1,2,(n,2))\n    for i,(dy,dx) in enumerate(shifts.tolist()):\n        a[i]=torch.roll(a[i],(dy,dx),(-2,-1))\n    a=a*torch.empty(n,1,1,1).uniform_(.8,1.2)\n    a=a+torch.randn_like(a)*.025\n    # The ablation changes only the hue swap. Every run consumes this RNG draw.\n    swap=torch.rand(n)<.5\n    if destroy_color: a[swap]=a[swap][:,[2,1,0]]\n    return a.clamp(0,1)\n```","sha256":"1fc0e3a0f77748e01b540c9b8a766cf620b009cb71e1e60dde57dde6d4432171","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-37c37cc1f00e4b78aa75a0720856c9a8","title":"从一张图到两个视图","number":4},"sectionTitle":"从一张图到两个视图","currentQuestion":"从一张图到两个视图","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-e478a1e0717dc5f9817e00aa","nextBlock":"b-a6258800c1ec1b8e0a33ab41","prerequisites":[{"id":"b-078ab2befda4e68dddf47dd5","url":"#b-078ab2befda4e68dddf47dd5","role":"section-title"},{"id":"b-78a438d62955ab9c60ace58e","url":"#b-78a438d62955ab9c60ace58e","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-a6258800c1ec1b8e0a33ab41","type":"p","scope":"block-e0a9fbc0b02045eeb7400e558ac13af7","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-a6258800c1ec1b8e0a33ab41","content":"![固定源图与两种增强视图](/assets/display/b25869e5c4c1bee5091932b6.webp)","sha256":"2fbebe975cdba0ea1b2ebbcaa0f80b69b6f5b44986bd2874a376e63f1f03af8a","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-37c37cc1f00e4b78aa75a0720856c9a8","title":"从一张图到两个视图","number":4},"sectionTitle":"从一张图到两个视图","currentQuestion":"从一张图到两个视图","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-8c42943946b25ebf0ebe6fc5","nextBlock":"b-5f6f885bcc8358051cb2503b","prerequisites":[{"id":"b-078ab2befda4e68dddf47dd5","url":"#b-078ab2befda4e68dddf47dd5","role":"section-title"},{"id":"b-78a438d62955ab9c60ace58e","url":"#b-78a438d62955ab9c60ace58e","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-5f6f885bcc8358051cb2503b","type":"p","scope":"block-e0a9fbc0b02045eeb7400e558ac13af7","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-5f6f885bcc8358051cb2503b","content":"图中每列来自同一源图；最下行可以改变红蓝，但形状轮廓不变。正式训练每张源图产生两个独立视图。图是已运行基准的样例，不是为了展示目标效果而绘制的模型输出。","sha256":"96972527ba2453bb9edcf4c3998cd5d52ac9ccf98e176990200e5480fa7a4a87","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-37c37cc1f00e4b78aa75a0720856c9a8","title":"从一张图到两个视图","number":4},"sectionTitle":"从一张图到两个视图","currentQuestion":"从一张图到两个视图","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-a6258800c1ec1b8e0a33ab41","nextBlock":null,"prerequisites":[{"id":"b-078ab2befda4e68dddf47dd5","url":"#b-078ab2befda4e68dddf47dd5","role":"section-title"},{"id":"b-78a438d62955ab9c60ace58e","url":"#b-78a438d62955ab9c60ace58e","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-fc2103f48ef5c4bd6312e23f","type":"h2","scope":"block-31c73a940ff348a4ae5a80a773d9e114","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-fc2103f48ef5c4bd6312e23f","content":"## h 与 z：目标作用在哪一层？","sha256":"6ea25181c4cd2771dbacf9087e6571862f83df120276e77a8990bcee99691352","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-31c73a940ff348a4ae5a80a773d9e114","title":"h 与 z：目标作用在哪一层？","number":5},"sectionTitle":"h 与 z：目标作用在哪一层？","currentQuestion":"h 与 z：目标作用在哪一层？","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-57cd68f2ba46bb13e82a176b","prerequisites":[{"id":"b-57cd68f2ba46bb13e82a176b","url":"#b-57cd68f2ba46bb13e82a176b","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-57cd68f2ba46bb13e82a176b","type":"p","scope":"block-31c73a940ff348a4ae5a80a773d9e114","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-57cd68f2ba46bb13e82a176b","content":"编码器 f 的三层卷积将 B×3×16×16 变成 B×24×4×4，再线性读出 h∈R⁴⁸。投影头 g 是 48→48→24 的两层 MLP，中间有 ReLU。损失作用于归一化的 z=g(h)，冻结评价分别读取 h 和 z。","sha256":"b8ab2b679b421e5da542d6a900feb7547e977af8af2724e8fc780b382d8f275a","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-31c73a940ff348a4ae5a80a773d9e114","title":"h 与 z：目标作用在哪一层？","number":5},"sectionTitle":"h 与 z：目标作用在哪一层？","currentQuestion":"h 与 z：目标作用在哪一层？","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-fc2103f48ef5c4bd6312e23f","nextBlock":"b-0456de6a606ededb744ddcfd","prerequisites":[{"id":"b-fc2103f48ef5c4bd6312e23f","url":"#b-fc2103f48ef5c4bd6312e23f","role":"section-title"}],"relatedBlocks":[]},{"id":"b-0456de6a606ededb744ddcfd","type":"p","scope":"block-31c73a940ff348a4ae5a80a773d9e114","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-0456de6a606ededb744ddcfd","content":"每批 N=60 个源图产生 2N 个向量。对第 i 个视图，另一个同源视图 j 是唯一正例：","sha256":"b2abf6cc88365d2b0cc4cd4c5d14b2ceb57b0dfb28c65854de1981e7f0367ecd","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-31c73a940ff348a4ae5a80a773d9e114","title":"h 与 z：目标作用在哪一层？","number":5},"sectionTitle":"h 与 z：目标作用在哪一层？","currentQuestion":"h 与 z：目标作用在哪一层？","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-57cd68f2ba46bb13e82a176b","nextBlock":"b-dd2d7bfca7d83d347ef2af03","prerequisites":[{"id":"b-fc2103f48ef5c4bd6312e23f","url":"#b-fc2103f48ef5c4bd6312e23f","role":"section-title"},{"id":"b-57cd68f2ba46bb13e82a176b","url":"#b-57cd68f2ba46bb13e82a176b","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-dd2d7bfca7d83d347ef2af03","type":"p","scope":"block-31c73a940ff348a4ae5a80a773d9e114","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-dd2d7bfca7d83d347ef2af03","content":"$\\ell_i=-\\log\\frac{\\exp(\\mathrm{sim}(z_i,z_j)/\\tau)}{\\sum_{k\\ne i}\\exp(\\mathrm{sim}(z_i,z_k)/\\tau)},\\qquad \\tau=0.2.$","sha256":"7bbb190fa39955ab7ff06ac3f04f951bb297c5a55131c20ccc797b5d9f75e832","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-31c73a940ff348a4ae5a80a773d9e114","title":"h 与 z：目标作用在哪一层？","number":5},"sectionTitle":"h 与 z：目标作用在哪一层？","currentQuestion":"h 与 z：目标作用在哪一层？","sourceSlides":[],"knowledgeBlock":null,"formulas":[{"latex":"\\ell_i=-\\log\\frac{\\exp(\\mathrm{sim}(z_i,z_j)/\\tau)}{\\sum_{k\\ne i}\\exp(\\mathrm{sim}(z_i,z_k)/\\tau)},\\qquad \\tau=0.2.","definitionContext":"h 与 z：目标作用在哪一层？"}],"previousBlock":"b-0456de6a606ededb744ddcfd","nextBlock":"b-1858cbb3674105d3c5095112","prerequisites":[{"id":"b-fc2103f48ef5c4bd6312e23f","url":"#b-fc2103f48ef5c4bd6312e23f","role":"section-title"},{"id":"b-57cd68f2ba46bb13e82a176b","url":"#b-57cd68f2ba46bb13e82a176b","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-1858cbb3674105d3c5095112","type":"p","scope":"block-31c73a940ff348a4ae5a80a773d9e114","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-1858cbb3674105d3c5095112","content":"分母去掉自己，包含正例和其他源图的两视图；对 120 个锚点平均。其他源图可能恰好也是红圆，仍被当作负例：这是按源图身份定义的实例目标，未必完全符合形状类别。梯度从 z 经过投影头返回卷积编码器，所以投影头不构成阻止 h 丢信息的隔离墙。","sha256":"d8fdcd31c90e6cd2e4cfc8d2b9336ecebbe3d2b3c8e454eb9a94468b60203d29","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-31c73a940ff348a4ae5a80a773d9e114","title":"h 与 z：目标作用在哪一层？","number":5},"sectionTitle":"h 与 z：目标作用在哪一层？","currentQuestion":"h 与 z：目标作用在哪一层？","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-dd2d7bfca7d83d347ef2af03","nextBlock":"b-8162f305814972d34443aec6","prerequisites":[{"id":"b-fc2103f48ef5c4bd6312e23f","url":"#b-fc2103f48ef5c4bd6312e23f","role":"section-title"},{"id":"b-57cd68f2ba46bb13e82a176b","url":"#b-57cd68f2ba46bb13e82a176b","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-8162f305814972d34443aec6","type":"pre","scope":"block-7a1ffe32994142c180210d4ed48e445f","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-8162f305814972d34443aec6","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":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-31c73a940ff348a4ae5a80a773d9e114","title":"h 与 z：目标作用在哪一层？","number":5},"sectionTitle":"h 与 z：目标作用在哪一层？","currentQuestion":"h 与 z：目标作用在哪一层？","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-1858cbb3674105d3c5095112","nextBlock":null,"prerequisites":[{"id":"b-fc2103f48ef5c4bd6312e23f","url":"#b-fc2103f48ef5c4bd6312e23f","role":"section-title"},{"id":"b-57cd68f2ba46bb13e82a176b","url":"#b-57cd68f2ba46bb13e82a176b","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-91b365ced71f69405edb0c06","type":"h2","scope":"block-67c24096691a4ebca8cea6b57a6c7785","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-91b365ced71f69405edb0c06","content":"## 冻结评价回答另一个问题","sha256":"52e9d100458d4004e286dcaf3558f07e9850ca132ba028471987ddb61e9df7b4","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-67c24096691a4ebca8cea6b57a6c7785","title":"冻结评价回答另一个问题","number":6},"sectionTitle":"冻结评价回答另一个问题","currentQuestion":"冻结评价回答另一个问题","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-71eb91f6e620e41d99de7aa0","prerequisites":[{"id":"b-71eb91f6e620e41d99de7aa0","url":"#b-71eb91f6e620e41d99de7aa0","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-71eb91f6e620e41d99de7aa0","type":"p","scope":"block-67c24096691a4ebca8cea6b57a6c7785","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-71eb91f6e620e41d99de7aa0","content":"训练完成后对未增强的图像提取特征，编码器不再更新。h、z 先各自 L2 归一化；余弦 5-NN 只把 600 张训练图及其标签作为参考库，在 240 张保留图上预测。另做线性读出：标准化参数和 LogisticRegression 都只拟合训练特征，C=1 固定；没有用保留集选 epoch、k 或正则化。","sha256":"4308977886df72098c7b37a05bd30f35f8df7fcb15732b5662c33461a0ca9cc3","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-67c24096691a4ebca8cea6b57a6c7785","title":"冻结评价回答另一个问题","number":6},"sectionTitle":"冻结评价回答另一个问题","currentQuestion":"冻结评价回答另一个问题","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-91b365ced71f69405edb0c06","nextBlock":"b-bdeffce030729a546df77b9f","prerequisites":[{"id":"b-91b365ced71f69405edb0c06","url":"#b-91b365ced71f69405edb0c06","role":"section-title"}],"relatedBlocks":[]},{"id":"b-bdeffce030729a546df77b9f","type":"p","scope":"block-67c24096691a4ebca8cea6b57a6c7785","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-bdeffce030729a546df77b9f","content":"随机基线是训练前完全相同的网络权重。随机卷积也会保留像素、边缘和颜色信息，因此机会水平不是唯一合理基线。固定输入只交换 R/B 后的余弦相似度是另一项干预；较高相似度本身不能证明颜色不可读，必须和读出共同看。","sha256":"becb26a4c75b610bd2df92533dfba839432960867f9e7413e25fc88acfcc23ab","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-67c24096691a4ebca8cea6b57a6c7785","title":"冻结评价回答另一个问题","number":6},"sectionTitle":"冻结评价回答另一个问题","currentQuestion":"冻结评价回答另一个问题","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-71eb91f6e620e41d99de7aa0","nextBlock":"b-9409d1ac401bb083639bdc9f","prerequisites":[{"id":"b-91b365ced71f69405edb0c06","url":"#b-91b365ced71f69405edb0c06","role":"section-title"},{"id":"b-71eb91f6e620e41d99de7aa0","url":"#b-71eb91f6e620e41d99de7aa0","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-9409d1ac401bb083639bdc9f","type":"pre","scope":"block-cdcacb55364648fe84ae33c18ee97f1a","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-9409d1ac401bb083639bdc9f","content":"```\ndef evaluate(model,x,ys,yc,train,test):\n    model.eval()\n    with torch.no_grad(): h,z=model(x)\n    scores={}\n    for space,features in [('h',h),('z',z)]:\n        a=F.normalize(features,dim=1).numpy()\n        for target,y in [('shape',ys),('color',yc)]:\n            knn=KNeighborsClassifier(n_neighbors=5,metric='cosine')\n            knn.fit(a[train],y[train])\n            # Standardization and classifier fit use TRAIN only; test used once for reporting.\n            linear=make_pipeline(StandardScaler(),LogisticRegression(C=1,max_iter=1000))\n            linear.fit(a[train],y[train])\n            scores[f'{space}_{target}_knn']=float(knn.score(a[test],y[test]))\n            scores[f'{space}_{target}_linear']=float(linear.score(a[test],y[test]))\n    with torch.no_grad():\n        # Counterfactual hue swap only: same geometry and pixels, channels exchanged.\n        ah,az=model(x[test][:,[2,1,0]])\n        for space,original,other in [('h',h[test],ah),('z',z[test],az)]:\n            scores[f'{space}_hue_swap_cosine']=float(F.cosine_similarity(original,other).mean())\n    return scores\n\ndef moco_warmup():\n    q=np.array([1.,0.]); keys=np.array([[.8,.2],[0.,1.],[-1.,0.]])\n    keys/=np.linalg.norm(keys,axis=1,keepdims=True)\n    probs={}\n    for T in [.1,.5]:\n        s=keys@q/T; p=np.exp(s-s.max());p/=p.sum();probs[str(T)]=p.tolist()\n    queue=['a','b','c','d']; queue=(queue+['e','f'])[-4:]\n    ema=.9*np.array([0.,2.])+.1*np.array([2.,4.])\n    assert queue==['c','d','e','f']; assert np.allclose(ema,[.2,2.2])\n    return {'temperature_probabilities':probs,'FIFO':queue,'EMA':ema.tolist()}\n\ndef train_moco(initial,x,train,epochs=15):\n    # Small genuine image implementation: query grads, detached EMA keys, FIFO negatives.\n    torch.manual_seed(SEED+2)\n    query=copy.deepcopy(initial); key=copy.deepcopy(initial)\n    for p in key.parameters(): p.requires_grad=False\n    opt=torch.optim.Adam(query.parameters(),lr=.002)\n    queue=torch.empty((0,24)); queue_ids=torch.empty(0,dtype=torch.long)\n    history=[]; trace=[]; m=.95; capacity=240\n    before=next(query.encoder.parameters()).detach().clone()\n    for epoch in range(epochs):\n        losses=[]\n        for ids in torch.as_tensor(train)[torch.randperm(len(train))].split(60):\n            a,b=views(x[ids]),views(x[ids])\n            q=F.normalize(query(a)[1],dim=1)\n            with torch.no_grad():\n                for pk,pq in zip(key.parameters(),query.parameters()):pk.mul_(m).add_(pq,alpha=1-m)\n                k=F.normalize(key(b)[1],dim=1)\n            # Warmup uses detached current keys. Later batches use a real FIFO dictionary.\n            if not len(queue):\n                logits=q@k.T/.2; labels=torch.arange(len(ids))\n                loss=F.cross_entropy(logits,labels)\n            else:\n                positive=(q*k).sum(1,keepdim=True)\n                negative=q@queue.T\n                # A source already in queue is NOT treated as its own negative.\n                negative=negative.masked_fill(ids[:,None]==queue_ids[None,:],-1e9)\n                logits=torch.cat([positive,negative],dim=1)/.2\n                loss=F.cross_entropy(logits,torch.zeros(len(ids),dtype=torch.long))\n            opt.zero_grad();loss.backward();opt.step()\n            with torch.no_grad():\n                queue=torch.cat([queue,k])[-capacity:];queue_ids=torch.cat([queue_ids,ids])[-capacity:]\n            losses.append(float(loss.detach()))\n            if len(trace)<5:trace.append({'step':len(trace),'queue_size':len(queue),'first_source_id':int(queue_ids[0]),'last_source_id':int(queue_ids[-1])})\n        history.append(float(np.mean(losses)))\n    assert all(p.grad is None for p in key.parameters())\n    return query,key,queue,queue_ids,history,trace,float((next(query.encoder.parameters()).detach()-before).norm())\n\ndef plot_results(out,x,initial,models,results,histories):\n    fig,ax=plt.subplots(3,6,figsize=(12,6))\n    ids=[0,100,140,280,420,700]\n    torch.manual_seed(SEED+6)\n    for j,i in enumerate(ids):\n        ax[0,j].imshow(x[i].permute(1,2,0));ax[0,j].set_title(f'source {i}')\n        paired_state=torch.get_rng_state()\n        for row,erase in [(1,False),(2,True)]:\n            torch.set_rng_state(paired_state)\n            ax[row,j].imshow(views(x[i:i+1],erase)[0].permute(1,2,0))\n    for row,label in enumerate(['source','view: hue kept','view: hue can swap']):ax[row,0].set_ylabel(label)\n    for a in ax.flat:a.set_xticks([]);a.set_yticks([])\n    fig.tight_layout();fig.savefig(out/'views.png',dpi=140);plt.close(fig)\n    fig,axes=plt.subplots(1,3,figsize=(14,4))\n    for name,hist in histories.items():axes[0].plot(np.arange(1,len(hist)+1),hist,label=name)\n    axes[0].set(xlabel='epoch',ylabel='InfoNCE (batch mean)',title='Training objective');axes[0].legend(fontsize=8)\n    names=list(results)\n    for ax,task in zip(axes[1:],['shape','color']):\n        pos=np.arange(len(names)); width=.34\n        for off,space in [(-width/2,'h'),(width/2,'z')]:\n            ax.bar(pos+off,[results[n][f'{space}_{task}_knn'] for n in names],width,label=space)\n        ax.set_xticks(pos,names,rotation=20);ax.set_ylim(0,1.05);ax.set_title(f'Frozen cosine 5-NN: {task}')\n        ax.set_ylabel('held-out accuracy');ax.legend()\n    fig.tight_layout();fig.savefig(out/'training-and-probes.png',dpi=140);plt.close(fig)\n\ndef run_contrastive(out_dir='lab06-output',mode='color'):\n    started=time.time();out=Path(out_dir);out.mkdir(parents=True,exist_ok=True)\n    torch.manual_seed(SEED)\n    x,ys,yc,train,test=make_data()\n    np.savez_compressed(out/'inputs.npz',images=x.numpy(),shape=ys,color=yc,train_ids=train,test_ids=test)\n    initial=ContrastiveModel(); torch.save(initial.state_dict(),out/'random-init.pt')\n    results={'random':evaluate(initial,x,ys,yc,train,test)};histories={};models={};deltas={}\n    if mode=='color':\n        for name,erase in [('keep-hue',False),('swap-hue',True)]:\n            model,hist,delta=train_simclr(initial,x,train,erase)\n            results[name]=evaluate(model,x,ys,yc,train,test);histories[name]=hist;models[name]=model;deltas[name]=delta\n            torch.save(model.state_dict(),out/f'{name}.pt')\n    else:\n        model,hist,delta=train_simclr(initial,x,train,False)\n        results['simclr']=evaluate(model,x,ys,yc,train,test);histories['simclr']=hist;models['simclr']=model;deltas['simclr']=delta\n        torch.save(model.state_dict(),out/'simclr.pt')\n        query,key,queue,queue_ids,hist,trace,delta=train_moco(initial,x,train)\n        results['moco-toy']=evaluate(query,x,ys,yc,train,test);histories['moco-toy']=hist;models['moco-toy']=query;deltas['moco-toy']=delta\n        torch.save({'query':query.state_dict(),'key':key.state_dict(),'queue':queue,'queue_ids':queue_ids},out/'moco-toy.pt')\n        (out/'queue-trace.json').write_text(json.dumps(trace,indent=2))\n    config={'seed':SEED,'mode':mode,'image_shape':[3,16,16],'train_n':len(train),'test_n':len(test),'batch_size':60,'epochs_simclr':40,'epochs_moco':15,'tau':.2,'adam_lr':.002,'h_dim':48,'z_dim':24,'labels_used_only_for_probes':True,'knn':{'k':5,'metric':'cosine'},'linear_probe':{'regularization_C':1,'standardizer_fit':'train-only'},'test_tuning':'none; fixed protocol before first run'}\n    (out/'config.json').write_text(json.dumps(config,indent=2))\n    plot_results(out,x,initial,models,results,histories)\n    payload={'code_sha256':globals().get('SOURCE_SHA256') or hashlib.sha256(Path(__file__).read_bytes()).hexdigest(),'kind':'local CPU full training + frozen held-out probes','utc':time.strftime('%Y-%m-%dT%H:%M:%SZ',time.gmtime()),'seconds':time.time()-started,'torch':torch.__version__,'numpy':np.__version__,'python':platform.python_version(),'scores':results,'loss_history':histories,'encoder_weight_l2_change':deltas,'warmup':moco_warmup(),'inputs_sha256':hashlib.sha256((out/'inputs.npz').read_bytes()).hexdigest()}\n    (out/'results.json').write_text(json.dumps(payload,indent=2))\n    print(json.dumps({'scores':results,'encoder_weight_l2_change':deltas,'seconds':payload['seconds']},indent=2))\n    return payload\n```","sha256":"8b9ce5374de71a50bb150ff0a30e2af4bbba003b016c612641bbaafbd706b979","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-67c24096691a4ebca8cea6b57a6c7785","title":"冻结评价回答另一个问题","number":6},"sectionTitle":"冻结评价回答另一个问题","currentQuestion":"冻结评价回答另一个问题","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-bdeffce030729a546df77b9f","nextBlock":"b-be1aa52c6f94ecd91313d75e","prerequisites":[{"id":"b-91b365ced71f69405edb0c06","url":"#b-91b365ced71f69405edb0c06","role":"section-title"},{"id":"b-71eb91f6e620e41d99de7aa0","url":"#b-71eb91f6e620e41d99de7aa0","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-be1aa52c6f94ecd91313d75e","type":"pre","scope":"block-6086460204394c898e1e48599f8ff746","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-be1aa52c6f94ecd91313d75e","content":"```\nresult=run_contrastive('lab06-notebook-output',mode='color')\nfrom IPython.display import Image,display\ndisplay(Image(filename='lab06-notebook-output/views.png'))\ndisplay(Image(filename='lab06-notebook-output/training-and-probes.png'))\n```","sha256":"9df41b9bf4f1e07c32bc051b82b396df27ad0d656757a0bca471bd819dde7af6","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-67c24096691a4ebca8cea6b57a6c7785","title":"冻结评价回答另一个问题","number":6},"sectionTitle":"冻结评价回答另一个问题","currentQuestion":"冻结评价回答另一个问题","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-9409d1ac401bb083639bdc9f","nextBlock":null,"prerequisites":[{"id":"b-91b365ced71f69405edb0c06","url":"#b-91b365ced71f69405edb0c06","role":"section-title"},{"id":"b-71eb91f6e620e41d99de7aa0","url":"#b-71eb91f6e620e41d99de7aa0","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-dcc453765d80e6e3e98e6fbf","type":"h2","scope":"block-21ccc165ce674b0bba08a63ab965c04d","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-dcc453765d80e6e3e98e6fbf","content":"## 已运行结果：一次增益也可能是另一次损失","sha256":"727143b87c4c5e5f6b981a6b3a6167bb1e9a154f2fca7c6967e9deb4b5a979f3","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-21ccc165ce674b0bba08a63ab965c04d","title":"已运行结果：一次增益也可能是另一次损失","number":7},"sectionTitle":"已运行结果：一次增益也可能是另一次损失","currentQuestion":"已运行结果：一次增益也可能是另一次损失","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-616823c73899700dc86053be","prerequisites":[{"id":"b-e5a85d0e79f828289845f2ee","url":"#b-e5a85d0e79f828289845f2ee","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-616823c73899700dc86053be","type":"table","scope":"block-21ccc165ce674b0bba08a63ab965c04d","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-616823c73899700dc86053be","content":"| 编码器 | h形状5NN | z形状5NN | h颜色5NN | z颜色5NN | h形状线性 | h颜色线性 |\n| --- | --- | --- | --- | --- | --- | --- |\n| random | 72.50% | 60.42% | 100.00% | 100.00% | 56.25% | 100.00% |\n| keep-hue | 47.50% | 58.33% | 100.00% | 100.00% | 69.17% | 100.00% |\n| swap-hue | 85.83% | 95.42% | 49.17% | 52.92% | 98.75% | 59.17% |","sha256":"03c40f396886719da29d1a635f22d715e9ff155d060469a8cd7cad97e83e189d","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-21ccc165ce674b0bba08a63ab965c04d","title":"已运行结果：一次增益也可能是另一次损失","number":7},"sectionTitle":"已运行结果：一次增益也可能是另一次损失","currentQuestion":"已运行结果：一次增益也可能是另一次损失","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"table":{"headers":["编码器","h形状5NN","z形状5NN","h颜色5NN","z颜色5NN","h形状线性","h颜色线性"],"rows":[["编码器","h形状5NN","z形状5NN","h颜色5NN","z颜色5NN","h形状线性","h颜色线性"],["random","72.50%","60.42%","100.00%","100.00%","56.25%","100.00%"],["keep-hue","47.50%","58.33%","100.00%","100.00%","69.17%","100.00%"],["swap-hue","85.83%","95.42%","49.17%","52.92%","98.75%","59.17%"]]},"previousBlock":"b-dcc453765d80e6e3e98e6fbf","nextBlock":"b-e5a85d0e79f828289845f2ee","prerequisites":[{"id":"b-dcc453765d80e6e3e98e6fbf","url":"#b-dcc453765d80e6e3e98e6fbf","role":"section-title"},{"id":"b-e5a85d0e79f828289845f2ee","url":"#b-e5a85d0e79f828289845f2ee","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-e5a85d0e79f828289845f2ee","type":"p","scope":"block-21ccc165ce674b0bba08a63ab965c04d","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-e5a85d0e79f828289845f2ee","content":"![颜色增强对训练损失和保留集读出的不同影响](/assets/display/f482e1157acae587ec308bdd.webp)","sha256":"59197d1bc9e100e7de550c991e47cdc7285539209f5169fa30bfd833f2775aba","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-21ccc165ce674b0bba08a63ab965c04d","title":"已运行结果：一次增益也可能是另一次损失","number":7},"sectionTitle":"已运行结果：一次增益也可能是另一次损失","currentQuestion":"已运行结果：一次增益也可能是另一次损失","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-616823c73899700dc86053be","nextBlock":"b-6699a9b2807efcd1d80761bd","prerequisites":[{"id":"b-dcc453765d80e6e3e98e6fbf","url":"#b-dcc453765d80e6e3e98e6fbf","role":"section-title"}],"relatedBlocks":[]},{"id":"b-6699a9b2807efcd1d80761bd","type":"p","scope":"block-21ccc165ce674b0bba08a63ab965c04d","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-6699a9b2807efcd1d80761bd","content":"保色条件的 InfoNCE 从 4.317 降至 2.087，但 h 的形状 5-NN 从随机的 72.50% 降到 47.50%。目标可以利用颜色、位置、大小来区分源图；目标下降没有回答形状类别是否更可分。线性形状读出却从 56.25% 增至 69.17%，说明同一表示在不同读出协议下也会得出不同评价。","sha256":"7c139c03d382855aca973abe7d348f3d39eed45ff9bd1b8c44a1c0c059888c16","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-21ccc165ce674b0bba08a63ab965c04d","title":"已运行结果：一次增益也可能是另一次损失","number":7},"sectionTitle":"已运行结果：一次增益也可能是另一次损失","currentQuestion":"已运行结果：一次增益也可能是另一次损失","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-e5a85d0e79f828289845f2ee","nextBlock":"b-af8a5f14e593b6770fbd9e88","prerequisites":[{"id":"b-dcc453765d80e6e3e98e6fbf","url":"#b-dcc453765d80e6e3e98e6fbf","role":"section-title"},{"id":"b-e5a85d0e79f828289845f2ee","url":"#b-e5a85d0e79f828289845f2ee","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-af8a5f14e593b6770fbd9e88","type":"p","scope":"block-21ccc165ce674b0bba08a63ab965c04d","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-af8a5f14e593b6770fbd9e88","content":"换色条件的 h 形状 5-NN 为 85.83%，颜色 5-NN 为 49.17%；形状线性读出为 98.75%，颜色线性读出仍有 59.17%，说明不能把“近邻接近50%”升级成数学意义的信息完全消失。z 的形状 5-NN 达到 95.42%，这次反而高于 h；“下游总用 h，因为 h 总更好”不是本实验支持的规则。","sha256":"0a6b79af5cf229d4c70b15beb8212564fc69ecacbe804c31d64565e4f9be500f","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-21ccc165ce674b0bba08a63ab965c04d","title":"已运行结果：一次增益也可能是另一次损失","number":7},"sectionTitle":"已运行结果：一次增益也可能是另一次损失","currentQuestion":"已运行结果：一次增益也可能是另一次损失","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-6699a9b2807efcd1d80761bd","nextBlock":"b-3a7814df0fee0de556b4c4b6","prerequisites":[{"id":"b-dcc453765d80e6e3e98e6fbf","url":"#b-dcc453765d80e6e3e98e6fbf","role":"section-title"},{"id":"b-e5a85d0e79f828289845f2ee","url":"#b-e5a85d0e79f828289845f2ee","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-3a7814df0fee0de556b4c4b6","type":"p","scope":"block-21ccc165ce674b0bba08a63ab965c04d","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-3a7814df0fee0de556b4c4b6","content":"两条链的第一层卷积权重变化范数分别为 0.7133 和 0.7588，确认不是只训练了读出头。这里不能证明大规模自然图像上颜色增强总能提高形状识别，也不能从一枚种子宣称显著优越。","sha256":"6a3fa7531711d17a021bb251b5a5437c1f5377a3c494046c3abb95180c6ef11d","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-21ccc165ce674b0bba08a63ab965c04d","title":"已运行结果：一次增益也可能是另一次损失","number":7},"sectionTitle":"已运行结果：一次增益也可能是另一次损失","currentQuestion":"已运行结果：一次增益也可能是另一次损失","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-af8a5f14e593b6770fbd9e88","nextBlock":"b-464cfe464ca16d96a567ea52","prerequisites":[{"id":"b-dcc453765d80e6e3e98e6fbf","url":"#b-dcc453765d80e6e3e98e6fbf","role":"section-title"},{"id":"b-e5a85d0e79f828289845f2ee","url":"#b-e5a85d0e79f828289845f2ee","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-464cfe464ca16d96a567ea52","type":"p","scope":"block-21ccc165ce674b0bba08a63ab965c04d","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-464cfe464ca16d96a567ea52","content":"**云端复核（2026-09-22）：同一代码另在 Deepnote 的 Python 3.13 / PyTorch 2.12.0+cu130 环境以 CPU 张量完整执行。保色 h 的形状/颜色5-NN为54.17%/100%，换色为93.33%/50.42%；本地表格来自 Python 3.12 / PyTorch 2.14 CPU，保留原值。固定种子不保证跨软件版本逐位相同；这里两次都显示形状与颜色任务的取舍。云端运行 ID：5c5da87a-d3b9-4a10-b758-269e659f54f1。**","sha256":"4109233e56d615b4632e4a50d77c5445db8b505542df377e951fdf6b036cffa8","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-21ccc165ce674b0bba08a63ab965c04d","title":"已运行结果：一次增益也可能是另一次损失","number":7},"sectionTitle":"已运行结果：一次增益也可能是另一次损失","currentQuestion":"已运行结果：一次增益也可能是另一次损失","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-3a7814df0fee0de556b4c4b6","nextBlock":null,"prerequisites":[{"id":"b-dcc453765d80e6e3e98e6fbf","url":"#b-dcc453765d80e6e3e98e6fbf","role":"section-title"},{"id":"b-e5a85d0e79f828289845f2ee","url":"#b-e5a85d0e79f828289845f2ee","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-91b25f52cca65906f3aecfa1","type":"h2","scope":"block-b7235416faea4815ad2db029aeb31116","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-91b25f52cca65906f3aecfa1","content":"## 只改一个条件，再解释变化","sha256":"1fd8bbe4ccc5eedb0fe6d8a6a78303daf3653857b8d44bdebc1c16b56f7fa983","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-b7235416faea4815ad2db029aeb31116","title":"只改一个条件，再解释变化","number":8},"sectionTitle":"只改一个条件，再解释变化","currentQuestion":"只改一个条件，再解释变化","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-56c1c8455ca24dced0eba045","prerequisites":[{"id":"b-56c1c8455ca24dced0eba045","url":"#b-56c1c8455ca24dced0eba045","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-56c1c8455ca24dced0eba045","type":"p","scope":"block-b7235416faea4815ad2db029aeb31116","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-56c1c8455ca24dced0eba045","content":"先保持数据、网络、epoch 与读出协议，修改 `views` 中色相交换概率，从 0.5 改成 0.1。把结果写入新的输出目录，保留原基准；观察颜色线性读出是否恢复、形状读出是否变化。不要同时增加模型和训练时长。若增加一个颜色敏感下游任务，例如“成熟红果与未熟绿果”，请先说明哪些增强可能直接改掉答案。","sha256":"41023f7617282539855132706dc66a26dde8c897d40532a467e98feffed3f131","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-b7235416faea4815ad2db029aeb31116","title":"只改一个条件，再解释变化","number":8},"sectionTitle":"只改一个条件，再解释变化","currentQuestion":"只改一个条件，再解释变化","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-91b25f52cca65906f3aecfa1","nextBlock":"b-b36333a9a263862e65692971","prerequisites":[{"id":"b-91b25f52cca65906f3aecfa1","url":"#b-91b25f52cca65906f3aecfa1","role":"section-title"}],"relatedBlocks":[]},{"id":"b-b36333a9a263862e65692971","type":"p","scope":"block-b7235416faea4815ad2db029aeb31116","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-b36333a9a263862e65692971","content":"接着到 [LAB 07](https://deepnote.com/project/38755e4e-23f6-4f5f-8c68-8a2e4114b1c1/notebook/0d1b8f6fbf6a476c93ffcc169f2ec1f4) 看负例字典与 EMA，或到 [LAB 08](https://deepnote.com/project/38755e4e-23f6-4f5f-8c68-8a2e4114b1c1/notebook/b5ba27f2c5ba4ec0922208a7d5dc80a4) 比较重建目标。三个实验都要把“优化什么”和“如何评价”分开。","sha256":"4a9b328ef49c14942d0905661691d8e1f9e5285bb4230f22766587debb7a4b27","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-b7235416faea4815ad2db029aeb31116","title":"只改一个条件，再解释变化","number":8},"sectionTitle":"只改一个条件，再解释变化","currentQuestion":"只改一个条件，再解释变化","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-56c1c8455ca24dced0eba045","nextBlock":"b-37133f31891fe9e92727fe72","prerequisites":[{"id":"b-91b25f52cca65906f3aecfa1","url":"#b-91b25f52cca65906f3aecfa1","role":"section-title"},{"id":"b-56c1c8455ca24dced0eba045","url":"#b-56c1c8455ca24dced0eba045","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-37133f31891fe9e92727fe72","type":"p","scope":"block-b7235416faea4815ad2db029aeb31116","url":"https://codingai-lec03.pages.dev/course/lab06-视图颜色与投影头.html#b-37133f31891fe9e92727fe72","content":"来源：[SimCLR 原论文与作者发布页](https://proceedings.mlr.press/v119/chen20j.html) 支持增强组成、非线性投影头和冻结评价的研究背景。本册图形数据、CPU 小网络、对照结果为本课程独立教学构造，不是论文 ImageNet 指标复现。","sha256":"8b58ab909ed9f08bf38e6200c02fb8fbde3015b651757fd64c3caec685954b29","chapter":{"id":"course","title":"LAB 06 · 颜色干预：视图、投影与读出"},"unit":{"id":"lab06-视图颜色与投影头","title":"LAB 06 · 颜色干预：视图、投影与读出"},"page":{"id":"reading-block-b7235416faea4815ad2db029aeb31116","title":"只改一个条件，再解释变化","number":8},"sectionTitle":"只改一个条件，再解释变化","currentQuestion":"只改一个条件，再解释变化","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-b36333a9a263862e65692971","nextBlock":null,"prerequisites":[{"id":"b-91b25f52cca65906f3aecfa1","url":"#b-91b25f52cca65906f3aecfa1","role":"section-title"},{"id":"b-56c1c8455ca24dced0eba045","url":"#b-56c1c8455ca24dced0eba045","role":"problem-context"}],"relatedBlocks":[]}]}
