{"id":1768,"date":"2023-04-27T20:41:53","date_gmt":"2023-04-27T11:41:53","guid":{"rendered":"https:\/\/edu.ujhb.org\/?p=1768"},"modified":"2023-04-27T20:41:53","modified_gmt":"2023-04-27T11:41:53","slug":"pytorch%e5%85%a5%e9%97%a8%ef%bc%88%e4%b8%ad%e6%96%87%e7%89%88%ef%bc%89","status":"publish","type":"post","link":"https:\/\/edu.ujhb.org\/?p=1768","title":{"rendered":"PyTorch\u5165\u95e8\uff08\u4e2d\u6587\u7248\uff09"},"content":{"rendered":"\n<p>\u6211\u662f\u8981\u505aIT\u6559\u7a0b\u7684\u89c6\u9891\uff0c\u4f60\u80fd\u5426\u6839\u636e\u7f51\u7ad9\u7684\u5185\u5bb9\uff0c\u4e3a\u6211\u5b89\u6392\u89c6\u9891\u6559\u7a0b\u7684\u6587\u5b57\u5185\u5bb9\u3002\u6211\u4eec\u5148\u4ecepytorch\u6559\u7a0b\u5f00\u59cb\uff0c\u4f60\u5148\u4e3a\u6211\u5217\u51fa\u8981\u8bb2\u89e3\u7684\u5185\u5bb9\u4e00\u89c8\u3002<\/p>\n\n\n\n<p>\u5f53\u7136\u53ef\u4ee5\uff01\u4ee5\u4e0b\u662f\u4e00\u4e2a\u57fa\u4e8ePyTorch\u7684IT\u6559\u7a0b\u7684\u5efa\u8bae\u5185\u5bb9\u5927\u7eb2\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4ecb\u7ecd 1.1 PyTorch\u7b80\u4ecb 1.2 \u5b89\u88c5\u4e0e\u914d\u7f6e 1.3 PyTorch\u4e0e\u5176\u4ed6\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u7684\u6bd4\u8f83<\/li>\n\n\n\n<li>\u5f20\u91cf\u64cd\u4f5c\u4e0e\u57fa\u672c\u6570\u5b66\u8fd0\u7b97 2.1 \u521b\u5efa\u5f20\u91cf 2.2 \u5f20\u91cf\u7684\u5f62\u72b6\u4e0e\u7ef4\u5ea6 2.3 \u7d22\u5f15\u4e0e\u5207\u7247 2.4 \u5f20\u91cf\u8fd0\u7b97 2.5 \u7ebf\u6027\u4ee3\u6570\u64cd\u4f5c 2.6 \u5e7f\u64ad\u673a\u5236<\/li>\n\n\n\n<li>\u81ea\u52a8\u6c42\u5bfc\u4e0e\u4f18\u5316 3.1 \u8ba1\u7b97\u56fe\u4e0e\u81ea\u52a8\u6c42\u5bfc 3.2 \u53cd\u5411\u4f20\u64ad\u4e0e\u68af\u5ea6 3.3 \u4f18\u5316\u5668\u7b80\u4ecb 3.4 \u5e38\u7528\u4f18\u5316\u5668\u7684\u4f7f\u7528\u4e0e\u6bd4\u8f83<\/li>\n\n\n\n<li>\u795e\u7ecf\u7f51\u7edc\u6784\u5efa\u4e0e\u8bad\u7ec3 4.1 \u6784\u5efa\u795e\u7ecf\u7f51\u7edc\u6a21\u578b 4.2 \u6fc0\u6d3b\u51fd\u6570\u4e0e\u635f\u5931\u51fd\u6570 4.3 \u521d\u59cb\u5316\u6743\u91cd\u4e0e\u504f\u7f6e 4.4 \u8bad\u7ec3\u4e0e\u9a8c\u8bc1\u6570\u636e\u96c6 4.5 \u6a21\u578b\u8bad\u7ec3\u4e0e\u9a8c\u8bc1 4.6 \u8d85\u53c2\u6570\u8c03\u6574\u4e0e\u4f18\u5316<\/li>\n\n\n\n<li>\u5e38\u89c1\u795e\u7ecf\u7f51\u7edc\u7c7b\u578b\u4e0e\u5e94\u7528 5.1 \u5168\u8fde\u63a5\u795e\u7ecf\u7f51\u7edc (FCNN) 5.2 \u5377\u79ef\u795e\u7ecf\u7f51\u7edc (CNN) 5.3 \u5faa\u73af\u795e\u7ecf\u7f51\u7edc (RNN) 5.4 \u957f\u77ed\u65f6\u8bb0\u5fc6\u7f51\u7edc (LSTM) 5.5 Transformer<\/li>\n\n\n\n<li>\u6df1\u5ea6\u5b66\u4e60\u5e94\u7528\u5b9e\u4f8b 6.1 \u56fe\u50cf\u5206\u7c7b 6.2 \u7269\u4f53\u68c0\u6d4b 6.3 \u8bed\u4e49\u5206\u5272 6.4 \u673a\u5668\u7ffb\u8bd1 6.5 \u8bed\u97f3\u8bc6\u522b<\/li>\n\n\n\n<li>\u9ad8\u7ea7\u8bdd\u9898 7.1 \u5206\u5e03\u5f0f\u8bad\u7ec3 7.2 \u6a21\u578b\u91cf\u5316\u4e0e\u538b\u7f29 7.3 \u8fc1\u79fb\u5b66\u4e60 7.4 \u5bf9\u6297\u6027\u751f\u6210\u7f51\u7edc (GANs)<\/li>\n\n\n\n<li>\u7ed3\u675f\u8bed 8.1 \u603b\u7ed3\u4e0e\u56de\u987e 8.2 PyTorch\u793e\u533a\u4e0e\u8d44\u6e90 8.3 \u6df1\u5ea6\u5b66\u4e60\u7684\u672a\u6765\u53d1\u5c55<\/li>\n<\/ol>\n\n\n\n<p>\u8fd9\u4e2a\u5927\u7eb2\u53ef\u4ee5\u6839\u636e\u60a8\u7684\u9700\u6c42\u8fdb\u884c\u8c03\u6574\uff0c\u4f46\u5b83\u4e3a\u60a8\u63d0\u4f9b\u4e86\u4e00\u4e2aPyTorch\u6559\u7a0b\u7684\u57fa\u672c\u6846\u67b6\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u7b80\u4ecb<\/p>\n\n\n\n<p>The previous model used in this conversation is unavailable. We&#8217;ve switched you to the latest default model<\/p>\n\n\n\n<p>PyTorch\u662f\u4e00\u4e2a\u5f00\u6e90\u7684\u673a\u5668\u5b66\u4e60\u6846\u67b6\uff0c\u5b83\u662f\u7531Facebook\u4eba\u5de5\u667a\u80fd\u7814\u7a76\u9662\uff08FAIR\uff09\u4e8e2016\u5e74\u9996\u6b21\u53d1\u5e03\u7684\u3002\u5b83\u662f\u4e00\u4e2a\u57fa\u4e8ePython\u7684\u79d1\u5b66\u8ba1\u7b97\u5305\uff0c\u53ef\u4ee5\u5728GPU\u548cCPU\u4e0a\u5b9e\u73b0\u6df1\u5ea6\u795e\u7ecf\u7f51\u7edc\u7684\u6784\u5efa\u548c\u8bad\u7ec3\u3002<\/p>\n\n\n\n<p>PyTorch\u5177\u6709\u4ee5\u4e0b\u7279\u70b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u52a8\u6001\u8ba1\u7b97\u56fe\uff1aPyTorch\u4f7f\u7528\u52a8\u6001\u8ba1\u7b97\u56fe\uff0c\u4e0e\u5176\u4ed6\u6846\u67b6\u4f7f\u7528\u9759\u6001\u8ba1\u7b97\u56fe\u4e0d\u540c\uff0c\u5b83\u80fd\u591f\u63d0\u4f9b\u66f4\u9ad8\u7684\u7075\u6d3b\u6027\u548c\u53ef\u8bfb\u6027\uff0c\u8ba9\u7528\u6237\u53ef\u4ee5\u4f7f\u7528Python\u4ee3\u7801\u66f4\u76f4\u89c2\u5730\u5b9a\u4e49\u6a21\u578b\u3002<\/li>\n\n\n\n<li>\u9ad8\u6548\u7684GPU\u52a0\u901f\uff1aPyTorch\u7684\u5f20\u91cf\u64cd\u4f5c\u53ef\u4ee5\u5728GPU\u4e0a\u5b9e\u73b0\u9ad8\u6548\u52a0\u901f\uff0c\u8fd9\u5bf9\u4e8e\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u7684\u8bad\u7ec3\u548c\u63a8\u65ad\u90fd\u6709\u5f88\u5927\u7684\u4f18\u52bf\u3002<\/li>\n\n\n\n<li>\u5e7f\u6cdb\u7684\u5e94\u7528\uff1aPyTorch\u5df2\u7ecf\u6210\u4e3a\u4e86\u7814\u7a76\u548c\u5e94\u7528\u6df1\u5ea6\u5b66\u4e60\u7684\u91cd\u8981\u5de5\u5177\uff0c\u5b83\u88ab\u5e7f\u6cdb\u5e94\u7528\u4e8e\u8ba1\u7b97\u673a\u89c6\u89c9\u3001\u81ea\u7136\u8bed\u8a00\u5904\u7406\u3001\u8bed\u97f3\u8bc6\u522b\u7b49\u9886\u57df\u3002<\/li>\n\n\n\n<li>\u4e30\u5bcc\u7684\u751f\u6001\u7cfb\u7edf\uff1aPyTorch\u6709\u4e00\u4e2a\u5e9e\u5927\u7684\u793e\u533a\uff0c\u63d0\u4f9b\u4e86\u4e30\u5bcc\u7684\u6269\u5c55\u5e93\u548c\u5de5\u5177\uff0c\u5982TorchVision\u3001TorchText\u7b49\uff0c\u53ef\u4ee5\u5e2e\u52a9\u7528\u6237\u66f4\u52a0\u4fbf\u6377\u5730\u5b8c\u6210\u6df1\u5ea6\u5b66\u4e60\u4efb\u52a1\u3002<\/li>\n\n\n\n<li>\u6613\u4e8e\u5b66\u4e60\uff1aPyTorch\u7684\u8bed\u6cd5\u7b80\u5355\u6613\u61c2\uff0c\u5bb9\u6613\u4e0a\u624b\uff0c\u7279\u522b\u662f\u5bf9\u4e8ePython\u8bed\u8a00\u6709\u4e00\u5b9a\u57fa\u7840\u7684\u7528\u6237\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u603b\u7684\u6765\u8bf4\uff0cPyTorch\u662f\u4e00\u4e2a\u529f\u80fd\u5f3a\u5927\u3001\u6613\u7528\u6027\u9ad8\u3001\u751f\u6001\u7cfb\u7edf\u4e30\u5bcc\u7684\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\uff0c\u5df2\u7ecf\u6210\u4e3a\u4e86\u7814\u7a76\u548c\u5e94\u7528\u6df1\u5ea6\u5b66\u4e60\u7684\u4e3b\u6d41\u4e4b\u4e00\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>1 \/ 2<\/p>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91ca\u5b89\u88c5\u4e0e\u914d\u7f6e<\/p>\n\n\n\n<p>\u5b89\u88c5\u548c\u914d\u7f6ePyTorch\u9700\u8981\u4ee5\u4e0b\u51e0\u4e2a\u6b65\u9aa4\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5b89\u88c5Python\uff1aPyTorch\u662f\u4e00\u4e2a\u57fa\u4e8ePython\u7684\u6846\u67b6\uff0c\u56e0\u6b64\u9700\u8981\u5148\u5b89\u88c5Python\u3002\u53ef\u4ee5\u4ecePython\u5b98\u7f51\u4e0b\u8f7d\u5b89\u88c5\u7a0b\u5e8f\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528\u64cd\u4f5c\u7cfb\u7edf\u81ea\u5e26\u7684\u5305\u7ba1\u7406\u5668\u8fdb\u884c\u5b89\u88c5\u3002<\/li>\n\n\n\n<li>\u5b89\u88c5PyTorch\uff1aPyTorch\u53ef\u4ee5\u901a\u8fc7pip\u5b89\u88c5\uff0c\u53ef\u4ee5\u5728\u7ec8\u7aef\u4e2d\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u5b89\u88c5\uff1aCopy code<code>pip install torch torchvision <\/code>\u5728\u5b89\u88c5\u8fc7\u7a0b\u4e2d\uff0cPyTorch\u4f1a\u81ea\u52a8\u68c0\u6d4b\u64cd\u4f5c\u7cfb\u7edf\u548c\u786c\u4ef6\u73af\u5883\uff0c\u5e76\u5b89\u88c5\u76f8\u5e94\u7684\u9884\u7f16\u8bd1\u7248\u672c\u3002<\/li>\n\n\n\n<li>\u6d4b\u8bd5\u5b89\u88c5\uff1a\u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u53ef\u4ee5\u5728Python\u7ec8\u7aef\u4e2d\u8f93\u5165\u4ee5\u4e0b\u547d\u4ee4\u6765\u6d4b\u8bd5PyTorch\u662f\u5426\u5b89\u88c5\u6210\u529f\uff1agoCopy code<code>import torch print(torch.__version__) <\/code>\u5982\u679c\u8f93\u51fa\u4e86PyTorch\u7684\u7248\u672c\u53f7\uff0c\u5219\u8bf4\u660e\u5b89\u88c5\u6210\u529f\u3002<\/li>\n\n\n\n<li>GPU\u52a0\u901f\uff08\u53ef\u9009\uff09\uff1a\u5982\u679c\u8ba1\u7b97\u673a\u4e2d\u6709NVIDIA GPU\uff0c\u5e76\u4e14\u9700\u8981\u4f7f\u7528GPU\u52a0\u901f\uff0c\u9700\u8981\u5b89\u88c5CUDA\u548ccuDNN\u3002\u8fd9\u4e9b\u8f6f\u4ef6\u53ef\u4ee5\u4eceNVIDIA\u5b98\u7f51\u4e0b\u8f7d\u5b89\u88c5\u7a0b\u5e8f\uff0c\u5b89\u88c5\u8fc7\u7a0b\u6bd4\u8f83\u590d\u6742\uff0c\u9700\u8981\u6309\u7167\u5b98\u65b9\u6587\u6863\u8fdb\u884c\u64cd\u4f5c\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u5728\u5b89\u88c5\u548c\u914d\u7f6ePyTorch\u7684\u8fc7\u7a0b\u4e2d\uff0c\u9700\u8981\u6ce8\u610f\u4ee5\u4e0b\u51e0\u4e2a\u95ee\u9898\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u64cd\u4f5c\u7cfb\u7edf\uff1aPyTorch\u652f\u6301Windows\u3001Linux\u548cmacOS\u7b49\u64cd\u4f5c\u7cfb\u7edf\uff0c\u9700\u8981\u6839\u636e\u4e0d\u540c\u7684\u64cd\u4f5c\u7cfb\u7edf\u9009\u62e9\u5408\u9002\u7684\u5b89\u88c5\u5305\u3002<\/li>\n\n\n\n<li>Python\u7248\u672c\uff1aPyTorch\u652f\u6301Python 3.6\u53ca\u4ee5\u4e0a\u7248\u672c\uff0c\u9700\u8981\u786e\u4fdd\u5b89\u88c5\u4e86\u6b63\u786e\u7684Python\u7248\u672c\u3002<\/li>\n\n\n\n<li>\u5305\u7ba1\u7406\u5668\uff1a\u53ef\u4ee5\u4f7f\u7528pip\u3001conda\u7b49\u5305\u7ba1\u7406\u5668\u8fdb\u884c\u5b89\u88c5\uff0c\u9700\u8981\u6839\u636e\u81ea\u5df1\u7684\u4e60\u60ef\u8fdb\u884c\u9009\u62e9\u3002<\/li>\n\n\n\n<li>CUDA\u7248\u672c\uff1a\u5982\u679c\u9700\u8981\u4f7f\u7528GPU\u52a0\u901f\uff0c\u9700\u8981\u6839\u636e\u5b89\u88c5\u7684PyTorch\u7248\u672c\u9009\u62e9\u5408\u9002\u7684CUDA\u7248\u672c\uff0c\u5426\u5219\u4f1a\u51fa\u73b0\u4e0d\u517c\u5bb9\u7684\u95ee\u9898\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u603b\u7684\u6765\u8bf4\uff0c\u5b89\u88c5\u548c\u914d\u7f6ePyTorch\u9700\u8981\u6839\u636e\u81ea\u5df1\u7684\u64cd\u4f5c\u7cfb\u7edf\u3001\u786c\u4ef6\u73af\u5883\u548c\u4f7f\u7528\u9700\u6c42\u8fdb\u884c\u9009\u62e9\u548c\u5b89\u88c5\uff0c\u9700\u8981\u4ed4\u7ec6\u9605\u8bfb\u5b98\u65b9\u6587\u6863\uff0c\u5e76\u4e25\u683c\u6309\u7167\u8bf4\u660e\u8fdb\u884c\u64cd\u4f5c\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u4e0e\u5176\u4ed6\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u7684\u6bd4\u8f83<\/p>\n\n\n\n<p>PyTorch\u4e0e\u5176\u4ed6\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u76f8\u6bd4\uff0c\u5177\u6709\u4ee5\u4e0b\u51e0\u4e2a\u4f18\u52bf\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u52a8\u6001\u8ba1\u7b97\u56fe\uff1aPyTorch\u4f7f\u7528\u52a8\u6001\u8ba1\u7b97\u56fe\uff0c\u80fd\u591f\u63d0\u4f9b\u66f4\u9ad8\u7684\u7075\u6d3b\u6027\u548c\u53ef\u8bfb\u6027\uff0c\u8ba9\u7528\u6237\u53ef\u4ee5\u4f7f\u7528Python\u4ee3\u7801\u66f4\u76f4\u89c2\u5730\u5b9a\u4e49\u6a21\u578b\u3002\u76f8\u6bd4\u4e4b\u4e0b\uff0cTensorFlow\u7b49\u5176\u4ed6\u6846\u67b6\u4f7f\u7528\u7684\u662f\u9759\u6001\u8ba1\u7b97\u56fe\uff0c\u9700\u8981\u5148\u5b9a\u4e49\u8ba1\u7b97\u56fe\u518d\u8fd0\u884c\uff0c\u7075\u6d3b\u6027\u4e0d\u5982PyTorch\u3002<\/li>\n\n\n\n<li>Pythonic\uff1aPyTorch\u7684\u8bed\u6cd5\u7b80\u5355\u6613\u61c2\uff0c\u5bb9\u6613\u4e0a\u624b\uff0c\u7279\u522b\u662f\u5bf9\u4e8ePython\u8bed\u8a00\u6709\u4e00\u5b9a\u57fa\u7840\u7684\u7528\u6237\u3002\u76f8\u6bd4\u4e4b\u4e0b\uff0cTensorFlow\u7b49\u5176\u4ed6\u6846\u67b6\u4f7f\u7528\u7684\u662f\u9759\u6001\u8ba1\u7b97\u56fe\u548c\u66f4\u4e3a\u590d\u6742\u7684\u8bed\u6cd5\uff0c\u5b66\u4e60\u96be\u5ea6\u8f83\u9ad8\u3002<\/li>\n\n\n\n<li>\u5feb\u901f\u8fed\u4ee3\u548c\u5b9e\u9a8c\uff1aPyTorch\u7684\u7075\u6d3b\u6027\u548c\u52a8\u6001\u8ba1\u7b97\u56fe\u4f7f\u5f97\u5feb\u901f\u8fed\u4ee3\u548c\u5b9e\u9a8c\u53d8\u5f97\u66f4\u52a0\u5bb9\u6613\u3002\u76f8\u6bd4\u4e4b\u4e0b\uff0c\u5176\u4ed6\u6846\u67b6\u9700\u8981\u7528\u6237\u5148\u5b9a\u4e49\u8ba1\u7b97\u56fe\u518d\u8fd0\u884c\uff0c\u8fed\u4ee3\u548c\u5b9e\u9a8c\u7684\u901f\u5ea6\u8f83\u6162\u3002<\/li>\n\n\n\n<li>\u53ef\u8bfb\u6027\u548c\u8c03\u8bd5\u6027\uff1aPyTorch\u7684\u52a8\u6001\u8ba1\u7b97\u56fe\u4f7f\u5f97\u4ee3\u7801\u53ef\u8bfb\u6027\u66f4\u5f3a\uff0c\u540c\u65f6\u8c03\u8bd5\u4e5f\u66f4\u52a0\u65b9\u4fbf\u3002\u7528\u6237\u53ef\u4ee5\u901a\u8fc7PyTorch\u7684\u8c03\u8bd5\u5de5\u5177\u66f4\u5feb\u5730\u627e\u5230\u9519\u8bef\u548c\u95ee\u9898\u3002<\/li>\n\n\n\n<li>\u793e\u533a\u548c\u751f\u6001\u7cfb\u7edf\uff1aPyTorch\u6709\u4e00\u4e2a\u5e9e\u5927\u7684\u793e\u533a\uff0c\u63d0\u4f9b\u4e86\u4e30\u5bcc\u7684\u6269\u5c55\u5e93\u548c\u5de5\u5177\uff0c\u5982TorchVision\u3001TorchText\u7b49\uff0c\u53ef\u4ee5\u5e2e\u52a9\u7528\u6237\u66f4\u52a0\u4fbf\u6377\u5730\u5b8c\u6210\u6df1\u5ea6\u5b66\u4e60\u4efb\u52a1\u3002\u76f8\u6bd4\u4e4b\u4e0b\uff0c\u5176\u4ed6\u6846\u67b6\u7684\u793e\u533a\u548c\u751f\u6001\u7cfb\u7edf\u76f8\u5bf9\u8f83\u5c0f\u3002<\/li>\n\n\n\n<li>\u9ad8\u6548\u7684GPU\u52a0\u901f\uff1aPyTorch\u7684\u5f20\u91cf\u64cd\u4f5c\u53ef\u4ee5\u5728GPU\u4e0a\u5b9e\u73b0\u9ad8\u6548\u52a0\u901f\uff0c\u8fd9\u5bf9\u4e8e\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u7684\u8bad\u7ec3\u548c\u63a8\u65ad\u90fd\u6709\u5f88\u5927\u7684\u4f18\u52bf\u3002\u76f8\u6bd4\u4e4b\u4e0b\uff0c\u5176\u4ed6\u6846\u67b6\u7684GPU\u52a0\u901f\u53ef\u80fd\u9700\u8981\u66f4\u590d\u6742\u7684\u914d\u7f6e\u548c\u8c03\u6574\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u603b\u7684\u6765\u8bf4\uff0cPyTorch\u7684\u52a8\u6001\u8ba1\u7b97\u56fe\u3001Pythonic\u8bed\u6cd5\u3001\u5feb\u901f\u8fed\u4ee3\u548c\u5b9e\u9a8c\u3001\u53ef\u8bfb\u6027\u548c\u8c03\u8bd5\u6027\u3001\u5e9e\u5927\u7684\u793e\u533a\u548c\u751f\u6001\u7cfb\u7edf\u4ee5\u53ca\u9ad8\u6548\u7684GPU\u52a0\u901f\u7b49\u7279\u70b9\uff0c\u4f7f\u5176\u6210\u4e3a\u7814\u7a76\u548c\u5e94\u7528\u6df1\u5ea6\u5b66\u4e60\u7684\u4e3b\u6d41\u6846\u67b6\u4e4b\u4e00\u3002\u540c\u65f6\uff0c\u5176\u4ed6\u6846\u67b6\u4e5f\u6709\u81ea\u5df1\u7684\u4f18\u52bf\uff0c\u9700\u8981\u6839\u636e\u5177\u4f53\u9700\u6c42\u8fdb\u884c\u9009\u62e9\u548c\u4f7f\u7528\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u5f20\u91cf\u64cd\u4f5c\u4e0e\u57fa\u672c\u6570\u5b66\u8fd0\u7b97\u521b\u5efa\u5f20\u91cf<\/p>\n\n\n\n<p>PyTorch\u4e2d\u7684\u5f20\u91cf\uff08tensor\uff09\u662f\u4e00\u4e2a\u591a\u7ef4\u6570\u7ec4\uff0c\u7c7b\u4f3c\u4e8eNumPy\u4e2d\u7684\u6570\u7ec4\u3002\u5f20\u91cf\u652f\u6301\u5404\u79cd\u6570\u5b66\u8fd0\u7b97\uff0c\u5982\u52a0\u51cf\u4e58\u9664\u3001\u77e9\u9635\u4e58\u6cd5\u3001\u7ebf\u6027\u4ee3\u6570\u8fd0\u7b97\u7b49\uff0c\u662f\u6df1\u5ea6\u5b66\u4e60\u8ba1\u7b97\u7684\u57fa\u7840\u3002<\/p>\n\n\n\n<p>\u521b\u5efa\u5f20\u91cf\uff1a PyTorch\u4e2d\u53ef\u4ee5\u4f7f\u7528torch.tensor()\u51fd\u6570\u6765\u521b\u5efa\u5f20\u91cf\u3002\u4ee5\u4e0b\u662f\u51e0\u79cd\u521b\u5efa\u5f20\u91cf\u7684\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f7f\u7528Python\u5217\u8868\u521b\u5efa\u5f20\u91cf\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) print(x) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[1, 2], [3, 4]])<\/code><\/li>\n\n\n\n<li>\u4f7f\u7528NumPy\u6570\u7ec4\u521b\u5efa\u5f20\u91cf\uff1aluaCopy code<code>import numpy as np import torch x = np.array([[1, 2], [3, 4]]) y = torch.tensor(x) print(y) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[1, 2], [3, 4]])<\/code><\/li>\n\n\n\n<li>\u4f7f\u7528torch.zeros()\u548ctorch.ones()\u51fd\u6570\u521b\u5efa\u5f20\u91cf\uff1ascssCopy code<code>import torch x = torch.zeros((2, 3)) y = torch.ones((3, 4)) print(x) print(y) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[0., 0., 0.], [0., 0., 0.]]) tensor([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]])<\/code><\/li>\n<\/ol>\n\n\n\n<p>\u57fa\u672c\u6570\u5b66\u8fd0\u7b97\uff1a PyTorch\u4e2d\u7684\u5f20\u91cf\u652f\u6301\u5404\u79cd\u57fa\u672c\u6570\u5b66\u8fd0\u7b97\uff0c\u5982\u52a0\u51cf\u4e58\u9664\u3001\u77e9\u9635\u4e58\u6cd5\u3001\u7ebf\u6027\u4ee3\u6570\u8fd0\u7b97\u7b49\u3002\u4ee5\u4e0b\u662f\u51e0\u79cd\u57fa\u672c\u6570\u5b66\u8fd0\u7b97\u7684\u793a\u4f8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5f20\u91cf\u52a0\u6cd5\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) y = torch.tensor([[2, 2], [2, 2]]) z = x + y print(z) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[3, 4], [5, 6]])<\/code><\/li>\n\n\n\n<li>\u5f20\u91cf\u4e58\u6cd5\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) y = torch.tensor([[2], [2]]) z = x.mm(y) print(z) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[ 6], [14]])<\/code><\/li>\n\n\n\n<li>\u5f20\u91cf\u8f6c\u7f6e\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) z = x.t() print(z) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[1, 3], [2, 4]])<\/code><\/li>\n<\/ol>\n\n\n\n<p>\u4ee5\u4e0a\u662fPyTorch\u4e2d\u5f20\u91cf\u7684\u521b\u5efa\u548c\u57fa\u672c\u6570\u5b66\u8fd0\u7b97\u7684\u793a\u4f8b\uff0cPyTorch\u8fd8\u652f\u6301\u66f4\u591a\u7684\u6570\u5b66\u8fd0\u7b97\uff0c\u5982\u5e73\u65b9\u3001\u5f00\u65b9\u3001\u6307\u6570\u3001\u5bf9\u6570\u7b49\uff0c\u5177\u4f53\u53ef\u4ee5\u67e5\u770b\u5b98\u65b9\u6587\u6863\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u5f20\u91cf\u64cd\u4f5c\u4e0e\u57fa\u672c\u6570\u5b66\u8fd0\u7b97\u5f20\u91cf\u7684\u5f62\u72b6\u4e0e\u7ef4\u5ea6<\/p>\n\n\n\n<p>PyTorch\u4e2d\u7684\u5f20\u91cf\uff08tensor\uff09\u662f\u4e00\u4e2a\u591a\u7ef4\u6570\u7ec4\uff0c\u5177\u6709\u5f62\u72b6\uff08shape\uff09\u548c\u7ef4\u5ea6\uff08dimension\uff09\u4e24\u4e2a\u91cd\u8981\u7684\u5c5e\u6027\u3002\u5f62\u72b6\u662f\u4e00\u4e2a\u7531\u6574\u6570\u7ec4\u6210\u7684\u5143\u7ec4\uff0c\u8868\u793a\u5f20\u91cf\u5728\u6bcf\u4e2a\u7ef4\u5ea6\u4e0a\u7684\u5927\u5c0f\uff0c\u7ef4\u5ea6\u662f\u5f20\u91cf\u4e2d\u7684\u8f74\u7684\u6570\u91cf\u3002\u5f20\u91cf\u7684\u5f62\u72b6\u548c\u7ef4\u5ea6\u5bf9\u4e8e\u6df1\u5ea6\u5b66\u4e60\u4efb\u52a1\u975e\u5e38\u91cd\u8981\uff0c\u53ef\u4ee5\u7528\u6765\u63cf\u8ff0\u8f93\u5165\u6570\u636e\u548c\u6a21\u578b\u53c2\u6570\u7684\u5f62\u72b6\u548c\u7ef4\u5ea6\u3002<\/p>\n\n\n\n<p>\u5f20\u91cf\u7684\u5f62\u72b6\uff1a \u53ef\u4ee5\u4f7f\u7528\u5f20\u91cf\u7684shape\u5c5e\u6027\u6765\u83b7\u53d6\u5176\u5f62\u72b6\u3002\u4ee5\u4e0b\u662f\u51e0\u79cd\u83b7\u53d6\u5f20\u91cf\u5f62\u72b6\u7684\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f7f\u7528shape\u5c5e\u6027\u83b7\u53d6\u5f20\u91cf\u5f62\u72b6\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) print(x.shape) <\/code>\u8f93\u51fa\uff1acssCopy code<code>torch.Size([2, 2])<\/code><\/li>\n\n\n\n<li>\u4f7f\u7528size()\u51fd\u6570\u83b7\u53d6\u5f20\u91cf\u5f62\u72b6\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) print(x.size()) <\/code>\u8f93\u51fa\uff1acssCopy code<code>torch.Size([2, 2])<\/code><\/li>\n\n\n\n<li>\u4f7f\u7528numpy()\u51fd\u6570\u83b7\u53d6\u5f20\u91cf\u5f62\u72b6\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) print(x.numpy().shape) <\/code>\u8f93\u51fa\uff1ascssCopy code<code>(2, 2)<\/code><\/li>\n<\/ol>\n\n\n\n<p>\u5f20\u91cf\u7684\u7ef4\u5ea6\uff1a \u53ef\u4ee5\u4f7f\u7528\u5f20\u91cf\u7684ndim\u5c5e\u6027\u6765\u83b7\u53d6\u5176\u7ef4\u5ea6\u3002\u4ee5\u4e0b\u662f\u51e0\u79cd\u83b7\u53d6\u5f20\u91cf\u7ef4\u5ea6\u7684\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f7f\u7528ndim\u5c5e\u6027\u83b7\u53d6\u5f20\u91cf\u7ef4\u5ea6\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) print(x.ndim) <\/code>\u8f93\u51fa\uff1aCopy code<code>2<\/code><\/li>\n\n\n\n<li>\u4f7f\u7528dim()\u51fd\u6570\u83b7\u53d6\u5f20\u91cf\u7ef4\u5ea6\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) print(x.dim()) <\/code>\u8f93\u51fa\uff1aCopy code<code>2<\/code><\/li>\n\n\n\n<li>\u4f7f\u7528shape\u5c5e\u6027\u83b7\u53d6\u5f20\u91cf\u7ef4\u5ea6\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) print(len(x.shape)) <\/code>\u8f93\u51fa\uff1aCopy code<code>2<\/code><\/li>\n<\/ol>\n\n\n\n<p>\u57fa\u672c\u6570\u5b66\u8fd0\u7b97\u4e2d\u7684\u5f62\u72b6\u548c\u7ef4\u5ea6\uff1a \u5728PyTorch\u4e2d\u7684\u57fa\u672c\u6570\u5b66\u8fd0\u7b97\u4e2d\uff0c\u5f62\u72b6\u548c\u7ef4\u5ea6\u4e5f\u975e\u5e38\u91cd\u8981\u3002\u4ee5\u4e0b\u662f\u51e0\u79cd\u57fa\u672c\u6570\u5b66\u8fd0\u7b97\u4e2d\u7684\u5f62\u72b6\u548c\u7ef4\u5ea6\u793a\u4f8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5f20\u91cf\u52a0\u6cd5\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) y = torch.tensor([[2, 2], [2, 2]]) z = x + y print(z.shape) <\/code>\u8f93\u51fa\uff1acssCopy code<code>torch.Size([2, 2])<\/code><\/li>\n\n\n\n<li>\u5f20\u91cf\u4e58\u6cd5\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) y = torch.tensor([[2], [2]]) z = x.mm(y) print(z.shape) <\/code>\u8f93\u51fa\uff1acssCopy code<code>torch.Size([2, 1])<\/code><\/li>\n\n\n\n<li><\/li>\n<\/ol>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u7ee7\u7eed<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li>\u5f20\u91cf\u8f6c\u7f6e\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) z = x.t() print(z.shape) <\/code>\u8f93\u51fa\uff1acssCopy code<code>torch.Size([2, 2])<\/code><\/li>\n<\/ol>\n\n\n\n<p>\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u5f20\u91cf\u52a0\u6cd5\u3001\u5f20\u91cf\u4e58\u6cd5\u548c\u5f20\u91cf\u8f6c\u7f6e\u7b49\u64cd\u4f5c\u90fd\u6539\u53d8\u4e86\u5f20\u91cf\u7684\u5f62\u72b6\u548c\u7ef4\u5ea6\u3002\u5728\u6df1\u5ea6\u5b66\u4e60\u4efb\u52a1\u4e2d\uff0c\u9700\u8981\u6839\u636e\u6570\u636e\u548c\u6a21\u578b\u7684\u5f62\u72b6\u548c\u7ef4\u5ea6\u8fdb\u884c\u5408\u9002\u7684\u6570\u5b66\u8fd0\u7b97\uff0c\u4ee5\u786e\u4fdd\u8ba1\u7b97\u6b63\u786e\u548c\u9ad8\u6548\u3002<\/p>\n\n\n\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728\u8fdb\u884c\u57fa\u672c\u6570\u5b66\u8fd0\u7b97\u65f6\uff0c\u5f20\u91cf\u7684\u5f62\u72b6\u548c\u7ef4\u5ea6\u5fc5\u987b\u6ee1\u8db3\u4e00\u5b9a\u7684\u6761\u4ef6\uff0c\u624d\u80fd\u8fdb\u884c\u8fd0\u7b97\u3002\u4f8b\u5982\uff0c\u5728\u5f20\u91cf\u4e58\u6cd5\u4e2d\uff0c\u4e24\u4e2a\u5f20\u91cf\u7684\u6700\u540e\u4e00\u4e2a\u7ef4\u5ea6\u5fc5\u987b\u76f8\u540c\uff0c\u5426\u5219\u65e0\u6cd5\u8fdb\u884c\u4e58\u6cd5\u8fd0\u7b97\u3002\u56e0\u6b64\uff0c\u5728\u8fdb\u884c\u6570\u5b66\u8fd0\u7b97\u65f6\uff0c\u9700\u8981\u4ed4\u7ec6\u68c0\u67e5\u5f20\u91cf\u7684\u5f62\u72b6\u548c\u7ef4\u5ea6\uff0c\u5e76\u6839\u636e\u9700\u8981\u8fdb\u884c\u53d8\u6362\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u5f20\u91cf\u64cd\u4f5c\u4e0e\u57fa\u672c\u6570\u5b66\u8fd0\u7b97\u7d22\u5f15\u4e0e\u5207\u7247<\/p>\n\n\n\n<p>PyTorch\u4e2d\u7684\u5f20\u91cf\uff08tensor\uff09\u652f\u6301\u7d22\u5f15\u548c\u5207\u7247\u64cd\u4f5c\uff0c\u53ef\u4ee5\u901a\u8fc7\u7d22\u5f15\u548c\u5207\u7247\u64cd\u4f5c\u6765\u83b7\u53d6\u5f20\u91cf\u4e2d\u7684\u7279\u5b9a\u5143\u7d20\u6216\u5b50\u96c6\u3002\u4ee5\u4e0b\u662f\u51e0\u79cd\u5e38\u89c1\u7684\u7d22\u5f15\u548c\u5207\u7247\u64cd\u4f5c\u793a\u4f8b\uff1a<\/p>\n\n\n\n<p>\u7d22\u5f15\uff1a \u53ef\u4ee5\u4f7f\u7528\u5f20\u91cf\u7684\u7d22\u5f15\u64cd\u4f5c\u6765\u83b7\u53d6\u5f20\u91cf\u4e2d\u7684\u7279\u5b9a\u5143\u7d20\u3002\u7d22\u5f15\u64cd\u4f5c\u4f7f\u7528\u65b9\u62ec\u53f7[]\uff0c\u5e76\u5728\u65b9\u62ec\u53f7\u4e2d\u6307\u5b9a\u5143\u7d20\u7684\u4f4d\u7f6e\u3002\u4ee5\u4e0b\u662f\u51e0\u79cd\u7d22\u5f15\u64cd\u4f5c\u7684\u793a\u4f8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u83b7\u53d6\u5f20\u91cf\u4e2d\u7684\u4e00\u4e2a\u5143\u7d20\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) y = x[1, 0] print(y) <\/code>\u8f93\u51fa\uff1ascssCopy code<code>tensor(3)<\/code><\/li>\n\n\n\n<li>\u83b7\u53d6\u5f20\u91cf\u4e2d\u7684\u4e00\u884c\u6216\u4e00\u5217\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) y = x[0, :] z = x[:, 1] print(y) print(z) <\/code>\u8f93\u51fa\uff1ascssCopy code<code>tensor([1, 2]) tensor([2, 4])<\/code><\/li>\n\n\n\n<li>\u4f7f\u7528\u5e03\u5c14\u7d22\u5f15\u83b7\u53d6\u5f20\u91cf\u4e2d\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7d20\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) mask = x &gt; 2 y = x[mask] print(y) <\/code>\u8f93\u51fa\uff1ascssCopy code<code>tensor([3, 4])<\/code><\/li>\n<\/ol>\n\n\n\n<p>\u5207\u7247\uff1a \u53ef\u4ee5\u4f7f\u7528\u5f20\u91cf\u7684\u5207\u7247\u64cd\u4f5c\u6765\u83b7\u53d6\u5f20\u91cf\u4e2d\u7684\u5b50\u96c6\u3002\u5207\u7247\u64cd\u4f5c\u4f7f\u7528\u5192\u53f7:\uff0c\u5e76\u5728\u5192\u53f7\u524d\u540e\u6307\u5b9a\u5207\u7247\u7684\u5f00\u59cb\u548c\u7ed3\u675f\u4f4d\u7f6e\u3002\u4ee5\u4e0b\u662f\u51e0\u79cd\u5207\u7247\u64cd\u4f5c\u7684\u793a\u4f8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u83b7\u53d6\u5f20\u91cf\u4e2d\u7684\u4e00\u4e2a\u5b50\u96c6\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) y = x[0:1, 0:1] print(y) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[1]])<\/code><\/li>\n\n\n\n<li>\u83b7\u53d6\u5f20\u91cf\u4e2d\u7684\u4e00\u884c\u6216\u4e00\u5217\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) y = x[0:1, :] z = x[:, 1:2] print(y) print(z) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[1, 2]]) tensor([[2], [4]])<\/code><\/li>\n\n\n\n<li>\u4f7f\u7528\u6b65\u957f\u83b7\u53d6\u5f20\u91cf\u4e2d\u7684\u5b50\u96c6\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) y = x[::2, ::2] print(y) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[1]])<\/code><\/li>\n<\/ol>\n\n\n\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728\u8fdb\u884c\u7d22\u5f15\u548c\u5207\u7247\u64cd\u4f5c\u65f6\uff0c\u9700\u8981\u9075\u5faaPython\u4e2d\u7684\u7d22\u5f15\u548c\u5207\u7247\u89c4\u5219\u3002\u4f8b\u5982\uff0c\u7d22\u5f15\u64cd\u4f5c\u8fd4\u56de\u7684\u662f\u4e00\u4e2a\u6807\u91cf\u6216\u4e00\u7ef4\u5f20\u91cf\uff0c\u5207\u7247\u64cd\u4f5c\u8fd4\u56de\u7684\u662f\u4e00\u4e2a\u5b50\u5f20\u91cf\u3002\u540c\u65f6\uff0c\u5728\u8fdb\u884c\u5207\u7247\u64cd\u4f5c\u65f6\uff0c\u53ef\u4ee5\u4f7f\u7528\u6b65\u957f\u53c2\u6570\u6307\u5b9a\u95f4\u9694\uff0c\u4e5f\u53ef\u4ee5\u7701\u7565\u5f00\u59cb\u548c\u7ed3\u675f\u53c2\u6570\uff0c\u8868\u793a\u4ece\u5934\u5230\u5c3e\u6216\u4ece\u5934\u5f00\u59cb\u5230\u6307\u5b9a\u4f4d\u7f6e\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u5f20\u91cf\u64cd\u4f5c\u4e0e\u57fa\u672c\u6570\u5b66\u8fd0\u7b97\u5f20\u91cf\u8fd0\u7b97<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u5f20\u91cf\uff08tensor\uff09\u652f\u6301\u5404\u79cd\u57fa\u672c\u6570\u5b66\u8fd0\u7b97\uff0c\u5982\u52a0\u51cf\u4e58\u9664\u3001\u77e9\u9635\u4e58\u6cd5\u3001\u7ebf\u6027\u4ee3\u6570\u8fd0\u7b97\u7b49\u3002\u4ee5\u4e0b\u662f\u51e0\u79cd\u5e38\u89c1\u7684\u5f20\u91cf\u8fd0\u7b97\u793a\u4f8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5f20\u91cf\u52a0\u6cd5\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) y = torch.tensor([[2, 2], [2, 2]]) z = x + y print(z) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[3, 4], [5, 6]])<\/code><\/li>\n\n\n\n<li>\u5f20\u91cf\u4e58\u6cd5\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) y = torch.tensor([[2], [2]]) z = x.mm(y) print(z) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[ 6], [14]])<\/code><\/li>\n\n\n\n<li>\u5f20\u91cf\u8f6c\u7f6e\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) z = x.t() print(z) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[1, 3], [2, 4]])<\/code><\/li>\n\n\n\n<li>\u5f20\u91cf\u5e73\u65b9\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) y = x**2 print(y) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[ 1, 4], [ 9, 16]])<\/code><\/li>\n\n\n\n<li>\u5f20\u91cf\u6c42\u548c\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) y = torch.sum(x) print(y) <\/code>\u8f93\u51fa\uff1ascssCopy code<code>tensor(10)<\/code><\/li>\n\n\n\n<li>\u5f20\u91cf\u5f52\u4e00\u5316\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]], dtype=torch.float) y = torch.nn.functional.normalize(x, p=2, dim=1) print(y) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[0.4472, 0.8944], [0.6, 0.8]])<\/code><\/li>\n<\/ol>\n\n\n\n<p>\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u5f20\u91cf\u52a0\u6cd5\u3001\u5f20\u91cf\u4e58\u6cd5\u3001\u5f20\u91cf\u8f6c\u7f6e\u3001\u5f20\u91cf\u5e73\u65b9\u3001\u5f20\u91cf\u6c42\u548c\u548c\u5f20\u91cf\u5f52\u4e00\u5316\u7b49\u64cd\u4f5c\u90fd\u662f\u5e38\u89c1\u7684\u5f20\u91cf\u8fd0\u7b97\uff0c\u53ef\u7528\u4e8e\u6df1\u5ea6\u5b66\u4e60\u4efb\u52a1\u4e2d\u7684\u6570\u636e\u5904\u7406\u548c\u6a21\u578b\u8ba1\u7b97\u3002<\/p>\n\n\n\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728\u8fdb\u884c\u5f20\u91cf\u8fd0\u7b97\u65f6\uff0c\u9700\u8981\u786e\u4fdd\u5f20\u91cf\u7684\u5f62\u72b6\u548c\u7ef4\u5ea6\u7b26\u5408\u8fd0\u7b97\u8981\u6c42\u3002\u4f8b\u5982\uff0c\u5728\u8fdb\u884c\u5f20\u91cf\u4e58\u6cd5\u65f6\uff0c\u4e24\u4e2a\u5f20\u91cf\u7684\u6700\u540e\u4e00\u4e2a\u7ef4\u5ea6\u5fc5\u987b\u76f8\u540c\uff0c\u5426\u5219\u65e0\u6cd5\u8fdb\u884c\u4e58\u6cd5\u8fd0\u7b97\u3002\u540c\u65f6\uff0c\u5728\u8fdb\u884c\u5f20\u91cf\u8fd0\u7b97\u65f6\uff0c\u4e5f\u9700\u8981\u8003\u8651\u6570\u636e\u7c7b\u578b\u548c\u8bbe\u5907\uff0c\u5982\u4f7f\u7528float\u6216double\u6570\u636e\u7c7b\u578b\uff0c\u4f7f\u7528CPU\u6216GPU\u8bbe\u5907\u7b49\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u5f20\u91cf\u64cd\u4f5c\u4e0e\u57fa\u672c\u6570\u5b66\u8fd0\u7b97\u7ebf\u6027\u4ee3\u6570\u64cd\u4f5c<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u7ebf\u6027\u4ee3\u6570\u64cd\u4f5c\u662f\u6df1\u5ea6\u5b66\u4e60\u4e2d\u7684\u91cd\u8981\u64cd\u4f5c\u4e4b\u4e00\u3002\u7ebf\u6027\u4ee3\u6570\u64cd\u4f5c\u53ef\u4ee5\u7528\u4e8e\u6a21\u578b\u7684\u8bad\u7ec3\u3001\u4f18\u5316\u548c\u8bc4\u4f30\u7b49\u4efb\u52a1\u4e2d\u3002\u4ee5\u4e0b\u662f\u51e0\u79cd\u5e38\u89c1\u7684\u7ebf\u6027\u4ee3\u6570\u64cd\u4f5c\u793a\u4f8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u77e9\u9635\u4e58\u6cd5\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) y = torch.tensor([[2], [2]]) z = x.mm(y) print(z) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[ 6], [14]])<\/code><\/li>\n\n\n\n<li>\u77e9\u9635\u6c42\u9006\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]], dtype=torch.float) y = torch.inverse(x) print(y) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[-2.0000, 1.0000], [ 1.5000, -0.5000]])<\/code><\/li>\n\n\n\n<li>\u7279\u5f81\u503c\u5206\u89e3\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]], dtype=torch.float) y, z = torch.eig(x, eigenvectors=True) print(y) print(z) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[ 0.3723, 0.0000], [ 5.6277, 0.0000]]) tensor([[ 0.8246, -0.4163], [ 0.5658, 0.9094]])<\/code><\/li>\n\n\n\n<li>\u5947\u5f02\u503c\u5206\u89e3\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]], dtype=torch.float) u, s, v = torch.svd(x) print(u) print(s) print(v) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[-0.4046, -0.9145], [-0.9145, 0.4046]]) tensor([5.4649, 0.3650]) tensor([[-0.5760, -0.8174], [ 0.8174, -0.5760]])<\/code><\/li>\n<\/ol>\n\n\n\n<p>\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u77e9\u9635\u4e58\u6cd5\u3001\u77e9\u9635\u6c42\u9006\u3001\u7279\u5f81\u503c\u5206\u89e3\u548c\u5947\u5f02\u503c\u5206\u89e3\u7b49\u64cd\u4f5c\u90fd\u662f\u5e38\u89c1\u7684\u7ebf\u6027\u4ee3\u6570\u64cd\u4f5c\u3002\u8fd9\u4e9b\u64cd\u4f5c\u53ef\u7528\u4e8e\u6df1\u5ea6\u5b66\u4e60\u4efb\u52a1\u4e2d\u7684\u6a21\u578b\u8bad\u7ec3\u3001\u53c2\u6570\u4f18\u5316\u548c\u7ed3\u679c\u8bc4\u4f30\u7b49\u65b9\u9762\u3002<\/p>\n\n\n\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728\u8fdb\u884c\u7ebf\u6027\u4ee3\u6570\u64cd\u4f5c\u65f6\uff0c\u9700\u8981\u786e\u4fdd\u5f20\u91cf\u7684\u5f62\u72b6\u548c\u7ef4\u5ea6\u7b26\u5408\u8981\u6c42\u3002\u4f8b\u5982\uff0c\u5728\u8fdb\u884c\u77e9\u9635\u4e58\u6cd5\u65f6\uff0c\u4e24\u4e2a\u5f20\u91cf\u7684\u6700\u540e\u4e00\u4e2a\u7ef4\u5ea6\u5fc5\u987b\u76f8\u540c\uff0c\u5426\u5219\u65e0\u6cd5\u8fdb\u884c\u4e58\u6cd5\u8fd0\u7b97\u3002\u540c\u65f6\uff0c\u5728\u8fdb\u884c\u7ebf\u6027\u4ee3\u6570\u64cd\u4f5c\u65f6\uff0c\u4e5f\u9700\u8981\u8003\u8651\u6570\u636e\u7c7b\u578b\u548c\u8bbe\u5907\uff0c\u5982\u4f7f\u7528float\u6216double\u6570\u636e\u7c7b\u578b\uff0c\u4f7f\u7528CPU\u6216GPU\u8bbe\u5907\u7b49\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u5f20\u91cf\u64cd\u4f5c\u4e0e\u57fa\u672c\u6570\u5b66\u8fd0\u7b97\u5e7f\u64ad\u673a\u5236<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u5e7f\u64ad\u673a\u5236\uff08broadcasting\uff09\u662f\u4e00\u79cd\u975e\u5e38\u91cd\u8981\u7684\u5f20\u91cf\u64cd\u4f5c\uff0c\u53ef\u4ee5\u7528\u4e8e\u4f7f\u4e0d\u540c\u5f62\u72b6\u7684\u5f20\u91cf\u5728\u6570\u5b66\u8fd0\u7b97\u4e2d\u9002\u914d\u3002\u5e7f\u64ad\u673a\u5236\u53ef\u4ee5\u4f7f\u5f97\u5177\u6709\u4e0d\u540c\u5f62\u72b6\u7684\u5f20\u91cf\u53ef\u4ee5\u8fdb\u884c\u6570\u5b66\u8fd0\u7b97\uff0c\u800c\u4e0d\u9700\u8981\u8fdb\u884c\u663e\u5f0f\u7684\u5f20\u91cf\u5f62\u72b6\u53d8\u6362\u3002\u4ee5\u4e0b\u662f\u51e0\u79cd\u5e38\u89c1\u7684\u5e7f\u64ad\u673a\u5236\u793a\u4f8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4e8c\u7ef4\u5f20\u91cf\u4e0e\u4e00\u7ef4\u5f20\u91cf\u76f8\u52a0\uff1aluaCopy code<code>import torch x = torch.tensor([[1, 2], [3, 4]]) y = torch.tensor([1, 2]) z = x + y print(z) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[2, 4], [4, 6]])<\/code><\/li>\n\n\n\n<li>\u4e09\u7ef4\u5f20\u91cf\u4e0e\u4e8c\u7ef4\u5f20\u91cf\u76f8\u4e58\uff1aluaCopy code<code>import torch x = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) y = torch.tensor([[1, 2], [3, 4]]) z = x.mm(y) print(z) <\/code>\u8f93\u51fa\uff1aluaCopy code<code>tensor([[[ 7, 10], [15, 22]], [[19, 22], [43, 50]]])<\/code><\/li>\n\n\n\n<li>\u4e00\u7ef4\u5f20\u91cf\u4e0e\u6807\u91cf\u76f8\u4e58\uff1ajavaCopy code<code>import torch x = torch.tensor([1, 2, 3]) y = 2 z = x * y print(z) <\/code>\u8f93\u51fa\uff1ascssCopy code<code>tensor([2, 4, 6])<\/code><\/li>\n<\/ol>\n\n\n\n<p>\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u5e7f\u64ad\u673a\u5236\u53ef\u4ee5\u4f7f\u4e0d\u540c\u5f62\u72b6\u7684\u5f20\u91cf\u8fdb\u884c\u6570\u5b66\u8fd0\u7b97\uff0c\u5982\u5c06\u4e8c\u7ef4\u5f20\u91cf\u548c\u4e00\u7ef4\u5f20\u91cf\u76f8\u52a0\uff0c\u5c06\u4e09\u7ef4\u5f20\u91cf\u548c\u4e8c\u7ef4\u5f20\u91cf\u76f8\u4e58\uff0c\u5c06\u4e00\u7ef4\u5f20\u91cf\u548c\u6807\u91cf\u76f8\u4e58\u7b49\u3002\u5e7f\u64ad\u673a\u5236\u4f1a\u81ea\u52a8\u6269\u5c55\u5f20\u91cf\u7684\u7ef4\u5ea6\uff0c\u4ee5\u5339\u914d\u5176\u4ed6\u5f20\u91cf\u7684\u7ef4\u5ea6\uff0c\u4ece\u800c\u4f7f\u5f20\u91cf\u5728\u6570\u5b66\u8fd0\u7b97\u4e2d\u9002\u914d\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728\u8fdb\u884c\u5e7f\u64ad\u673a\u5236\u65f6\uff0c\u9700\u8981\u9075\u5faa\u5e7f\u64ad\u673a\u5236\u7684\u89c4\u5219\uff0c\u5982\u5f20\u91cf\u7684\u7ef4\u5ea6\u5fc5\u987b\u7b26\u5408\u4e00\u5b9a\u7684\u89c4\u5219\uff0c\u4ee5\u4fdd\u8bc1\u6570\u5b66\u8fd0\u7b97\u7684\u6b63\u786e\u6027\u548c\u9ad8\u6548\u6027\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u81ea\u52a8\u6c42\u5bfc\u4e0e\u4f18\u5316\u8ba1\u7b97\u56fe\u4e0e\u81ea\u52a8\u6c42\u5bfc<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u81ea\u52a8\u6c42\u5bfc\u548c\u4f18\u5316\u662f\u6df1\u5ea6\u5b66\u4e60\u4e2d\u7684\u91cd\u8981\u64cd\u4f5c\u4e4b\u4e00\uff0c\u53ef\u4ee5\u7528\u4e8e\u6a21\u578b\u7684\u8bad\u7ec3\u548c\u53c2\u6570\u4f18\u5316\u7b49\u4efb\u52a1\u4e2d\u3002\u4ee5\u4e0b\u662f\u51e0\u79cd\u5e38\u89c1\u7684\u81ea\u52a8\u6c42\u5bfc\u548c\u4f18\u5316\u793a\u4f8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u8ba1\u7b97\u56fe\uff1a\u5728PyTorch\u4e2d\uff0c\u81ea\u52a8\u6c42\u5bfc\u548c\u4f18\u5316\u7684\u57fa\u7840\u662f\u8ba1\u7b97\u56fe\uff08Computation Graph\uff09\u3002\u8ba1\u7b97\u56fe\u662f\u4e00\u79cd\u7528\u4e8e\u63cf\u8ff0\u6a21\u578b\u8ba1\u7b97\u7684\u56fe\u7ed3\u6784\uff0c\u5176\u4e2d\u8282\u70b9\u8868\u793a\u5f20\u91cf\uff0c\u8fb9\u8868\u793a\u5f20\u91cf\u95f4\u7684\u8ba1\u7b97\u5173\u7cfb\u3002\u8ba1\u7b97\u56fe\u7684\u6784\u5efa\u53ef\u4ee5\u901a\u8fc7\u8c03\u7528PyTorch\u4e2d\u7684autograd\u6a21\u5757\u5b9e\u73b0\u3002pythonCopy code<code>import torch x = torch.tensor([1, 2], dtype=torch.float, requires_grad=True) y = torch.tensor([2, 2], dtype=torch.float, requires_grad=True) z = x + y w = z.sum() print(w) <\/code>\u8f93\u51fa\uff1ascssCopy code<code>tensor(6., grad_fn=&lt;SumBackward0&gt;) <\/code>\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u6784\u5efa\u4e86\u4e00\u4e2a\u7b80\u5355\u7684\u8ba1\u7b97\u56fe\uff0c\u5176\u4e2dx\u548cy\u662f\u4e24\u4e2a\u5f20\u91cf\uff0cz\u662f\u5b83\u4eec\u7684\u548c\uff0cw\u662fz\u7684\u548c\u3002\u8bbe\u7f6erequires_grad=True\u53ef\u4ee5\u4f7f\u8ba1\u7b97\u56fe\u4e2d\u7684\u8282\u70b9\u652f\u6301\u81ea\u52a8\u6c42\u5bfc\u3002<\/li>\n\n\n\n<li>\u81ea\u52a8\u6c42\u5bfc\uff1a\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528\u81ea\u52a8\u6c42\u5bfc\u529f\u80fd\u6765\u8ba1\u7b97\u5f20\u91cf\u7684\u5bfc\u6570\u3002\u5728\u8ba1\u7b97\u56fe\u4e2d\uff0c\u6bcf\u4e2a\u5f20\u91cf\u8282\u70b9\u90fd\u6709\u4e00\u4e2agrad_fn\u5c5e\u6027\uff0c\u5b83\u6307\u5411\u8ba1\u7b97\u8be5\u5f20\u91cf\u7684\u51fd\u6570\uff0c\u5373\u5bfc\u6570\u7684\u8ba1\u7b97\u51fd\u6570\u3002\u53ef\u4ee5\u901a\u8fc7\u8c03\u7528backward()\u51fd\u6570\u5b9e\u73b0\u5bf9\u5f20\u91cf\u7684\u5bfc\u6570\u8ba1\u7b97\u3002pythonCopy code<code>import torch x = torch.tensor([1, 2], dtype=torch.float, requires_grad=True) y = torch.tensor([2, 2], dtype=torch.float, requires_grad=True) z = x + y w = z.sum() w.backward() print(x.grad) print(y.grad) <\/code>\u8f93\u51fa\uff1ascssCopy code<code>tensor([1., 1.]) tensor([1., 1.]) <\/code>\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u8c03\u7528\u4e86backward()\u51fd\u6570\u5bf9\u5f20\u91cf\u7684\u5bfc\u6570\u8fdb\u884c\u4e86\u8ba1\u7b97\uff0c\u5e76\u901a\u8fc7x.grad\u548cy.grad\u83b7\u53d6\u4e86\u5bf9\u5e94\u7684\u5bfc\u6570\u503c\u3002<\/li>\n\n\n\n<li>\u4f18\u5316\u5668\uff1a\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528\u4f18\u5316\u5668\uff08Optimizer\uff09\u5bf9\u6a21\u578b\u7684\u53c2\u6570\u8fdb\u884c\u4f18\u5316\u3002\u4f18\u5316\u5668\u662f\u4e00\u4e2a\u5b9e\u73b0\u4e86\u4e0d\u540c\u4f18\u5316\u7b97\u6cd5\u7684\u7c7b\uff0c\u5982\u968f\u673a\u68af\u5ea6\u4e0b\u964d\uff08SGD\uff09\u3001Adam\u7b49\u3002\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6e\u6a21\u578b\u7684\u53c2\u6570\u3001\u635f\u5931\u51fd\u6570\u548c\u4f18\u5316\u5668\uff0c\u5b9e\u73b0\u6a21\u578b\u53c2\u6570\u7684\u66f4\u65b0\u3002scssCopy code<code>import torch x = torch.tensor([1, 2], dtype=torch.float, requires_grad=True) y = torch.tensor([2, 2], dtype=torch.float, requires_grad=True) z = x + y w = z.sum() optimizer = torch.optim.SGD([x, y], lr=0.01) optimizer.zero_grad() w.backward() optimizer.step() print(x) print(y) <\/code>\u8f93\u51fa\uff1ascssCopy code<code>tensor([0.9800, 1.9800], requires_grad=True) tensor([1.9800, 1.9800], requires_grad=True) ``<\/code><\/li>\n<\/ol>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u7ee7\u7eed<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"4\">\n<li>\u505c\u6b62\u68af\u5ea6\u8ba1\u7b97\uff1a\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6erequires_grad=False\u6765\u505c\u6b62\u68af\u5ea6\u8ba1\u7b97\u3002\u505c\u6b62\u68af\u5ea6\u8ba1\u7b97\u53ef\u4ee5\u7528\u4e8e\u6a21\u578b\u7684\u51bb\u7ed3\u6216\u53c2\u6570\u5171\u4eab\u7b49\u4efb\u52a1\u4e2d\u3002pythonCopy code<code>import torch x = torch.tensor([1, 2], dtype=torch.float, requires_grad=True) y = torch.tensor([2, 2], dtype=torch.float) z = x + y with torch.no_grad(): w = z.sum() print(w.requires_grad) <\/code>\u8f93\u51fa\uff1agraphqlCopy code<code>False <\/code>\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u901a\u8fc7\u8bbe\u7f6ewith torch.no_grad()\u8bed\u53e5\u5757\u6765\u505c\u6b62\u68af\u5ea6\u8ba1\u7b97\uff0c\u4f7f\u5f97w\u4e0d\u518d\u652f\u6301\u81ea\u52a8\u6c42\u5bfc\u3002<\/li>\n\n\n\n<li>\u52a8\u6001\u56fe\u548c\u9759\u6001\u56fe\uff1aPyTorch\u4e2d\u652f\u6301\u4e24\u79cd\u8ba1\u7b97\u56fe\uff0c\u5373\u52a8\u6001\u56fe\u548c\u9759\u6001\u56fe\u3002\u52a8\u6001\u56fe\u6307\u7684\u662f\u5728\u8fd0\u884c\u65f6\u6784\u5efa\u8ba1\u7b97\u56fe\uff0c\u8fd9\u79cd\u65b9\u5f0f\u7075\u6d3b\u6027\u8f83\u9ad8\uff0c\u9002\u7528\u4e8e\u52a8\u6001\u56fe\u50cf\u3001\u81ea\u7136\u8bed\u8a00\u5904\u7406\u7b49\u590d\u6742\u7684\u4efb\u52a1\u3002\u800c\u9759\u6001\u56fe\u6307\u7684\u662f\u5728\u7f16\u8bd1\u65f6\u6784\u5efa\u8ba1\u7b97\u56fe\uff0c\u8fd9\u79cd\u65b9\u5f0f\u6548\u7387\u8f83\u9ad8\uff0c\u9002\u7528\u4e8e\u8ba1\u7b97\u56fe\u9759\u6001\u4e0d\u53d8\u7684\u4efb\u52a1\u3002\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528\u52a8\u6001\u56fe\u7684\u65b9\u5f0f\u6784\u5efa\u8ba1\u7b97\u56fe\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528\u9759\u6001\u56fe\u7684\u65b9\u5f0f\uff0c\u5982\u4f7f\u7528TorchScript\u6765\u6784\u5efa\u9759\u6001\u56fe\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u4ee5\u4e0a\u662f\u51e0\u79cd\u5e38\u89c1\u7684\u81ea\u52a8\u6c42\u5bfc\u548c\u4f18\u5316\u793a\u4f8b\uff0cPyTorch\u4e2d\u81ea\u52a8\u6c42\u5bfc\u548c\u4f18\u5316\u7684\u529f\u80fd\u975e\u5e38\u5f3a\u5927\u548c\u7075\u6d3b\uff0c\u53ef\u4ee5\u6ee1\u8db3\u5404\u79cd\u6df1\u5ea6\u5b66\u4e60\u4efb\u52a1\u7684\u9700\u6c42\u3002\u540c\u65f6\uff0c\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u81ea\u52a8\u6c42\u5bfc\u548c\u4f18\u5316\u7684\u6b63\u786e\u6027\u548c\u6548\u7387\u53d6\u51b3\u4e8e\u8ba1\u7b97\u56fe\u7684\u6784\u5efa\u548c\u4f18\u5316\u5668\u7684\u9009\u62e9\u7b49\u56e0\u7d20\uff0c\u9700\u8981\u5728\u5b9e\u8df5\u4e2d\u4e0d\u65ad\u63a2\u7d22\u548c\u4f18\u5316\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u81ea\u52a8\u6c42\u5bfc\u4e0e\u4f18\u5316\u53cd\u5411\u4f20\u64ad\u4e0e\u68af\u5ea6<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u81ea\u52a8\u6c42\u5bfc\u548c\u4f18\u5316\u662f\u6df1\u5ea6\u5b66\u4e60\u4e2d\u7684\u91cd\u8981\u64cd\u4f5c\u4e4b\u4e00\uff0c\u53ef\u4ee5\u7528\u4e8e\u6a21\u578b\u7684\u8bad\u7ec3\u548c\u53c2\u6570\u4f18\u5316\u7b49\u4efb\u52a1\u4e2d\u3002\u53cd\u5411\u4f20\u64ad\u548c\u68af\u5ea6\u662f\u81ea\u52a8\u6c42\u5bfc\u548c\u4f18\u5316\u7684\u6838\u5fc3\u6982\u5ff5\u4e4b\u4e00\uff0c\u7528\u4e8e\u8ba1\u7b97\u6a21\u578b\u7684\u68af\u5ea6\u548c\u66f4\u65b0\u6a21\u578b\u7684\u53c2\u6570\u3002\u4ee5\u4e0b\u662f\u53cd\u5411\u4f20\u64ad\u548c\u68af\u5ea6\u8ba1\u7b97\u7684\u793a\u4f8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u53cd\u5411\u4f20\u64ad\uff1a\u5728PyTorch\u4e2d\uff0c\u53cd\u5411\u4f20\u64ad\u662f\u8ba1\u7b97\u6a21\u578b\u68af\u5ea6\u7684\u4e00\u79cd\u5e38\u89c1\u65b9\u6cd5\u3002\u53cd\u5411\u4f20\u64ad\u901a\u8fc7\u8ba1\u7b97\u635f\u5931\u51fd\u6570\u5bf9\u6a21\u578b\u53c2\u6570\u7684\u5bfc\u6570\uff0c\u5f97\u5230\u6a21\u578b\u7684\u68af\u5ea6\u4fe1\u606f\uff0c\u5e76\u7528\u4e8e\u53c2\u6570\u7684\u4f18\u5316\u3002\u53ef\u4ee5\u901a\u8fc7\u8c03\u7528backward()\u51fd\u6570\u5b9e\u73b0\u53cd\u5411\u4f20\u64ad\u3002pythonCopy code<code>import torch x = torch.tensor([1, 2], dtype=torch.float, requires_grad=True) y = torch.tensor([2, 2], dtype=torch.float, requires_grad=True) z = x + y w = z.sum() w.backward() print(x.grad) print(y.grad) <\/code>\u8f93\u51fa\uff1ascssCopy code<code>tensor([1., 1.]) tensor([1., 1.]) <\/code>\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u901a\u8fc7\u8c03\u7528backward()\u51fd\u6570\u5bf9\u5f20\u91cf\u7684\u5bfc\u6570\u8fdb\u884c\u4e86\u8ba1\u7b97\uff0c\u5e76\u901a\u8fc7x.grad\u548cy.grad\u83b7\u53d6\u4e86\u5bf9\u5e94\u7684\u5bfc\u6570\u503c\u3002<\/li>\n\n\n\n<li>\u68af\u5ea6\u8ba1\u7b97\uff1a\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u901a\u8fc7\u8c03\u7528grad()\u51fd\u6570\u8ba1\u7b97\u5f20\u91cf\u7684\u68af\u5ea6\u3002\u68af\u5ea6\u8ba1\u7b97\u53ef\u4ee5\u7528\u4e8e\u6a21\u578b\u53c2\u6570\u7684\u66f4\u65b0\u3001\u635f\u5931\u51fd\u6570\u7684\u4f18\u5316\u7b49\u4efb\u52a1\u4e2d\u3002pythonCopy code<code>import torch x = torch.tensor([1, 2], dtype=torch.float, requires_grad=True) y = torch.tensor([2, 2], dtype=torch.float, requires_grad=True) z = x + y w = z.sum() grad = torch.autograd.grad(w, [x, y]) print(grad[0]) print(grad[1]) <\/code>\u8f93\u51fa\uff1ascssCopy code<code>tensor([1., 1.]) tensor([1., 1.]) <\/code>\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u901a\u8fc7\u8c03\u7528grad()\u51fd\u6570\u8ba1\u7b97\u4e86\u5f20\u91cfx\u548cy\u7684\u68af\u5ea6\uff0c\u5e76\u901a\u8fc7grad[0]\u548cgrad[1]\u83b7\u53d6\u4e86\u5bf9\u5e94\u7684\u68af\u5ea6\u503c\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728\u8fdb\u884c\u53cd\u5411\u4f20\u64ad\u548c\u68af\u5ea6\u8ba1\u7b97\u65f6\uff0c\u9700\u8981\u786e\u4fdd\u5f20\u91cf\u7684requires_grad\u5c5e\u6027\u4e3aTrue\uff0c\u5e76\u4e14\u5728\u8ba1\u7b97\u56fe\u6784\u5efa\u65f6\uff0c\u9700\u8981\u8bbe\u7f6e\u8282\u70b9\u7684requires_grad\u5c5e\u6027\u4e3aTrue\u3002\u540c\u65f6\uff0c\u4e5f\u9700\u8981\u6ce8\u610f\u53cd\u5411\u4f20\u64ad\u548c\u68af\u5ea6\u8ba1\u7b97\u7684\u6b63\u786e\u6027\u548c\u6548\u7387\uff0c\u5982\u907f\u514d\u68af\u5ea6\u7206\u70b8\u3001\u6d88\u5931\u7b49\u95ee\u9898\uff0c\u9009\u62e9\u5408\u9002\u7684\u4f18\u5316\u5668\u7b49\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u81ea\u52a8\u6c42\u5bfc\u4e0e\u4f18\u5316\u4f18\u5316\u5668\u7b80\u4ecb<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u4f18\u5316\u5668\u662f\u6a21\u578b\u53c2\u6570\u4f18\u5316\u7684\u6838\u5fc3\u7ec4\u4ef6\u4e4b\u4e00\uff0c\u901a\u8fc7\u5bf9\u6a21\u578b\u53c2\u6570\u8fdb\u884c\u68af\u5ea6\u8ba1\u7b97\u548c\u66f4\u65b0\uff0c\u5b9e\u73b0\u6a21\u578b\u7684\u8bad\u7ec3\u548c\u4f18\u5316\u3002PyTorch\u4e2d\u63d0\u4f9b\u4e86\u591a\u79cd\u4f18\u5316\u5668\uff0c\u5982SGD\u3001Adam\u3001RMSprop\u7b49\u3002\u4ee5\u4e0b\u662f\u51e0\u79cd\u5e38\u89c1\u7684\u4f18\u5316\u5668\u793a\u4f8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>SGD\u4f18\u5316\u5668\uff1a\u968f\u673a\u68af\u5ea6\u4e0b\u964d\uff08Stochastic Gradient Descent\uff0cSGD\uff09\u662f\u6df1\u5ea6\u5b66\u4e60\u4e2d\u6700\u5e38\u7528\u7684\u4f18\u5316\u7b97\u6cd5\u4e4b\u4e00\uff0c\u5b83\u7684\u6838\u5fc3\u601d\u60f3\u662f\u901a\u8fc7\u68af\u5ea6\u4e0b\u964d\u66f4\u65b0\u6a21\u578b\u53c2\u6570\u3002\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528torch.optim.SGD()\u51fd\u6570\u521b\u5efaSGD\u4f18\u5316\u5668\uff0c\u5e76\u8bbe\u7f6e\u5b66\u4e60\u7387\u548c\u5176\u4ed6\u8d85\u53c2\u6570\u3002scssCopy code<code>import torch x = torch.randn(10, 5) y = torch.randn(10, 2) model = torch.nn.Linear(5, 2) criterion = torch.nn.MSELoss() optimizer = torch.optim.SGD(model.parameters(), lr=0.1) for epoch in range(100): y_pred = model(x) loss = criterion(y_pred, y) optimizer.zero_grad() loss.backward() optimizer.step() print('Epoch:', epoch, 'Loss:', loss.item()) <\/code>\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u901a\u8fc7torch.optim.SGD()\u51fd\u6570\u521b\u5efa\u4e86SGD\u4f18\u5316\u5668\uff0c\u5e76\u8bbe\u7f6e\u4e86\u5b66\u4e60\u7387\u4e3a0.1\u3002\u7136\u540e\u5728\u8bad\u7ec3\u5faa\u73af\u4e2d\uff0c\u4f7f\u7528\u4f18\u5316\u5668\u5bf9\u6a21\u578b\u53c2\u6570\u8fdb\u884c\u68af\u5ea6\u8ba1\u7b97\u548c\u66f4\u65b0\u3002<\/li>\n\n\n\n<li>Adam\u4f18\u5316\u5668\uff1aAdam\u662f\u4e00\u79cd\u5e38\u7528\u7684\u81ea\u9002\u5e94\u4f18\u5316\u7b97\u6cd5\uff0c\u5b83\u7ed3\u5408\u4e86\u968f\u673a\u68af\u5ea6\u4e0b\u964d\u548c\u52a8\u91cf\u4f18\u5316\u7684\u4f18\u70b9\u3002\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528torch.optim.Adam()\u51fd\u6570\u521b\u5efaAdam\u4f18\u5316\u5668\uff0c\u5e76\u8bbe\u7f6e\u5b66\u4e60\u7387\u548c\u5176\u4ed6\u8d85\u53c2\u6570\u3002scssCopy code<code>import torch x = torch.randn(10, 5) y = torch.randn(10, 2) model = torch.nn.Linear(5, 2) criterion = torch.nn.MSELoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.1) for epoch in range(100): y_pred = model(x) loss = criterion(y_pred, y) optimizer.zero_grad() loss.backward() optimizer.step() print('Epoch:', epoch, 'Loss:', loss.item()) <\/code>\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u901a\u8fc7torch.optim.Adam()\u51fd\u6570\u521b\u5efa\u4e86Adam\u4f18\u5316\u5668\uff0c\u5e76\u8bbe\u7f6e\u4e86\u5b66\u4e60\u7387\u4e3a0.1\u3002\u7136\u540e\u5728\u8bad\u7ec3\u5faa\u73af\u4e2d\uff0c\u4f7f\u7528\u4f18\u5316\u5668\u5bf9\u6a21\u578b\u53c2\u6570\u8fdb\u884c\u68af\u5ea6\u8ba1\u7b97\u548c\u66f4\u65b0\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728\u9009\u62e9\u4f18\u5316\u5668\u65f6\uff0c\u9700\u8981\u6839\u636e\u5177\u4f53\u7684\u4efb\u52a1\u548c\u6a21\u578b\u9009\u62e9\u5408\u9002\u7684\u4f18\u5316\u5668\u548c\u8d85\u53c2\u6570\uff0c\u5982\u5b66\u4e60\u7387\u3001\u52a8\u91cf\u3001\u6743\u91cd\u8870\u51cf\u7b49\u3002\u540c\u65f6\uff0c\u4e5f\u9700\u8981\u6ce8\u610f\u4f18\u5316\u5668\u7684\u6b63\u786e\u6027\u548c\u6548\u7387\uff0c\u5982\u907f\u514d\u68af\u5ea6\u7206\u70b8\u3001\u6d88\u5931\u7b49\u95ee\u9898\uff0c\u9009\u62e9\u5408\u9002\u7684\u5b66\u4e60\u7387\u548c\u5176\u4ed6\u8d85\u53c2\u6570\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u81ea\u52a8\u6c42\u5bfc\u4e0e\u4f18\u5316\u5e38\u7528\u4f18\u5316\u5668\u7684\u4f7f\u7528\u4e0e\u6bd4\u8f83<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u5e38\u89c1\u7684\u4f18\u5316\u5668\u5305\u62ecSGD\u3001Adam\u3001RMSprop\u7b49\uff0c\u4e0d\u540c\u7684\u4f18\u5316\u5668\u5728\u4f18\u5316\u6a21\u578b\u53c2\u6570\u7684\u8fc7\u7a0b\u4e2d\u6709\u7740\u4e0d\u540c\u7684\u4f18\u7f3a\u70b9\u548c\u9002\u7528\u573a\u666f\u3002\u4ee5\u4e0b\u662f\u5e38\u7528\u4f18\u5316\u5668\u7684\u4f7f\u7528\u548c\u6bd4\u8f83\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>SGD\u4f18\u5316\u5668\uff1aSGD\u662f\u4e00\u79cd\u5e38\u89c1\u7684\u4f18\u5316\u7b97\u6cd5\uff0c\u5b83\u7684\u6838\u5fc3\u601d\u60f3\u662f\u901a\u8fc7\u68af\u5ea6\u4e0b\u964d\u66f4\u65b0\u6a21\u578b\u53c2\u6570\u3002\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528torch.optim.SGD()\u51fd\u6570\u521b\u5efaSGD\u4f18\u5316\u5668\uff0c\u5e76\u8bbe\u7f6e\u5b66\u4e60\u7387\u548c\u5176\u4ed6\u8d85\u53c2\u6570\u3002SGD\u4f18\u5316\u5668\u9002\u7528\u4e8e\u7b80\u5355\u6a21\u578b\u3001\u6570\u636e\u96c6\u8f83\u5c0f\u7684\u60c5\u51b5\uff0c\u4f46\u5728\u8bad\u7ec3\u6df1\u5ea6\u795e\u7ecf\u7f51\u7edc\u7b49\u590d\u6742\u6a21\u578b\u65f6\uff0c\u5bb9\u6613\u9677\u5165\u5c40\u90e8\u6700\u4f18\u89e3\u548c\u68af\u5ea6\u6d88\u5931\u7b49\u95ee\u9898\u3002<\/li>\n\n\n\n<li>Adam\u4f18\u5316\u5668\uff1aAdam\u662f\u4e00\u79cd\u5e38\u7528\u7684\u81ea\u9002\u5e94\u4f18\u5316\u7b97\u6cd5\uff0c\u5b83\u7ed3\u5408\u4e86\u968f\u673a\u68af\u5ea6\u4e0b\u964d\u548c\u52a8\u91cf\u4f18\u5316\u7684\u4f18\u70b9\u3002\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528torch.optim.Adam()\u51fd\u6570\u521b\u5efaAdam\u4f18\u5316\u5668\uff0c\u5e76\u8bbe\u7f6e\u5b66\u4e60\u7387\u548c\u5176\u4ed6\u8d85\u53c2\u6570\u3002Adam\u4f18\u5316\u5668\u9002\u7528\u4e8e\u6df1\u5ea6\u795e\u7ecf\u7f51\u7edc\u7b49\u590d\u6742\u6a21\u578b\uff0c\u53ef\u4ee5\u5feb\u901f\u6536\u655b\u548c\u907f\u514d\u5c40\u90e8\u6700\u4f18\u89e3\u548c\u68af\u5ea6\u6d88\u5931\u7b49\u95ee\u9898\u3002<\/li>\n\n\n\n<li>RMSprop\u4f18\u5316\u5668\uff1aRMSprop\u662f\u4e00\u79cd\u5e38\u7528\u7684\u81ea\u9002\u5e94\u4f18\u5316\u7b97\u6cd5\uff0c\u5b83\u901a\u8fc7\u52a8\u6001\u8c03\u6574\u5b66\u4e60\u7387\uff0c\u53ef\u4ee5\u63d0\u9ad8\u6a21\u578b\u5728\u975e\u51f8\u4f18\u5316\u95ee\u9898\u4e0a\u7684\u6027\u80fd\u3002\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528torch.optim.RMSprop()\u51fd\u6570\u521b\u5efaRMSprop\u4f18\u5316\u5668\uff0c\u5e76\u8bbe\u7f6e\u5b66\u4e60\u7387\u548c\u5176\u4ed6\u8d85\u53c2\u6570\u3002RMSprop\u4f18\u5316\u5668\u9002\u7528\u4e8e\u5177\u6709\u7a00\u758f\u68af\u5ea6\u7684\u95ee\u9898\u548c\u975e\u51f8\u4f18\u5316\u95ee\u9898\uff0c\u53ef\u4ee5\u63d0\u9ad8\u6a21\u578b\u7684\u6536\u655b\u901f\u5ea6\u548c\u6cdb\u5316\u80fd\u529b\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u5728\u4f7f\u7528\u4f18\u5316\u5668\u65f6\uff0c\u9700\u8981\u6839\u636e\u5177\u4f53\u7684\u4efb\u52a1\u548c\u6a21\u578b\u9009\u62e9\u5408\u9002\u7684\u4f18\u5316\u5668\u548c\u8d85\u53c2\u6570\uff0c\u5982\u5b66\u4e60\u7387\u3001\u52a8\u91cf\u3001\u6743\u91cd\u8870\u51cf\u7b49\u3002\u540c\u65f6\uff0c\u4e5f\u9700\u8981\u6ce8\u610f\u4f18\u5316\u5668\u7684\u6b63\u786e\u6027\u548c\u6548\u7387\uff0c\u5982\u907f\u514d\u68af\u5ea6\u7206\u70b8\u3001\u6d88\u5931\u7b49\u95ee\u9898\uff0c\u9009\u62e9\u5408\u9002\u7684\u5b66\u4e60\u7387\u548c\u5176\u4ed6\u8d85\u53c2\u6570\u3002<\/p>\n\n\n\n<p>\u53e6\u5916\uff0c\u5728\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u901a\u5e38\u9700\u8981\u8fdb\u884c\u4f18\u5316\u5668\u7684\u6bd4\u8f83\u548c\u8c03\u6574\u3002\u53ef\u4ee5\u901a\u8fc7\u6bd4\u8f83\u4e0d\u540c\u4f18\u5316\u5668\u5728\u540c\u4e00\u4efb\u52a1\u4e0a\u7684\u8868\u73b0\uff0c\u9009\u62e9\u6700\u5408\u9002\u7684\u4f18\u5316\u5668\u548c\u8d85\u53c2\u6570\u3002\u4ee5\u4e0b\u662f\u4f7f\u7528\u4e0d\u540c\u4f18\u5316\u5668\u5bf9\u540c\u4e00\u4efb\u52a1\u8fdb\u884c\u8bad\u7ec3\u7684\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pythonCopy code<code>import torch\nfrom torch import nn\nfrom torch.utils.data import DataLoader\nfrom torchvision import datasets, transforms\n\ntransform = transforms.Compose([\n    transforms.ToTensor(),\n    transforms.Normalize((0.1307,), (0.3081,))\n])\n\ntrain_dataset = datasets.MNIST('.\/data', train=True, download=True, transform=transform)\ntrain_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)\n\nclass MLP(nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.fc1 = nn.Linear(784, 256)\n        self.fc2\n<\/code><\/pre>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u7ee7\u7eed<\/p>\n\n\n\n<p>class MLP(nn.Module): def <strong>init<\/strong>(self): super().<strong>init<\/strong>() self.fc1 = nn.Linear(784, 256) self.fc2 = nn.Linear(256, 128) self.fc3 = nn.Linear(128, 10) self.relu = nn.ReLU()<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">rubyCopy code<code>def forward(self, x):\n    x = x.view(-1, 784)\n    x = self.relu(self.fc1(x))\n    x = self.relu(self.fc2(x))\n    x = self.fc3(x)\n    return x\n<\/code><\/pre>\n\n\n\n<p>def train(model, optimizer, criterion, train_loader, device): model.train() for batch_idx, (data, target) in enumerate(train_loader): data, target = data.to(device), target.to(device) optimizer.zero_grad() output = model(data) loss = criterion(output, target) loss.backward() optimizer.step()<\/p>\n\n\n\n<p>def test(model, criterion, test_loader, device): model.eval() test_loss = 0 correct = 0 with torch.no_grad(): for data, target in test_loader: data, target = data.to(device), target.to(device) output = model(data) test_loss += criterion(output, target).item() pred = output.argmax(dim=1, keepdim=True) correct += pred.eq(target.view_as(pred)).sum().item()<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">scssCopy code<code>test_loss \/= len(test_loader.dataset)\naccuracy = 100. * correct \/ len(test_loader.dataset)\nprint('Test set: Average loss: {:.4f}, Accuracy: {}\/{} ({:.2f}%)'.format(\n    test_loss, correct, len(test_loader.dataset), accuracy))\n<\/code><\/pre>\n\n\n\n<p>device = torch.device(&#8220;cuda&#8221; if torch.cuda.is_available() else &#8220;cpu&#8221;) model = MLP().to(device) criterion = nn.CrossEntropyLoss() train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True) test_loader = DataLoader(datasets.MNIST(&#8216;.\/data&#8217;, train=False, transform=transform), batch_size=1000, shuffle=True)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u4f7f\u7528SGD\u4f18\u5316\u5668<\/h1>\n\n\n\n<p>optimizer = torch.optim.SGD(model.parameters(), lr=0.01) for epoch in range(10): train(model, optimizer, criterion, train_loader, device) test(model, criterion, test_loader, device)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u4f7f\u7528Adam\u4f18\u5316\u5668<\/h1>\n\n\n\n<p>model = MLP().to(device) optimizer = torch.optim.Adam(model.parameters(), lr=0.001) for epoch in range(10): train(model, optimizer, criterion, train_loader, device) test(model, criterion, test_loader, device)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u4f7f\u7528RMSprop\u4f18\u5316\u5668<\/h1>\n\n\n\n<p>model = MLP().to(device) optimizer = torch.optim.RMSprop(model.parameters(), lr=0.001) for epoch in range(10): train(model, optimizer, criterion, train_loader, device) test(model, criterion, test_loader, device)<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Copy code<code>\n\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u4f7f\u7528\u4e86\u4e09\u79cd\u4e0d\u540c\u7684\u4f18\u5316\u5668\uff08SGD\u3001Adam\u3001RMSprop\uff09\u5bf9\u540c\u4e00\u4efb\u52a1\uff08MNIST\u624b\u5199\u6570\u5b57\u8bc6\u522b\uff09\u8fdb\u884c\u4e86\u8bad\u7ec3\uff0c\u5e76\u6bd4\u8f83\u4e86\u5b83\u4eec\u7684\u8868\u73b0\u3002\u901a\u8fc7\u6bd4\u8f83\u4e0d\u540c\u4f18\u5316\u5668\u5728\u540c\u4e00\u4efb\u52a1\u4e0a\u7684\u8868\u73b0\uff0c\u53ef\u4ee5\u9009\u62e9\u6700\u5408\u9002\u7684\u4f18\u5316\u5668\u548c\u8d85\u53c2\u6570\u3002\n<\/code><\/pre>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u6784\u5efa\u795e\u7ecf\u7f51\u7edc\u6a21\u578b<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u6784\u5efa\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u53ef\u4ee5\u4f7f\u7528torch.nn\u6a21\u5757\uff0c\u8be5\u6a21\u5757\u63d0\u4f9b\u4e86\u4e00\u7cfb\u5217\u7684\u795e\u7ecf\u7f51\u7edc\u5c42\u548c\u6fc0\u6d3b\u51fd\u6570\u3002\u901a\u8fc7\u7ee7\u627fnn.Module\u7c7b\u548c\u5b9e\u73b0forward()\u65b9\u6cd5\uff0c\u53ef\u4ee5\u6784\u5efa\u81ea\u5df1\u7684\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u3002<\/p>\n\n\n\n<p>\u4ee5\u4e0b\u662f\u6784\u5efa\u4e00\u4e2a\u7b80\u5355\u7684\u5168\u8fde\u63a5\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u7684\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pythonCopy code<code>import torch\nfrom torch import nn\n\nclass Net(nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.fc1 = nn.Linear(784, 256)\n        self.fc2 = nn.Linear(256, 128)\n        self.fc3 = nn.Linear(128, 10)\n        self.relu = nn.ReLU()\n\n    def forward(self, x):\n        x = x.view(-1, 784)\n        x = self.relu(self.fc1(x))\n        x = self.relu(self.fc2(x))\n        x = self.fc3(x)\n        return x\n<\/code><\/pre>\n\n\n\n<p>\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u5b9a\u4e49\u4e86\u4e00\u4e2a\u540d\u4e3aNet\u7684\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\uff0c\u5b83\u5305\u62ec\u4e09\u4e2a\u5168\u8fde\u63a5\u5c42\u548c\u4e00\u4e2aReLU\u6fc0\u6d3b\u51fd\u6570\u3002\u5728\u521d\u59cb\u5316\u65b9\u6cd5__init__()\u4e2d\uff0c\u4f7f\u7528nn.Linear()\u51fd\u6570\u521b\u5efa\u4e86\u4e09\u4e2a\u5168\u8fde\u63a5\u5c42\uff0c\u5206\u522b\u662f\u8f93\u5165\u5c42\uff08784\u7ef4\uff09\u548c\u4e24\u4e2a\u9690\u85cf\u5c42\uff08256\u7ef4\u548c128\u7ef4\uff09\uff0c\u540c\u65f6\u521b\u5efa\u4e86\u4e00\u4e2aReLU\u6fc0\u6d3b\u51fd\u6570\u3002\u5728\u524d\u5411\u4f20\u64ad\u65b9\u6cd5forward()\u4e2d\uff0c\u9996\u5148\u5bf9\u8f93\u5165\u8fdb\u884creshape\u64cd\u4f5c\uff0c\u7136\u540e\u4f9d\u6b21\u901a\u8fc7\u4e09\u4e2a\u5168\u8fde\u63a5\u5c42\u548cReLU\u6fc0\u6d3b\u51fd\u6570\u8fdb\u884c\u8ba1\u7b97\uff0c\u6700\u7ec8\u5f97\u5230\u8f93\u51fa\u7ed3\u679c\u3002<\/p>\n\n\n\n<p>\u5728\u4f7f\u7528\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u65f6\uff0c\u9700\u8981\u5bf9\u6a21\u578b\u8fdb\u884c\u5b9e\u4f8b\u5316\uff0c\u5e76\u5c06\u8f93\u5165\u6570\u636e\u4f20\u9012\u7ed9\u6a21\u578b\u8fdb\u884c\u8ba1\u7b97\uff0c\u5982\u4ee5\u4e0b\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">makefileCopy code<code># \u521b\u5efa\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u5b9e\u4f8b\nmodel = Net()\n\n# \u8f93\u5165\u6570\u636e\nx = torch.randn(64, 1, 28, 28)\n\n# \u8ba1\u7b97\u8f93\u51fa\u7ed3\u679c\ny = model(x)\n\n# \u8f93\u51fa\u7ed3\u679c\u5f62\u72b6\nprint(y.shape) # \u8f93\u51fa(64, 10)\n<\/code><\/pre>\n\n\n\n<p>\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u9996\u5148\u521b\u5efa\u4e86\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u5b9e\u4f8bmodel\uff0c\u5e76\u5c06\u8f93\u5165\u6570\u636ex\uff0864\u4e2a1\u901a\u9053\u300128&#215;28\u5927\u5c0f\u7684\u56fe\u50cf\uff09\u4f20\u9012\u7ed9\u6a21\u578b\u8fdb\u884c\u8ba1\u7b97\uff0c\u5f97\u5230\u8f93\u51fa\u7ed3\u679cy\u3002\u6700\u540e\uff0c\u8f93\u51fa\u7ed3\u679c\u5f62\u72b6\u4e3a(64, 10)\uff0c\u8868\u793a\u670964\u4e2a\u6837\u672c\uff0c\u6bcf\u4e2a\u6837\u672c\u670910\u4e2a\u8f93\u51fa\u7279\u5f81\u3002<\/p>\n\n\n\n<p>\u9664\u4e86\u5168\u8fde\u63a5\u5c42\u5916\uff0cPyTorch\u8fd8\u63d0\u4f9b\u4e86\u591a\u79cd\u5e38\u7528\u7684\u795e\u7ecf\u7f51\u7edc\u5c42\uff0c\u5982\u5377\u79ef\u5c42\u3001\u6c60\u5316\u5c42\u3001\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u5c42\u7b49\uff0c\u53ef\u4ee5\u6839\u636e\u5177\u4f53\u4efb\u52a1\u548c\u6570\u636e\u7c7b\u578b\u9009\u62e9\u4e0d\u540c\u7684\u5c42\u8fdb\u884c\u6784\u5efa\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u6fc0\u6d3b\u51fd\u6570\u4e0e\u635f\u5931\u51fd\u6570<\/p>\n\n\n\n<p>PyTorch\u63d0\u4f9b\u4e86\u591a\u79cd\u5e38\u7528\u7684\u6fc0\u6d3b\u51fd\u6570\u548c\u635f\u5931\u51fd\u6570\uff0c\u53ef\u4ee5\u6839\u636e\u5177\u4f53\u4efb\u52a1\u548c\u6a21\u578b\u9009\u62e9\u4e0d\u540c\u7684\u51fd\u6570\u8fdb\u884c\u8ba1\u7b97\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u6fc0\u6d3b\u51fd\u6570\uff1a\u6fc0\u6d3b\u51fd\u6570\u5e38\u7528\u4e8e\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u7684\u975e\u7ebf\u6027\u53d8\u6362\uff0c\u4ee5\u589e\u5f3a\u6a21\u578b\u7684\u8868\u8fbe\u80fd\u529b\u548c\u62df\u5408\u80fd\u529b\u3002\u4ee5\u4e0b\u662fPyTorch\u5e38\u7528\u7684\u6fc0\u6d3b\u51fd\u6570\uff1a\n<ul class=\"wp-block-list\">\n<li>ReLU\u51fd\u6570\uff08nn.ReLU()\uff09\uff1a\u4fee\u6b63\u7ebf\u6027\u5355\u5143\uff08Rectified Linear Unit\uff09\uff0c\u5c06\u5c0f\u4e8e0\u7684\u8f93\u5165\u7f6e\u4e3a0\uff0c\u5927\u4e8e\u7b49\u4e8e0\u7684\u8f93\u5165\u4e0d\u53d8\u3002<\/li>\n\n\n\n<li>Sigmoid\u51fd\u6570\uff08nn.Sigmoid()\uff09\uff1a\u5c06\u8f93\u5165\u6620\u5c04\u5230[0,1]\u7684\u533a\u95f4\u4e0a\uff0c\u901a\u5e38\u7528\u4e8e\u4e8c\u5206\u7c7b\u4efb\u52a1\u7684\u8f93\u51fa\u5c42\u3002<\/li>\n\n\n\n<li>Tanh\u51fd\u6570\uff08nn.Tanh()\uff09\uff1a\u53cc\u66f2\u6b63\u5207\u51fd\u6570\uff0c\u5c06\u8f93\u5165\u6620\u5c04\u5230[-1,1]\u7684\u533a\u95f4\u4e0a\uff0c\u901a\u5e38\u7528\u4e8e\u591a\u5206\u7c7b\u4efb\u52a1\u7684\u8f93\u51fa\u5c42\u3002<\/li>\n\n\n\n<li>Softmax\u51fd\u6570\uff08nn.Softmax()\uff09\uff1a\u5c06\u8f93\u5165\u6620\u5c04\u5230[0,1]\u7684\u533a\u95f4\u4e0a\uff0c\u5e76\u8fdb\u884c\u5f52\u4e00\u5316\u5904\u7406\uff0c\u7528\u4e8e\u591a\u5206\u7c7b\u4efb\u52a1\u7684\u8f93\u51fa\u5c42\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u635f\u5931\u51fd\u6570\uff1a\u635f\u5931\u51fd\u6570\u5e38\u7528\u4e8e\u8bc4\u4ef7\u6a21\u578b\u8f93\u51fa\u548c\u771f\u5b9e\u6807\u7b7e\u4e4b\u95f4\u7684\u5dee\u5f02\uff0c\u5e76\u6839\u636e\u5dee\u5f02\u8fdb\u884c\u4f18\u5316\u3002\u4ee5\u4e0b\u662fPyTorch\u5e38\u7528\u7684\u635f\u5931\u51fd\u6570\uff1a\n<ul class=\"wp-block-list\">\n<li>\u4ea4\u53c9\u71b5\u635f\u5931\u51fd\u6570\uff08nn.CrossEntropyLoss()\uff09\uff1a\u9002\u7528\u4e8e\u591a\u5206\u7c7b\u4efb\u52a1\uff0c\u5c06\u8f93\u51fa\u7ed3\u679c\u4e0e\u771f\u5b9e\u6807\u7b7e\u8fdb\u884c\u6bd4\u8f83\uff0c\u5e76\u8ba1\u7b97\u4ea4\u53c9\u71b5\u635f\u5931\u3002<\/li>\n\n\n\n<li>\u4e8c\u5143\u4ea4\u53c9\u71b5\u635f\u5931\u51fd\u6570\uff08nn.BCELoss()\uff09\uff1a\u9002\u7528\u4e8e\u4e8c\u5206\u7c7b\u4efb\u52a1\uff0c\u5c06\u8f93\u51fa\u7ed3\u679c\u4e0e\u771f\u5b9e\u6807\u7b7e\u8fdb\u884c\u6bd4\u8f83\uff0c\u5e76\u8ba1\u7b97\u4e8c\u5143\u4ea4\u53c9\u71b5\u635f\u5931\u3002<\/li>\n\n\n\n<li>\u5747\u65b9\u8bef\u5dee\u635f\u5931\u51fd\u6570\uff08nn.MSELoss()\uff09\uff1a\u9002\u7528\u4e8e\u56de\u5f52\u4efb\u52a1\uff0c\u5c06\u8f93\u51fa\u7ed3\u679c\u4e0e\u771f\u5b9e\u6807\u7b7e\u8fdb\u884c\u6bd4\u8f83\uff0c\u5e76\u8ba1\u7b97\u5747\u65b9\u8bef\u5dee\u635f\u5931\u3002<\/li>\n\n\n\n<li>KL\u6563\u5ea6\u635f\u5931\u51fd\u6570\uff08nn.KLDivLoss()\uff09\uff1a\u8ba1\u7b97\u6a21\u578b\u8f93\u51fa\u7ed3\u679c\u4e0e\u76ee\u6807\u6982\u7387\u5206\u5e03\u4e4b\u95f4\u7684KL\u6563\u5ea6\uff0c\u5e38\u7528\u4e8e\u751f\u6210\u6a21\u578b\u7684\u8bad\u7ec3\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>\u5728\u4f7f\u7528\u6fc0\u6d3b\u51fd\u6570\u548c\u635f\u5931\u51fd\u6570\u65f6\uff0c\u901a\u5e38\u9700\u8981\u6839\u636e\u5177\u4f53\u4efb\u52a1\u548c\u6a21\u578b\u9009\u62e9\u5408\u9002\u7684\u51fd\u6570\uff0c\u5e76\u8bbe\u7f6e\u5408\u9002\u7684\u8d85\u53c2\u6570\u3002\u540c\u65f6\uff0c\u4e5f\u9700\u8981\u6ce8\u610f\u6fc0\u6d3b\u51fd\u6570\u548c\u635f\u5931\u51fd\u6570\u7684\u6b63\u786e\u6027\u548c\u6548\u7387\uff0c\u5982\u907f\u514d\u68af\u5ea6\u7206\u70b8\u3001\u6d88\u5931\u7b49\u95ee\u9898\uff0c\u9009\u62e9\u5408\u9002\u7684\u5b66\u4e60\u7387\u548c\u5176\u4ed6\u8d85\u53c2\u6570\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u521d\u59cb\u5316\u6743\u91cd\u4e0e\u504f\u7f6e<\/p>\n\n\n\n<p>\u5728\u795e\u7ecf\u7f51\u7edc\u4e2d\uff0c\u6743\u91cd\u548c\u504f\u7f6e\u7684\u521d\u59cb\u5316\u5bf9\u4e8e\u6a21\u578b\u7684\u8bad\u7ec3\u548c\u6027\u80fd\u6709\u7740\u5f88\u5927\u7684\u5f71\u54cd\u3002PyTorch\u63d0\u4f9b\u4e86\u591a\u79cd\u5e38\u7528\u7684\u521d\u59cb\u5316\u65b9\u6cd5\uff0c\u53ef\u4ee5\u6839\u636e\u5177\u4f53\u4efb\u52a1\u548c\u6a21\u578b\u9009\u62e9\u4e0d\u540c\u7684\u65b9\u6cd5\u8fdb\u884c\u521d\u59cb\u5316\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u6743\u91cd\u521d\u59cb\u5316\uff1a\u6743\u91cd\u521d\u59cb\u5316\u5e38\u7528\u7684\u65b9\u6cd5\u6709\u4ee5\u4e0b\u51e0\u79cd\uff1a\n<ul class=\"wp-block-list\">\n<li>\u5e38\u6570\u521d\u59cb\u5316\uff08nn.init.constant()\uff09\uff1a\u4f7f\u7528\u5e38\u6570\u521d\u59cb\u5316\u6743\u91cd\uff0c\u5e38\u6570\u53ef\u4ee5\u624b\u52a8\u8bbe\u7f6e\u6216\u6839\u636e\u6570\u636e\u7279\u5f81\u9009\u62e9\u5408\u9002\u7684\u503c\u3002<\/li>\n\n\n\n<li>\u968f\u673a\u521d\u59cb\u5316\uff08nn.init.normal()\u548cnn.init.xavier_normal()\uff09\uff1a\u4f7f\u7528\u968f\u673a\u503c\u521d\u59cb\u5316\u6743\u91cd\uff0c\u53ef\u4ee5\u6839\u636e\u6570\u636e\u7279\u5f81\u548c\u7f51\u7edc\u7ed3\u6784\u9009\u62e9\u4e0d\u540c\u7684\u5206\u5e03\u548c\u65b9\u5dee\u8fdb\u884c\u521d\u59cb\u5316\u3002\u5176\u4e2d\uff0cnn.init.normal()\u4f7f\u7528\u6b63\u6001\u5206\u5e03\u8fdb\u884c\u521d\u59cb\u5316\uff0cnn.init.xavier_normal()\u4f7f\u7528\u6b63\u6001\u5206\u5e03\u8fdb\u884c\u521d\u59cb\u5316\uff0c\u5e76\u6839\u636e\u7f51\u7edc\u7ed3\u6784\u8ba1\u7b97\u5408\u9002\u7684\u65b9\u5dee\u3002<\/li>\n\n\n\n<li>He\u521d\u59cb\u5316\uff08nn.init.kaiming_normal()\uff09\uff1a\u9488\u5bf9ReLU\u6fc0\u6d3b\u51fd\u6570\u7684\u6743\u91cd\u521d\u59cb\u5316\u65b9\u6cd5\uff0c\u4f7f\u7528\u6b63\u6001\u5206\u5e03\u8fdb\u884c\u521d\u59cb\u5316\uff0c\u5e76\u6839\u636e\u7f51\u7edc\u7ed3\u6784\u8ba1\u7b97\u5408\u9002\u7684\u65b9\u5dee\u3002<\/li>\n\n\n\n<li>\u7a00\u758f\u521d\u59cb\u5316\uff08nn.init.sparse()\uff09\uff1a\u4f7f\u7528\u7a00\u758f\u77e9\u9635\u8fdb\u884c\u6743\u91cd\u521d\u59cb\u5316\uff0c\u901a\u5e38\u7528\u4e8e\u8bed\u8a00\u6a21\u578b\u7b49\u9700\u8981\u5904\u7406\u7a00\u758f\u6570\u636e\u7684\u4efb\u52a1\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u504f\u7f6e\u521d\u59cb\u5316\uff1a\u504f\u7f6e\u521d\u59cb\u5316\u5e38\u7528\u7684\u65b9\u6cd5\u6709\u4ee5\u4e0b\u51e0\u79cd\uff1a\n<ul class=\"wp-block-list\">\n<li>\u5e38\u6570\u521d\u59cb\u5316\uff08nn.init.constant()\uff09\uff1a\u4f7f\u7528\u5e38\u6570\u521d\u59cb\u5316\u504f\u7f6e\uff0c\u5e38\u6570\u53ef\u4ee5\u624b\u52a8\u8bbe\u7f6e\u6216\u6839\u636e\u6570\u636e\u7279\u5f81\u9009\u62e9\u5408\u9002\u7684\u503c\u3002<\/li>\n\n\n\n<li>\u96f6\u521d\u59cb\u5316\uff08nn.init.zeros()\uff09\uff1a\u4f7f\u75280\u521d\u59cb\u5316\u504f\u7f6e\u3002<\/li>\n\n\n\n<li>\u968f\u673a\u521d\u59cb\u5316\uff08nn.init.normal()\u548cnn.init.xavier_normal()\uff09\uff1a\u4f7f\u7528\u968f\u673a\u503c\u521d\u59cb\u5316\u504f\u7f6e\uff0c\u53ef\u4ee5\u6839\u636e\u6570\u636e\u7279\u5f81\u548c\u7f51\u7edc\u7ed3\u6784\u9009\u62e9\u4e0d\u540c\u7684\u5206\u5e03\u548c\u65b9\u5dee\u8fdb\u884c\u521d\u59cb\u5316\u3002\u5176\u4e2d\uff0cnn.init.normal()\u4f7f\u7528\u6b63\u6001\u5206\u5e03\u8fdb\u884c\u521d\u59cb\u5316\uff0cnn.init.xavier_normal()\u4f7f\u7528\u6b63\u6001\u5206\u5e03\u8fdb\u884c\u521d\u59cb\u5316\uff0c\u5e76\u6839\u636e\u7f51\u7edc\u7ed3\u6784\u8ba1\u7b97\u5408\u9002\u7684\u65b9\u5dee\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>\u5728\u4f7f\u7528\u521d\u59cb\u5316\u65b9\u6cd5\u65f6\uff0c\u901a\u5e38\u9700\u8981\u6839\u636e\u5177\u4f53\u4efb\u52a1\u548c\u6a21\u578b\u9009\u62e9\u5408\u9002\u7684\u65b9\u6cd5\uff0c\u5e76\u8bbe\u7f6e\u5408\u9002\u7684\u8d85\u53c2\u6570\u3002\u540c\u65f6\uff0c\u4e5f\u9700\u8981\u6ce8\u610f\u521d\u59cb\u5316\u65b9\u6cd5\u7684\u6b63\u786e\u6027\u548c\u6548\u7387\uff0c\u5982\u907f\u514d\u68af\u5ea6\u7206\u70b8\u3001\u6d88\u5931\u7b49\u95ee\u9898\uff0c\u9009\u62e9\u5408\u9002\u7684\u6743\u91cd\u548c\u504f\u7f6e\u521d\u59cb\u5316\u65b9\u6cd5\u53ef\u4ee5\u52a0\u901f\u6a21\u578b\u8bad\u7ec3\u548c\u63d0\u9ad8\u6a21\u578b\u6027\u80fd\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u8bad\u7ec3\u4e0e\u9a8c\u8bc1\u6570\u636e\u96c6<\/p>\n\n\n\n<p>\u5728\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u7684\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\uff0c\u901a\u5e38\u9700\u8981\u5c06\u6570\u636e\u96c6\u5206\u4e3a\u8bad\u7ec3\u96c6\u3001\u9a8c\u8bc1\u96c6\u548c\u6d4b\u8bd5\u96c6\u4e09\u90e8\u5206\uff0c\u5176\u4e2d\u8bad\u7ec3\u96c6\u7528\u4e8e\u6a21\u578b\u7684\u8bad\u7ec3\u548c\u53c2\u6570\u66f4\u65b0\uff0c\u9a8c\u8bc1\u96c6\u7528\u4e8e\u6a21\u578b\u7684\u8c03\u53c2\u548c\u6a21\u578b\u9009\u62e9\uff0c\u6d4b\u8bd5\u96c6\u7528\u4e8e\u6a21\u578b\u7684\u6700\u7ec8\u8bc4\u4f30\u548c\u6027\u80fd\u6d4b\u8bd5\u3002<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528torch.utils.data\u6a21\u5757\u548ctorchvision.datasets\u6a21\u5757\u63d0\u4f9b\u7684\u6570\u636e\u96c6\u7c7b\u6765\u52a0\u8f7d\u548c\u5904\u7406\u6570\u636e\u96c6\u3002\u5176\u4e2d\uff0ctorch.utils.data\u6a21\u5757\u63d0\u4f9b\u4e86Dataset\u548cDataLoader\u4e24\u4e2a\u7c7b\uff0c\u53ef\u4ee5\u7528\u4e8e\u81ea\u5b9a\u4e49\u6570\u636e\u96c6\u548c\u6570\u636e\u52a0\u8f7d\u5668\uff0ctorchvision.datasets\u6a21\u5757\u63d0\u4f9b\u4e86\u591a\u4e2a\u5e38\u7528\u7684\u6570\u636e\u96c6\u7c7b\uff0c\u53ef\u4ee5\u76f4\u63a5\u52a0\u8f7d\u548c\u4f7f\u7528\u3002\u4ee5\u4e0b\u662f\u4f7f\u7528torchvision.datasets\u6a21\u5757\u52a0\u8f7d\u6570\u636e\u96c6\u7684\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pythonCopy code<code>import torch\nfrom torchvision import datasets, transforms\n\n# \u5b9a\u4e49\u6570\u636e\u9884\u5904\u7406\u65b9\u6cd5\ntransform = transforms.Compose([\n    transforms.ToTensor(),\n    transforms.Normalize((0.5,), (0.5,))\n])\n\n# \u52a0\u8f7d\u8bad\u7ec3\u96c6\u548c\u9a8c\u8bc1\u96c6\u6570\u636e\ntrainset = datasets.MNIST('data\/', train=True, download=True, transform=transform)\nvalset = datasets.MNIST('data\/', train=False, download=True, transform=transform)\n\n# \u521b\u5efa\u6570\u636e\u52a0\u8f7d\u5668\ntrainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)\nvalloader = torch.utils.data.DataLoader(valset, batch_size=64, shuffle=False)\n<\/code><\/pre>\n\n\n\n<p>\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u9996\u5148\u5b9a\u4e49\u4e86\u4e00\u4e2atransform\u53d8\u91cf\uff0c\u5b83\u5305\u62ec\u4e86\u4e24\u4e2a\u9884\u5904\u7406\u65b9\u6cd5\uff1aToTensor()\u65b9\u6cd5\u5c06\u56fe\u50cf\u6570\u636e\u8f6c\u6362\u4e3a\u5f20\u91cf\u6570\u636e\uff0c\u5e76\u5f52\u4e00\u5316\u5230[0,1]\u7684\u8303\u56f4\u5185\uff0cNormalize()\u65b9\u6cd5\u5c06\u5f20\u91cf\u6570\u636e\u8fdb\u884c\u5f52\u4e00\u5316\u5904\u7406\uff0c\u4f7f\u5f97\u6570\u636e\u7684\u5747\u503c\u4e3a0.5\uff0c\u65b9\u5dee\u4e3a0.5\u3002\u7136\u540e\uff0c\u4f7f\u7528datasets.MNIST()\u65b9\u6cd5\u52a0\u8f7d\u8bad\u7ec3\u96c6\u548c\u9a8c\u8bc1\u96c6\u6570\u636e\uff0c\u5e76\u5c06transform\u53d8\u91cf\u4f20\u9012\u7ed9\u5b83\u4eec\u8fdb\u884c\u9884\u5904\u7406\u3002\u6700\u540e\uff0c\u4f7f\u7528DataLoader\u7c7b\u521b\u5efa\u4e86\u4e24\u4e2a\u6570\u636e\u52a0\u8f7d\u5668\uff0c\u5206\u522b\u7528\u4e8e\u8bad\u7ec3\u96c6\u548c\u9a8c\u8bc1\u96c6\u6570\u636e\u7684\u6279\u91cf\u52a0\u8f7d\u3002<\/p>\n\n\n\n<p>\u5728\u4f7f\u7528\u6570\u636e\u52a0\u8f7d\u5668\u8fdb\u884c\u6a21\u578b\u8bad\u7ec3\u65f6\uff0c\u901a\u5e38\u9700\u8981\u5728\u6bcf\u4e2a\u8bad\u7ec3\u8fed\u4ee3\u4e2d\u5c06\u6570\u636e\u96c6\u5212\u5206\u4e3a\u6279\u91cf\u8fdb\u884c\u8bad\u7ec3\uff0c\u5e76\u5c06\u8bad\u7ec3\u8fc7\u7a0b\u7684\u635f\u5931\u503c\u548c\u7cbe\u5ea6\u7b49\u6307\u6807\u8bb0\u5f55\u4e0b\u6765\u3002\u540c\u65f6\uff0c\u5728\u9a8c\u8bc1\u96c6\u4e0a\u5bf9\u6a21\u578b\u8fdb\u884c\u6d4b\u8bd5\u65f6\uff0c\u4e5f\u9700\u8981\u4f7f\u7528\u6570\u636e\u52a0\u8f7d\u5668\u5bf9\u9a8c\u8bc1\u96c6\u8fdb\u884c\u6279\u91cf\u52a0\u8f7d\uff0c\u5e76\u5c06\u6d4b\u8bd5\u8fc7\u7a0b\u7684\u635f\u5931\u503c\u548c\u7cbe\u5ea6\u7b49\u6307\u6807\u8bb0\u5f55\u4e0b\u6765\u3002\u6839\u636e\u8bb0\u5f55\u7684\u6307\u6807\u548c\u6a21\u578b\u8868\u73b0\uff0c\u53ef\u4ee5\u8fdb\u884c\u6a21\u578b\u8c03\u53c2\u548c\u6a21\u578b\u9009\u62e9\u3002<\/p>\n\n\n\n<p>\u603b\u4e4b\uff0cPyTorch\u63d0\u4f9b\u4e86\u7075\u6d3b\u4e14\u65b9\u4fbf\u7684\u6570\u636e\u52a0\u8f7d\u548c\u5904\u7406\u65b9\u5f0f\uff0c\u53ef\u4ee5\u6839\u636e\u5177\u4f53\u4efb\u52a1\u548c\u6570\u636e\u96c6\u9009\u62e9\u5408\u9002\u7684\u65b9\u6cd5\u8fdb\u884c\u52a0\u8f7d\u548c\u5212\u5206\u3002\u540c\u65f6\uff0c\u5408\u7406\u5212\u5206\u6570\u636e\u96c6\u5e76\u8bb0\u5f55\u6a21\u578b\u7684\u8bad\u7ec3\u548c\u9a8c\u8bc1\u6307\u6807\uff0c\u53ef\u4ee5\u52a0\u901f\u6a21\u578b\u7684\u8bad\u7ec3\u548c\u63d0\u9ad8\u6a21\u578b\u7684\u6027\u80fd\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u6a21\u578b\u8bad\u7ec3\u4e0e\u9a8c\u8bc1<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u6a21\u578b\u7684\u8bad\u7ec3\u548c\u9a8c\u8bc1\u901a\u5e38\u5206\u4e3a\u4ee5\u4e0b\u51e0\u4e2a\u6b65\u9aa4\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5b9a\u4e49\u6a21\u578b\uff1a\u9996\u5148\uff0c\u9700\u8981\u5b9a\u4e49\u4e00\u4e2a\u6a21\u578b\u7c7b\uff0c\u5e76\u5728\u5176\u4e2d\u5b9a\u4e49\u6a21\u578b\u7684\u7ed3\u6784\u548c\u524d\u5411\u4f20\u64ad\u65b9\u6cd5\u3002\u5728\u5b9a\u4e49\u6a21\u578b\u7ed3\u6784\u65f6\uff0c\u53ef\u4ee5\u4f7f\u7528nn.Module\u7c7b\u63d0\u4f9b\u7684\u591a\u4e2a\u5c42\u548c\u51fd\u6570\uff0c\u5982\u5168\u8fde\u63a5\u5c42\uff08nn.Linear()\uff09\u3001\u5377\u79ef\u5c42\uff08nn.Conv2d()\uff09\u3001\u6c60\u5316\u5c42\uff08nn.MaxPool2d()\uff09\u3001\u6fc0\u6d3b\u51fd\u6570\uff08nn.ReLU()\uff09\u7b49\u3002\u5728\u5b9a\u4e49\u524d\u5411\u4f20\u64ad\u65b9\u6cd5\u65f6\uff0c\u9700\u8981\u5b9e\u73b0\u6a21\u578b\u8f93\u5165\u5230\u8f93\u51fa\u7684\u8ba1\u7b97\u8fc7\u7a0b\u3002<\/li>\n\n\n\n<li>\u5b9a\u4e49\u635f\u5931\u51fd\u6570\u548c\u4f18\u5316\u5668\uff1a\u5176\u6b21\uff0c\u9700\u8981\u5b9a\u4e49\u4e00\u4e2a\u635f\u5931\u51fd\u6570\u548c\u4e00\u4e2a\u4f18\u5316\u5668\u3002\u635f\u5931\u51fd\u6570\u7528\u4e8e\u8bc4\u4ef7\u6a21\u578b\u7684\u8f93\u51fa\u7ed3\u679c\u548c\u771f\u5b9e\u6807\u7b7e\u4e4b\u95f4\u7684\u5dee\u5f02\uff0c\u5e76\u6839\u636e\u5dee\u5f02\u8fdb\u884c\u4f18\u5316\u3002\u5e38\u7528\u7684\u635f\u5931\u51fd\u6570\u6709\u4ea4\u53c9\u71b5\u635f\u5931\u51fd\u6570\uff08nn.CrossEntropyLoss()\uff09\u3001\u5747\u65b9\u8bef\u5dee\u635f\u5931\u51fd\u6570\uff08nn.MSELoss()\uff09\u7b49\u3002\u4f18\u5316\u5668\u7528\u4e8e\u66f4\u65b0\u6a21\u578b\u7684\u53c2\u6570\uff0c\u5e76\u6700\u5c0f\u5316\u635f\u5931\u51fd\u6570\u3002\u5e38\u7528\u7684\u4f18\u5316\u5668\u6709\u968f\u673a\u68af\u5ea6\u4e0b\u964d\u4f18\u5316\u5668\uff08torch.optim.SGD()\uff09\u3001Adam\u4f18\u5316\u5668\uff08torch.optim.Adam()\uff09\u7b49\u3002<\/li>\n\n\n\n<li>\u8bad\u7ec3\u6a21\u578b\uff1a\u63a5\u7740\uff0c\u4f7f\u7528\u8bad\u7ec3\u96c6\u6570\u636e\u5bf9\u6a21\u578b\u8fdb\u884c\u8bad\u7ec3\u3002\u5728\u6bcf\u4e2a\u8bad\u7ec3\u8fed\u4ee3\u4e2d\uff0c\u9700\u8981\u5c06\u4e00\u4e2a\u6279\u91cf\u7684\u6570\u636e\u8f93\u5165\u5230\u6a21\u578b\u4e2d\uff0c\u5e76\u8ba1\u7b97\u6a21\u578b\u8f93\u51fa\u7ed3\u679c\u548c\u771f\u5b9e\u6807\u7b7e\u4e4b\u95f4\u7684\u635f\u5931\u503c\u3002\u7136\u540e\uff0c\u6839\u636e\u635f\u5931\u503c\u8ba1\u7b97\u68af\u5ea6\uff0c\u5e76\u4f7f\u7528\u4f18\u5316\u5668\u5bf9\u6a21\u578b\u7684\u53c2\u6570\u8fdb\u884c\u66f4\u65b0\u3002\u6700\u540e\uff0c\u8bb0\u5f55\u6bcf\u4e2a\u8bad\u7ec3\u8fed\u4ee3\u7684\u635f\u5931\u503c\u548c\u7cbe\u5ea6\u7b49\u6307\u6807\uff0c\u5e76\u8fdb\u884c\u53ef\u89c6\u5316\u5c55\u793a\u3002<\/li>\n\n\n\n<li>\u9a8c\u8bc1\u6a21\u578b\uff1a\u5728\u6bcf\u4e2a\u8bad\u7ec3\u8fed\u4ee3\u7ed3\u675f\u540e\uff0c\u4f7f\u7528\u9a8c\u8bc1\u96c6\u6570\u636e\u5bf9\u6a21\u578b\u8fdb\u884c\u6d4b\u8bd5\uff0c\u5e76\u8bb0\u5f55\u6a21\u578b\u7684\u635f\u5931\u503c\u548c\u7cbe\u5ea6\u7b49\u6307\u6807\u3002\u6839\u636e\u8bb0\u5f55\u7684\u6307\u6807\u548c\u6a21\u578b\u8868\u73b0\uff0c\u53ef\u4ee5\u8fdb\u884c\u6a21\u578b\u8c03\u53c2\u548c\u6a21\u578b\u9009\u62e9\u3002<\/li>\n\n\n\n<li>\u6d4b\u8bd5\u6a21\u578b\uff1a\u6700\u540e\uff0c\u5728\u6a21\u578b\u8bad\u7ec3\u5b8c\u6210\u540e\uff0c\u53ef\u4ee5\u4f7f\u7528\u6d4b\u8bd5\u96c6\u6570\u636e\u5bf9\u6a21\u578b\u8fdb\u884c\u6700\u7ec8\u7684\u8bc4\u4f30\u548c\u6027\u80fd\u6d4b\u8bd5\uff0c\u5e76\u8bb0\u5f55\u6a21\u578b\u7684\u635f\u5931\u503c\u548c\u7cbe\u5ea6\u7b49\u6307\u6807\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u4e0b\u9762\u662f\u4e00\u4e2a\u793a\u4f8b\u4ee3\u7801\uff0c\u7528\u4e8e\u5bf9\u4e00\u4e2a\u7b80\u5355\u7684\u5168\u8fde\u63a5\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u8fdb\u884c\u8bad\u7ec3\u548c\u9a8c\u8bc1\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pythonCopy code<code>import torch\nimport torch.nn as nn\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\n\n# \u5b9a\u4e49\u6a21\u578b\u7c7b\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        self.fc1 = nn.Linear(784, 512)\n        self.fc2 = nn.Linear(512, 256)\n        self.fc3 = nn.Linear(256, 10)\n\n    def forward(self, x):\n        x = x.view(-1, 784)\n        x = nn.functional.relu(self.fc1(x))\n        x = nn.functional.relu(self.fc2(x))\n        x = self.fc3(x)\n        return nn\n<\/code><\/pre>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u7ee7\u7eed<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u5b9a\u4e49\u8bad\u7ec3\u51fd\u6570<\/h1>\n\n\n\n<p>def train(model, device, train_loader, optimizer, criterion, epoch): model.train() train_loss = 0 correct = 0 for batch_idx, (data, target) in enumerate(train_loader): data, target = data.to(device), target.to(device) optimizer.zero_grad() output = model(data) loss = criterion(output, target) loss.backward() optimizer.step() train_loss += loss.item() * data.size(0) pred = output.argmax(dim=1, keepdim=True) correct += pred.eq(target.view_as(pred)).sum().item() train_loss \/= len(train_loader.dataset)<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cssCopy code<code>print('Train Epoch: {} \\tLoss: {:.6f} \\tAcc: {:.6f}'.format(\n    epoch, train_loss, correct \/ len(train_loader.dataset)))\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u5b9a\u4e49\u9a8c\u8bc1\u51fd\u6570<\/h1>\n\n\n\n<p>def val(model, device, val_loader, criterion): model.eval() val_loss = 0 correct = 0 with torch.no_grad(): for data, target in val_loader: data, target = data.to(device), target.to(device) output = model(data) val_loss += criterion(output, target).item() * data.size(0) pred = output.argmax(dim=1, keepdim=True) correct += pred.eq(target.view_as(pred)).sum().item() val_loss \/= len(val_loader.dataset)<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">luaCopy code<code>print('Val set: Average loss: {:.4f}, Accuracy: {}\/{} ({:.6f}%)\\n'.format(\n    val_loss, correct, len(val_loader.dataset),\n    100. * correct \/ len(val_loader.dataset)))\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u52a0\u8f7d\u6570\u636e\u96c6<\/h1>\n\n\n\n<p>transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))]) trainset = datasets.MNIST(&#8216;data\/&#8217;, train=True, download=True, transform=transform) valset = datasets.MNIST(&#8216;data\/&#8217;, train=False, download=True, transform=transform) train_loader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True) val_loader = torch.utils.data.DataLoader(valset, batch_size=64, shuffle=False)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u5b9a\u4e49\u6a21\u578b\u3001\u635f\u5931\u51fd\u6570\u548c\u4f18\u5316\u5668<\/h1>\n\n\n\n<p>device = torch.device(&#8220;cuda&#8221; if torch.cuda.is_available() else &#8220;cpu&#8221;) model = Net().to(device) criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u8bad\u7ec3\u6a21\u578b<\/h1>\n\n\n\n<p>for epoch in range(1, 11): train(model, device, train_loader, optimizer, criterion, epoch) val(model, device, val_loader, criterion)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u6d4b\u8bd5\u6a21\u578b<\/h1>\n\n\n\n<p>test_loss = 0 correct = 0 with torch.no_grad(): for data, target in val_loader: data, target = data.to(device), target.to(device) output = model(data) test_loss += criterion(output, target).item() * data.size(0) pred = output.argmax(dim=1, keepdim=True) correct += pred.eq(target.view_as(pred)).sum().item() test_loss \/= len(val_loader.dataset)<\/p>\n\n\n\n<p>print(&#8216;\\nTest set: Average loss: {:.4f}, Accuracy: {}\/{} ({:.6f}%)\\n&#8217;.format( test_loss, correct, len(val_loader.dataset), 100. * correct \/ len(val_loader.dataset)))<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">scssCopy code<code>\n\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u9996\u5148\u5b9a\u4e49\u4e86\u4e00\u4e2a\u5168\u8fde\u63a5\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u7c7bNet\uff0c\u5e76\u5728\u5176\u4e2d\u5b9a\u4e49\u4e86\u4e09\u4e2a\u5168\u8fde\u63a5\u5c42\u3002\u7136\u540e\uff0c\u5b9a\u4e49\u4e86train()\u51fd\u6570\u548c\n<\/code><\/pre>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u8d85\u53c2\u6570\u8c03\u6574\u4e0e\u4f18\u5316<\/p>\n\n\n\n<p>\u8d85\u53c2\u6570\u8c03\u6574\u548c\u4f18\u5316\u662f\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u8bad\u7ec3\u4e2d\u975e\u5e38\u91cd\u8981\u7684\u4e00\u90e8\u5206\uff0c\u901a\u5e38\u5305\u62ec\u4ee5\u4e0b\u51e0\u4e2a\u6b65\u9aa4\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u9009\u62e9\u5408\u9002\u7684\u8d85\u53c2\u6570\uff1a\u8d85\u53c2\u6570\u662f\u6a21\u578b\u4e2d\u7684\u4e00\u4e9b\u53c2\u6570\uff0c\u4e0d\u540c\u4e8e\u6a21\u578b\u7684\u6743\u91cd\u548c\u504f\u7f6e\uff0c\u9700\u8981\u624b\u52a8\u8bbe\u7f6e\u3002\u5e38\u7528\u7684\u8d85\u53c2\u6570\u6709\u5b66\u4e60\u7387\u3001\u6279\u91cf\u5927\u5c0f\u3001\u4f18\u5316\u5668\u7c7b\u578b\u3001\u6b63\u5219\u5316\u7cfb\u6570\u7b49\u3002\u5728\u9009\u62e9\u8d85\u53c2\u6570\u65f6\uff0c\u9700\u8981\u6839\u636e\u5177\u4f53\u95ee\u9898\u548c\u6570\u636e\u96c6\u8fdb\u884c\u8c03\u6574\u548c\u4f18\u5316\u3002<\/li>\n\n\n\n<li>\u5b9a\u4e49\u8d85\u53c2\u6570\u641c\u7d22\u7a7a\u95f4\uff1a\u5728\u8d85\u53c2\u6570\u8c03\u6574\u8fc7\u7a0b\u4e2d\uff0c\u9700\u8981\u5b9a\u4e49\u8d85\u53c2\u6570\u641c\u7d22\u7a7a\u95f4\u3002\u901a\u5e38\u91c7\u7528\u7f51\u683c\u641c\u7d22\u3001\u968f\u673a\u641c\u7d22\u548c\u8d1d\u53f6\u65af\u4f18\u5316\u7b49\u65b9\u6cd5\u6765\u641c\u7d22\u8d85\u53c2\u6570\u7a7a\u95f4\u3002<\/li>\n\n\n\n<li>\u8bad\u7ec3\u548c\u9a8c\u8bc1\u6a21\u578b\uff1a\u5728\u641c\u7d22\u8d85\u53c2\u6570\u7a7a\u95f4\u7684\u8fc7\u7a0b\u4e2d\uff0c\u9700\u8981\u4f7f\u7528\u8bad\u7ec3\u96c6\u548c\u9a8c\u8bc1\u96c6\u6570\u636e\u5bf9\u6a21\u578b\u8fdb\u884c\u8bad\u7ec3\u548c\u9a8c\u8bc1\uff0c\u5e76\u8bb0\u5f55\u8bad\u7ec3\u548c\u9a8c\u8bc1\u8fc7\u7a0b\u4e2d\u7684\u635f\u5931\u503c\u3001\u7cbe\u5ea6\u7b49\u6307\u6807\u3002\u6839\u636e\u8bb0\u5f55\u7684\u6307\u6807\uff0c\u53ef\u4ee5\u8bc4\u4f30\u6a21\u578b\u7684\u6027\u80fd\uff0c\u5e76\u9009\u62e9\u6700\u4f73\u7684\u8d85\u53c2\u6570\u7ec4\u5408\u3002<\/li>\n\n\n\n<li>\u9009\u62e9\u6700\u4f73\u8d85\u53c2\u6570\u7ec4\u5408\uff1a\u5728\u8bad\u7ec3\u548c\u9a8c\u8bc1\u6a21\u578b\u7684\u8fc7\u7a0b\u4e2d\uff0c\u9700\u8981\u4f7f\u7528\u4e00\u4e9b\u6307\u6807\u6765\u8bc4\u4f30\u6a21\u578b\u7684\u6027\u80fd\uff0c\u5e38\u89c1\u7684\u6307\u6807\u6709\u51c6\u786e\u7387\u3001F1\u503c\u3001ROC\u66f2\u7ebf\u3001AUC\u503c\u7b49\u3002\u6839\u636e\u6307\u6807\u7ed3\u679c\uff0c\u53ef\u4ee5\u9009\u62e9\u6700\u4f73\u7684\u8d85\u53c2\u6570\u7ec4\u5408\uff0c\u5e76\u7528\u8be5\u7ec4\u5408\u8fdb\u884c\u6700\u7ec8\u7684\u6a21\u578b\u6d4b\u8bd5\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528optuna\u3001Ray Tune\u7b49\u8d85\u53c2\u6570\u4f18\u5316\u6846\u67b6\u6765\u81ea\u52a8\u641c\u7d22\u8d85\u53c2\u6570\u7a7a\u95f4\u3002\u4e0b\u9762\u662f\u4e00\u4e2a\u4f7f\u7528optuna\u8fdb\u884c\u8d85\u53c2\u6570\u641c\u7d22\u7684\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pythonCopy code<code>import optuna\nimport torch\nimport torch.nn as nn\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\n\n# \u5b9a\u4e49\u6a21\u578b\u7c7b\nclass Net(nn.Module):\n    def __init__(self, dropout_rate):\n        super(Net, self).__init__()\n        self.fc1 = nn.Linear(784, 512)\n        self.fc2 = nn.Linear(512, 256)\n        self.fc3 = nn.Linear(256, 10)\n        self.dropout_rate = dropout_rate\n\n    def forward(self, x):\n        x = x.view(-1, 784)\n        x = nn.functional.relu(self.fc1(x))\n        x = nn.functional.dropout(x, p=self.dropout_rate, training=self.training)\n        x = nn.functional.relu(self.fc2(x))\n        x = nn.functional.dropout(x, p=self.dropout_rate, training=self.training)\n        x = self.fc3(x)\n        return x\n\n# \u5b9a\u4e49\u76ee\u6807\u51fd\u6570\ndef objective(trial):\n    # \u5b9a\u4e49\u8d85\u53c2\u6570\u7a7a\u95f4\n    dropout_rate = trial.suggest_uniform('dropout_rate', 0, 0.5)\n    learning_rate = trial.suggest_loguniform('learning_rate', 1e-5, 1e-1)\n    batch_size = trial.suggest_categorical('batch_size', [32, 64, 128])\n\n    # \u52a0\u8f7d\u6570\u636e\u96c6\n    transform = transforms.Compose([transforms.ToTensor(),\n                                    transforms.Normalize((0.5,), (0.5,))])\n    trainset = datasets.MNIST('data\/', train=True,\n<\/code><\/pre>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u7ee7\u7eed<\/p>\n\n\n\n<p>download=True, transform=transform) valset = datasets.MNIST(&#8216;data\/&#8217;, train=False, download=True, transform=transform) train_loader = torch.utils.data.DataLoader(trainset, batch_size=batch_size, shuffle=True) val_loader = torch.utils.data.DataLoader(valset, batch_size=batch_size, shuffle=False)<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">scssCopy code<code># \u5b9a\u4e49\u6a21\u578b\u3001\u635f\u5931\u51fd\u6570\u548c\u4f18\u5316\u5668\ndevice = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\nmodel = Net(dropout_rate).to(device)\ncriterion = nn.CrossEntropyLoss()\noptimizer = optim.Adam(model.parameters(), lr=learning_rate)\n\n# \u8bad\u7ec3\u6a21\u578b\nfor epoch in range(10):\n    model.train()\n    for batch_idx, (data, target) in enumerate(train_loader):\n        data, target = data.to(device), target.to(device)\n        optimizer.zero_grad()\n        output = model(data)\n        loss = criterion(output, target)\n        loss.backward()\n        optimizer.step()\n\n    # \u9a8c\u8bc1\u6a21\u578b\n    model.eval()\n    val_loss = 0\n    correct = 0\n    with torch.no_grad():\n        for data, target in val_loader:\n            data, target = data.to(device), target.to(device)\n            output = model(data)\n            val_loss += criterion(output, target).item() * data.size(0)\n            pred = output.argmax(dim=1, keepdim=True)\n            correct += pred.eq(target.view_as(pred)).sum().item()\n    val_loss \/= len(val_loader.dataset)\n\n    trial.report(val_loss, epoch)\n\n    if trial.should_prune():\n        raise optuna.structs.TrialPruned()\n\nreturn val_loss\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u521b\u5efaoptuna\u5b9e\u4f8b\u5e76\u8fd0\u884c\u8d85\u53c2\u6570\u641c\u7d22<\/h1>\n\n\n\n<p>study = optuna.create_study(direction=&#8217;minimize&#8217;) study.optimize(objective, n_trials=100)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u6253\u5370\u6700\u4f73\u8d85\u53c2\u6570\u7ec4\u5408\u548c\u6d4b\u8bd5\u7ed3\u679c<\/h1>\n\n\n\n<p>print(&#8216;Best trial: score {:.4f}, params {}&#8217;.format(study.best_value, study.best_params)) best_dropout_rate = study.best_params[&#8216;dropout_rate&#8217;] best_learning_rate = study.best_params[&#8216;learning_rate&#8217;] best_batch_size = study.best_params[&#8216;batch_size&#8217;]<\/p>\n\n\n\n<p>testset = datasets.MNIST(&#8216;data\/&#8217;, train=False, download=True, transform=transform) test_loader = torch.utils.data.DataLoader(testset, batch_size=best_batch_size, shuffle=False)<\/p>\n\n\n\n<p>device = torch.device(&#8220;cuda&#8221; if torch.cuda.is_available() else &#8220;cpu&#8221;) model = Net(best_dropout_rate).to(device) criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=best_learning_rate)<\/p>\n\n\n\n<p>model.train() for batch_idx, (data, target) in enumerate(train_loader): data, target = data.to(device), target.to(device) optimizer.zero_grad() output = model(data) loss = criterion(output, target) loss.backward() optimizer.step()<\/p>\n\n\n\n<p>model.eval() test_loss = 0 correct = 0 with torch.no_grad(): for data, target in test_loader: data, target = data.to(device), target.to(device) output = model(data) test_loss += criterion(output, target).item() * data.size(0) pred = output.argmax(dim=1, keepdim=True) correct += pred.eq(target.view_as(pred)).sum().item() test_loss \/= len(test_loader.dataset)<\/p>\n\n\n\n<p>print(&#8216;\\nTest set: Average loss: {:.4f}, Accuracy: {}\/{} ({:.6f}%)\\n&#8217;.format( test_loss, correct, len(test_loader.dataset), 100. * correct \/ len(test_loader.dataset)))<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Copy code<code>\n\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u4f7f\u7528optuna\u5bf9\n<\/code><\/pre>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u7ee7\u7eed<\/p>\n\n\n\n<p>MNIST\u6570\u636e\u96c6\u8fdb\u884c\u8d85\u53c2\u6570\u641c\u7d22\u3002\u9996\u5148\uff0c\u5b9a\u4e49\u4e86\u4e00\u4e2a\u76ee\u6807\u51fd\u6570objective()\uff0c\u5728\u8be5\u51fd\u6570\u4e2d\u5b9a\u4e49\u4e86\u8d85\u53c2\u6570\u641c\u7d22\u7a7a\u95f4\uff0c\u5e76\u4f7f\u7528\u8be5\u7a7a\u95f4\u5185\u7684\u8d85\u53c2\u6570\u8bad\u7ec3\u548c\u9a8c\u8bc1\u6a21\u578b\u3002\u5728\u6bcf\u4e2aepoch\u7ed3\u675f\u65f6\uff0c\u5c06\u9a8c\u8bc1\u96c6\u635f\u5931\u503c\u8bb0\u5f55\u4e0b\u6765\uff0c\u7528\u4e8e\u8bc4\u4f30\u6a21\u578b\u7684\u6027\u80fd\u3002\u6700\u540e\uff0c\u8fd4\u56de\u9a8c\u8bc1\u96c6\u635f\u5931\u503c\u4f5c\u4e3a\u76ee\u6807\u51fd\u6570\u7684\u7ed3\u679c\u3002<\/p>\n\n\n\n<p>\u5728\u8d85\u53c2\u6570\u641c\u7d22\u8fc7\u7a0b\u4e2d\uff0c\u4f7f\u7528create_study()\u51fd\u6570\u521b\u5efa\u4e00\u4e2aoptuna\u5b9e\u4f8b\uff0c\u5e76\u8c03\u7528optimize()\u51fd\u6570\u8fd0\u884c\u8d85\u53c2\u6570\u641c\u7d22\uff0c\u8bbe\u7f6en_trials\u53c2\u6570\u4e3a100\uff0c\u8868\u793a\u6700\u591a\u8fdb\u884c100\u6b21\u8d85\u53c2\u6570\u641c\u7d22\u3002\u6700\u540e\uff0c\u8f93\u51fa\u6700\u4f73\u8d85\u53c2\u6570\u7ec4\u5408\u548c\u6d4b\u8bd5\u7ed3\u679c\u3002<\/p>\n\n\n\n<p>\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u5728\u8bad\u7ec3\u548c\u9a8c\u8bc1\u6a21\u578b\u7684\u8fc7\u7a0b\u4e2d\uff0c\u4f7f\u7528\u4e86early stopping\u6765\u907f\u514d\u8fc7\u62df\u5408\u3002\u5982\u679c\u53d1\u73b0\u5728\u67d0\u4e2aepoch\u4e2d\u9a8c\u8bc1\u96c6\u635f\u5931\u503c\u6ca1\u6709\u964d\u4f4e\uff0c\u53ef\u4ee5\u5728\u8be5epoch\u7ed3\u675f\u540e\u76f4\u63a5\u9000\u51fa\u5faa\u73af\uff0c\u8282\u7701\u8ba1\u7b97\u8d44\u6e90\u3002<\/p>\n\n\n\n<p>\u603b\u4e4b\uff0c\u8d85\u53c2\u6570\u8c03\u6574\u548c\u4f18\u5316\u662f\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u8bad\u7ec3\u4e2d\u975e\u5e38\u91cd\u8981\u7684\u4e00\u90e8\u5206\uff0c\u9700\u8981\u6839\u636e\u5177\u4f53\u95ee\u9898\u548c\u6570\u636e\u96c6\u8fdb\u884c\u8c03\u6574\u548c\u4f18\u5316\u3002\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528\u8d85\u53c2\u6570\u4f18\u5316\u6846\u67b6\u6765\u81ea\u52a8\u641c\u7d22\u8d85\u53c2\u6570\u7a7a\u95f4\uff0c\u540c\u65f6\u9700\u8981\u6ce8\u610f\u8fc7\u62df\u5408\u548cearly stopping\u7b49\u95ee\u9898\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u5168\u8fde\u63a5\u795e\u7ecf\u7f51\u7edc (FCNN)<\/p>\n\n\n\n<p>\u5168\u8fde\u63a5\u795e\u7ecf\u7f51\u7edc\uff08Fully Connected Neural Network\uff0cFCNN\uff09\u662f\u4e00\u79cd\u57fa\u672c\u7684\u524d\u9988\u795e\u7ecf\u7f51\u7edc\uff0c\u4e5f\u662f\u6df1\u5ea6\u5b66\u4e60\u4e2d\u6700\u5e38\u7528\u7684\u795e\u7ecf\u7f51\u7edc\u4e4b\u4e00\u3002\u5b83\u7531\u591a\u4e2a\u5168\u8fde\u63a5\u5c42\u7ec4\u6210\uff0c\u6bcf\u4e2a\u5168\u8fde\u63a5\u5c42\u7684\u6240\u6709\u795e\u7ecf\u5143\u90fd\u4e0e\u524d\u4e00\u5c42\u7684\u6240\u6709\u795e\u7ecf\u5143\u76f8\u8fde\u3002<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528torch.nn\u6a21\u5757\u4e2d\u7684Linear\u7c7b\u6765\u5b9a\u4e49\u5168\u8fde\u63a5\u5c42\u3002\u4e0b\u9762\u662f\u4e00\u4e2a\u7b80\u5355\u7684FCNN\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pythonCopy code<code>import torch\nimport torch.nn as nn\n\nclass FCNN(nn.Module):\n    def __init__(self):\n        super(FCNN, self).__init__()\n        self.fc1 = nn.Linear(784, 256)\n        self.fc2 = nn.Linear(256, 128)\n        self.fc3 = nn.Linear(128, 10)\n\n    def forward(self, x):\n        x = x.view(-1, 784)\n        x = nn.functional.relu(self.fc1(x))\n        x = nn.functional.relu(self.fc2(x))\n        x = self.fc3(x)\n        return x\n<\/code><\/pre>\n\n\n\n<p>\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u5b9a\u4e49\u4e86\u4e00\u4e2a\u5305\u542b\u4e09\u4e2a\u5168\u8fde\u63a5\u5c42\u7684FCNN\u6a21\u578b\u3002\u5728\u521d\u59cb\u5316\u51fd\u6570__init__()\u4e2d\uff0c\u4f7f\u7528nn.Linear\u7c7b\u5b9a\u4e49\u4e86\u4e09\u4e2a\u5168\u8fde\u63a5\u5c42\uff0c\u5206\u522b\u662f\u8f93\u5165\u5c42\uff08\u8f93\u5165\u5927\u5c0f\u4e3a784\uff0c\u8f93\u51fa\u5927\u5c0f\u4e3a256\uff09\u3001\u9690\u85cf\u5c42\uff08\u8f93\u5165\u5927\u5c0f\u4e3a256\uff0c\u8f93\u51fa\u5927\u5c0f\u4e3a128\uff09\u548c\u8f93\u51fa\u5c42\uff08\u8f93\u5165\u5927\u5c0f\u4e3a128\uff0c\u8f93\u51fa\u5927\u5c0f\u4e3a10\uff09\u3002<\/p>\n\n\n\n<p>\u5728forward()\u51fd\u6570\u4e2d\uff0c\u9996\u5148\u5c06\u8f93\u5165\u7684\u6570\u636ex\u53d8\u5f62\u4e3a\u4e8c\u7ef4\u5f20\u91cf\uff0c\u7136\u540e\u4f9d\u6b21\u7ecf\u8fc7\u4e09\u4e2a\u5168\u8fde\u63a5\u5c42\uff0c\u5176\u4e2d\u8f93\u5165\u5c42\u548c\u9690\u85cf\u5c42\u90fd\u4f7f\u7528\u4e86ReLU\u6fc0\u6d3b\u51fd\u6570\u3002\u6700\u540e\u7684\u8f93\u51fa\u5c42\u4e0d\u4f7f\u7528\u6fc0\u6d3b\u51fd\u6570\uff0c\u76f4\u63a5\u8f93\u51fa\u539f\u59cb\u7684\u5f97\u5206\u503c\u3002<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0a\u5b9a\u4e49\u597d\u7684FCNN\u6a21\u578b\u8fdb\u884c\u5206\u7c7b\u4efb\u52a1\u7684\u8bad\u7ec3\u548c\u9884\u6d4b\u3002\u5177\u4f53\u7684\u8bad\u7ec3\u548c\u9884\u6d4b\u6d41\u7a0b\u53ef\u4ee5\u53c2\u8003\u524d\u9762\u7684\u7ae0\u8282\u3002\u9664\u4e86FCNN\u6a21\u578b\uff0cPyTorch\u8fd8\u652f\u6301\u5176\u4ed6\u7c7b\u578b\u7684\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\uff0c\u5982\u5377\u79ef\u795e\u7ecf\u7f51\u7edc\uff08Convolutional Neural Network\uff0cCNN\uff09\u3001\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\uff08Recurrent Neural Network\uff0cRNN\uff09\u7b49\uff0c\u53ef\u4ee5\u6839\u636e\u5177\u4f53\u95ee\u9898\u548c\u6570\u636e\u96c6\u9009\u62e9\u5408\u9002\u7684\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u5377\u79ef\u795e\u7ecf\u7f51\u7edc (CNN)<\/p>\n\n\n\n<p>\u5377\u79ef\u795e\u7ecf\u7f51\u7edc\uff08Convolutional Neural Network\uff0cCNN\uff09\u662f\u4e00\u79cd\u5e38\u7528\u7684\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\uff0c\u5b83\u5728\u56fe\u50cf\u5904\u7406\u548c\u8ba1\u7b97\u673a\u89c6\u89c9\u7b49\u9886\u57df\u6709\u5e7f\u6cdb\u5e94\u7528\u3002\u4e0e\u5168\u8fde\u63a5\u795e\u7ecf\u7f51\u7edc\u4e0d\u540c\uff0cCNN\u901a\u8fc7\u5377\u79ef\u5c42\u3001\u6c60\u5316\u5c42\u7b49\u7279\u6b8a\u7684\u5c42\u6765\u5904\u7406\u56fe\u50cf\u6570\u636e\uff0c\u4ece\u800c\u5b9e\u73b0\u5bf9\u56fe\u50cf\u7684\u9ad8\u6548\u5904\u7406\u548c\u7279\u5f81\u63d0\u53d6\u3002<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528torch.nn\u6a21\u5757\u4e2d\u7684Conv2d\u3001MaxPool2d\u7b49\u7c7b\u6765\u5b9a\u4e49\u5377\u79ef\u5c42\u3001\u6c60\u5316\u5c42\u7b49\u3002\u4e0b\u9762\u662f\u4e00\u4e2a\u7b80\u5355\u7684CNN\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pythonCopy code<code>import torch\nimport torch.nn as nn\n\nclass CNN(nn.Module):\n    def __init__(self):\n        super(CNN, self).__init__()\n        self.conv1 = nn.Conv2d(1, 32, kernel_size=5, padding=2)\n        self.conv2 = nn.Conv2d(32, 64, kernel_size=5, padding=2)\n        self.pool = nn.MaxPool2d(kernel_size=2, stride=2)\n        self.fc1 = nn.Linear(64*7*7, 1024)\n        self.fc2 = nn.Linear(1024, 10)\n\n    def forward(self, x):\n        x = self.pool(nn.functional.relu(self.conv1(x)))\n        x = self.pool(nn.functional.relu(self.conv2(x)))\n        x = x.view(-1, 64*7*7)\n        x = nn.functional.relu(self.fc1(x))\n        x = self.fc2(x)\n        return x\n<\/code><\/pre>\n\n\n\n<p>\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u5b9a\u4e49\u4e86\u4e00\u4e2a\u5305\u542b\u4e24\u4e2a\u5377\u79ef\u5c42\u3001\u4e24\u4e2a\u6c60\u5316\u5c42\u548c\u4e24\u4e2a\u5168\u8fde\u63a5\u5c42\u7684CNN\u6a21\u578b\u3002\u5728\u521d\u59cb\u5316\u51fd\u6570__init__()\u4e2d\uff0c\u4f7f\u7528nn.Conv2d\u7c7b\u5b9a\u4e49\u4e86\u4e24\u4e2a\u5377\u79ef\u5c42\uff0c\u5206\u522b\u662f\u7b2c\u4e00\u5c42\u5377\u79ef\u5c42\uff08\u8f93\u5165\u901a\u9053\u6570\u4e3a1\uff0c\u8f93\u51fa\u901a\u9053\u6570\u4e3a32\uff0c\u5377\u79ef\u6838\u5927\u5c0f\u4e3a5\u00d75\uff0c\u8fb9\u754c\u586b\u5145\u4e3a2\uff09\u548c\u7b2c\u4e8c\u5c42\u5377\u79ef\u5c42\uff08\u8f93\u5165\u901a\u9053\u6570\u4e3a32\uff0c\u8f93\u51fa\u901a\u9053\u6570\u4e3a64\uff0c\u5377\u79ef\u6838\u5927\u5c0f\u4e3a5\u00d75\uff0c\u8fb9\u754c\u586b\u5145\u4e3a2\uff09\u3002<\/p>\n\n\n\n<p>\u4f7f\u7528nn.MaxPool2d\u7c7b\u5b9a\u4e49\u4e86\u4e00\u4e2a\u6700\u5927\u6c60\u5316\u5c42\uff0c\u6c60\u5316\u6838\u5927\u5c0f\u4e3a2\u00d72\uff0c\u6b65\u957f\u4e3a2\u3002\u6700\u540e\u5b9a\u4e49\u4e86\u4e24\u4e2a\u5168\u8fde\u63a5\u5c42\uff0c\u5206\u522b\u662f\u8f93\u5165\u5927\u5c0f\u4e3a64\u00d77\u00d77\uff0c\u8f93\u51fa\u5927\u5c0f\u4e3a1024\u7684\u5168\u8fde\u63a5\u5c42\u548c\u8f93\u5165\u5927\u5c0f\u4e3a1024\uff0c\u8f93\u51fa\u5927\u5c0f\u4e3a10\u7684\u5168\u8fde\u63a5\u5c42\u3002<\/p>\n\n\n\n<p>\u5728forward()\u51fd\u6570\u4e2d\uff0c\u9996\u5148\u7ecf\u8fc7\u7b2c\u4e00\u5c42\u5377\u79ef\u5c42\u548c\u6700\u5927\u6c60\u5316\u5c42\uff0c\u7136\u540e\u7ecf\u8fc7\u7b2c\u4e8c\u5c42\u5377\u79ef\u5c42\u548c\u6700\u5927\u6c60\u5316\u5c42\u3002\u6700\u540e\u5c06\u7279\u5f81\u56fe\u5c55\u5f00\u4e3a\u4e00\u7ef4\u5411\u91cf\uff0c\u7ecf\u8fc7\u4e24\u4e2a\u5168\u8fde\u63a5\u5c42\u5f97\u5230\u8f93\u51fa\u7ed3\u679c\u3002<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0a\u5b9a\u4e49\u597d\u7684CNN\u6a21\u578b\u8fdb\u884c\u56fe\u50cf\u5206\u7c7b\u4efb\u52a1\u7684\u8bad\u7ec3\u548c\u9884\u6d4b\u3002\u5177\u4f53\u7684\u8bad\u7ec3\u548c\u9884\u6d4b\u6d41\u7a0b\u53ef\u4ee5\u53c2\u8003\u524d\u9762\u7684\u7ae0\u8282\u3002\u9664\u4e86CNN\u6a21\u578b\uff0cPyTorch\u8fd8\u652f\u6301\u5176\u4ed6\u7c7b\u578b\u7684\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\uff0c\u5982\u5168\u8fde\u63a5<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u5faa\u73af\u795e\u7ecf\u7f51\u7edc (RNN)<\/p>\n\n\n\n<p>\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\uff08Recurrent Neural Network\uff0cRNN\uff09\u662f\u4e00\u79cd\u5e38\u7528\u7684\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\uff0c\u5b83\u53ef\u4ee5\u5bf9\u5e8f\u5217\u6570\u636e\u8fdb\u884c\u5904\u7406\uff0c\u5982\u6587\u672c\u3001\u8bed\u97f3\u7b49\u3002\u4e0e\u5168\u8fde\u63a5\u795e\u7ecf\u7f51\u7edc\u548c\u5377\u79ef\u795e\u7ecf\u7f51\u7edc\u4e0d\u540c\uff0cRNN\u4f7f\u7528\u5faa\u73af\u7ed3\u6784\u6765\u5904\u7406\u5e8f\u5217\u6570\u636e\uff0c\u5177\u6709\u8bb0\u5fc6\u80fd\u529b\uff0c\u53ef\u4ee5\u4f20\u9012\u4fe1\u606f\u3002<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528torch.nn\u6a21\u5757\u4e2d\u7684RNN\u3001LSTM\u3001GRU\u7b49\u7c7b\u6765\u5b9a\u4e49\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u3002\u4e0b\u9762\u662f\u4e00\u4e2a\u7b80\u5355\u7684RNN\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pythonCopy code<code>import torch\nimport torch.nn as nn\n\nclass RNN(nn.Module):\n    def __init__(self):\n        super(RNN, self).__init__()\n        self.rnn = nn.RNN(input_size=28, hidden_size=128, num_layers=2, batch_first=True)\n        self.fc = nn.Linear(128, 10)\n\n    def forward(self, x):\n        h0 = torch.zeros(2, x.size(0), 128)\n        out, _ = self.rnn(x, h0)\n        out = self.fc(out[:, -1, :])\n        return out\n<\/code><\/pre>\n\n\n\n<p>\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u5b9a\u4e49\u4e86\u4e00\u4e2a\u5305\u542b\u4e00\u4e2aRNN\u5c42\u548c\u4e00\u4e2a\u5168\u8fde\u63a5\u5c42\u7684RNN\u6a21\u578b\u3002\u5728\u521d\u59cb\u5316\u51fd\u6570__init__()\u4e2d\uff0c\u4f7f\u7528nn.RNN\u7c7b\u5b9a\u4e49\u4e86\u4e00\u4e2aRNN\u5c42\uff0c\u8f93\u5165\u5927\u5c0f\u4e3a28\uff0c\u9690\u85cf\u72b6\u6001\u5927\u5c0f\u4e3a128\uff0c\u5c42\u6570\u4e3a2\uff0cbatch_first\u53c2\u6570\u4e3aTrue\uff0c\u8868\u793a\u8f93\u5165\u6570\u636e\u7684batch\u7ef4\u5ea6\u5728\u7b2c\u4e00\u7ef4\u3002\u4f7f\u7528nn.Linear\u7c7b\u5b9a\u4e49\u4e86\u4e00\u4e2a\u8f93\u51fa\u5927\u5c0f\u4e3a10\u7684\u5168\u8fde\u63a5\u5c42\u3002<\/p>\n\n\n\n<p>\u5728forward()\u51fd\u6570\u4e2d\uff0c\u9996\u5148\u4f7f\u7528torch.zeros()\u51fd\u6570\u521b\u5efa\u4e00\u4e2a\u5927\u5c0f\u4e3a\uff082\uff0cbatch_size\uff0c128\uff09\u7684\u5f20\u91cf\u4f5c\u4e3aRNN\u5c42\u7684\u521d\u59cb\u9690\u85cf\u72b6\u6001h0\u3002\u7136\u540e\u5c06\u8f93\u5165\u6570\u636ex\u548c\u9690\u85cf\u72b6\u6001h0\u4f20\u5165RNN\u5c42\u8fdb\u884c\u524d\u5411\u4f20\u64ad\uff0c\u5f97\u5230RNN\u5c42\u7684\u8f93\u51faout\u3002\u6700\u540e\u4f7f\u7528out[:, -1, :]\u53d6\u51fa\u6bcf\u4e2a\u6837\u672c\u5728\u5e8f\u5217\u672b\u5c3e\u7684\u9690\u85cf\u72b6\u6001\uff0c\u5e76\u7ecf\u8fc7\u5168\u8fde\u63a5\u5c42\u5f97\u5230\u8f93\u51fa\u7ed3\u679c\u3002<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0a\u5b9a\u4e49\u597d\u7684RNN\u6a21\u578b\u8fdb\u884c\u5e8f\u5217\u6570\u636e\u5904\u7406\u7684\u8bad\u7ec3\u548c\u9884\u6d4b\u3002\u5177\u4f53\u7684\u8bad\u7ec3\u548c\u9884\u6d4b\u6d41\u7a0b\u53ef\u4ee5\u53c2\u8003\u524d\u9762\u7684\u7ae0\u8282\u3002\u9664\u4e86RNN\u6a21\u578b\uff0cPyTorch\u8fd8\u652f\u6301\u5176\u4ed6\u7c7b\u578b\u7684\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\uff0c\u5982LSTM\u3001GRU\u7b49\uff0c\u53ef\u4ee5\u6839\u636e\u5177\u4f53\u95ee\u9898\u548c\u6570\u636e\u96c6\u9009\u62e9\u5408\u9002\u7684\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u957f\u77ed\u65f6\u8bb0\u5fc6\u7f51\u7edc (LSTM)<\/p>\n\n\n\n<p>\u957f\u77ed\u65f6\u8bb0\u5fc6\u7f51\u7edc\uff08Long Short-Term Memory\uff0cLSTM\uff09\u662f\u4e00\u79cd\u5e38\u7528\u7684\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\uff0c\u5b83\u53ef\u4ee5\u6709\u6548\u5730\u5904\u7406\u957f\u5e8f\u5217\u6570\u636e\uff0c\u5982\u6587\u672c\u3001\u8bed\u97f3\u7b49\u3002\u4e0e\u6807\u51c6\u7684RNN\u6a21\u578b\u4e0d\u540c\uff0cLSTM\u5728\u6bcf\u4e2a\u65f6\u95f4\u6b65\u4f7f\u7528\u4e09\u4e2a\u95e8\uff08\u8f93\u5165\u95e8\u3001\u9057\u5fd8\u95e8\u548c\u8f93\u51fa\u95e8\uff09\u6765\u63a7\u5236\u4fe1\u606f\u7684\u6d41\u52a8\uff0c\u4ece\u800c\u89e3\u51b3\u4e86\u6807\u51c6RNN\u4e2d\u68af\u5ea6\u6d88\u5931\u548c\u68af\u5ea6\u7206\u70b8\u7684\u95ee\u9898\u3002<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528torch.nn\u6a21\u5757\u4e2d\u7684LSTM\u7c7b\u6765\u5b9a\u4e49LSTM\u6a21\u578b\u3002\u4e0b\u9762\u662f\u4e00\u4e2a\u7b80\u5355\u7684LSTM\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pythonCopy code<code>import torch\nimport torch.nn as nn\n\nclass LSTM(nn.Module):\n    def __init__(self):\n        super(LSTM, self).__init__()\n        self.lstm = nn.LSTM(input_size=28, hidden_size=128, num_layers=2, batch_first=True)\n        self.fc = nn.Linear(128, 10)\n\n    def forward(self, x):\n        h0 = torch.zeros(2, x.size(0), 128)\n        c0 = torch.zeros(2, x.size(0), 128)\n        out, _ = self.lstm(x, (h0, c0))\n        out = self.fc(out[:, -1, :])\n        return out\n<\/code><\/pre>\n\n\n\n<p>\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u5b9a\u4e49\u4e86\u4e00\u4e2a\u5305\u542b\u4e00\u4e2aLSTM\u5c42\u548c\u4e00\u4e2a\u5168\u8fde\u63a5\u5c42\u7684LSTM\u6a21\u578b\u3002\u5728\u521d\u59cb\u5316\u51fd\u6570__init__()\u4e2d\uff0c\u4f7f\u7528nn.LSTM\u7c7b\u5b9a\u4e49\u4e86\u4e00\u4e2aLSTM\u5c42\uff0c\u8f93\u5165\u5927\u5c0f\u4e3a28\uff0c\u9690\u85cf\u72b6\u6001\u5927\u5c0f\u4e3a128\uff0c\u5c42\u6570\u4e3a2\uff0cbatch_first\u53c2\u6570\u4e3aTrue\uff0c\u8868\u793a\u8f93\u5165\u6570\u636e\u7684batch\u7ef4\u5ea6\u5728\u7b2c\u4e00\u7ef4\u3002\u4f7f\u7528nn.Linear\u7c7b\u5b9a\u4e49\u4e86\u4e00\u4e2a\u8f93\u51fa\u5927\u5c0f\u4e3a10\u7684\u5168\u8fde\u63a5\u5c42\u3002<\/p>\n\n\n\n<p>\u5728forward()\u51fd\u6570\u4e2d\uff0c\u9996\u5148\u4f7f\u7528torch.zeros()\u51fd\u6570\u521b\u5efa\u5927\u5c0f\u4e3a\uff082\uff0cbatch_size\uff0c128\uff09\u7684\u5f20\u91cf\u4f5c\u4e3aLSTM\u5c42\u7684\u521d\u59cb\u9690\u85cf\u72b6\u6001h0\u548c\u521d\u59cb\u7ec6\u80de\u72b6\u6001c0\u3002\u7136\u540e\u5c06\u8f93\u5165\u6570\u636ex\u548c\u9690\u85cf\u72b6\u6001h0\u3001\u7ec6\u80de\u72b6\u6001c0\u4f20\u5165LSTM\u5c42\u8fdb\u884c\u524d\u5411\u4f20\u64ad\uff0c\u5f97\u5230LSTM\u5c42\u7684\u8f93\u51faout\u3002\u6700\u540e\u4f7f\u7528out[:, -1, :]\u53d6\u51fa\u6bcf\u4e2a\u6837\u672c\u5728\u5e8f\u5217\u672b\u5c3e\u7684\u9690\u85cf\u72b6\u6001\uff0c\u5e76\u7ecf\u8fc7\u5168\u8fde\u63a5\u5c42\u5f97\u5230\u8f93\u51fa\u7ed3\u679c\u3002<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0a\u5b9a\u4e49\u597d\u7684LSTM\u6a21\u578b\u8fdb\u884c\u957f\u5e8f\u5217\u6570\u636e\u5904\u7406\u7684\u8bad\u7ec3\u548c\u9884\u6d4b\u3002\u5177\u4f53\u7684\u8bad\u7ec3\u548c\u9884\u6d4b\u6d41\u7a0b\u53ef\u4ee5\u53c2\u8003\u524d\u9762\u7684\u7ae0\u8282\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch Transformer<\/p>\n\n\n\n<p>Transformer\u662f\u4e00\u79cd\u5e38\u7528\u7684\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\uff0c\u7528\u4e8e\u81ea\u7136\u8bed\u8a00\u5904\u7406\u9886\u57df\uff0c\u5b83\u7531Google\u63d0\u51fa\u5e76\u5e94\u7528\u4e8e\u673a\u5668\u7ffb\u8bd1\u4efb\u52a1\u3002\u4e0e\u4f20\u7edf\u7684\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u4e0d\u540c\uff0cTransformer\u4f7f\u7528\u4e86\u81ea\u6ce8\u610f\u529b\u673a\u5236\uff08Self-Attention\uff09\u6765\u5904\u7406\u8f93\u5165\u5e8f\u5217\uff0c\u907f\u514d\u4e86\u4f20\u7edf\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u7684\u987a\u5e8f\u5904\u7406\u7f3a\u9677\uff0c\u540c\u65f6\u4e5f\u5927\u5e45\u63d0\u5347\u4e86\u6a21\u578b\u7684\u5e76\u884c\u6027\u80fd\u3002<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528torch.nn\u6a21\u5757\u4e2d\u7684Transformer\u7c7b\u6765\u5b9a\u4e49Transformer\u6a21\u578b\u3002\u4e0b\u9762\u662f\u4e00\u4e2a\u7b80\u5355\u7684Transformer\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pythonCopy code<code>import torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch.nn import TransformerEncoder, TransformerEncoderLayer\n\nclass TransformerModel(nn.Module):\n    def __init__(self, ntoken, ninp, nhead, nhid, nlayers, dropout=0.5):\n        super(TransformerModel, self).__init__()\n        self.model_type = 'Transformer'\n        self.pos_encoder = PositionalEncoding(ninp, dropout)\n        encoder_layers = TransformerEncoderLayer(ninp, nhead, nhid, dropout)\n        self.transformer_encoder = TransformerEncoder(encoder_layers, nlayers)\n        self.encoder = nn.Embedding(ntoken, ninp)\n        self.ninp = ninp\n        self.decoder = nn.Linear(ninp, ntoken)\n\n        self.init_weights()\n\n    def init_weights(self):\n        initrange = 0.1\n        self.encoder.weight.data.uniform_(-initrange, initrange)\n        self.decoder.bias.data.zero_()\n        self.decoder.weight.data.uniform_(-initrange, initrange)\n\n    def forward(self, src, src_mask):\n        src = self.encoder(src) * math.sqrt(self.ninp)\n        src = self.pos_encoder(src)\n        output = self.transformer_encoder(src, src_mask)\n        output = self.decoder(output)\n        return F.log_softmax(output, dim=-1)\n\n\nclass PositionalEncoding(nn.Module):\n\n    def __init__(self, d_model, dropout=0.1, max_len=5000):\n        super(PositionalEncoding, self).__init__()\n        self.dropout = nn.Dropout(p=dropout)\n\n        pe = torch.zeros(max_len, d_model)\n        position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)\n        div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-math.log(10000.0) \/ d_model))\n        pe[:, 0::2] = torch.sin(position * div_term)\n        pe[:, 1::2] = torch.cos(position * div_term)\n        pe = pe.unsqueeze(0).transpose(0, 1)\n        self.register_buffer('pe', pe)\n\n    def forward(self, x):\n        x = x + self.pe[:x.size(0), :]\n        return self.dropout(x)\n<\/code><\/pre>\n\n\n\n<p>\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u5b9a\u4e49\u4e86\u4e00\u4e2a\u5305\u542b\u4e00\u4e2aTransformerEncoder\u5c42\u548c\u4e00\u4e2a\u7ebf\u6027\u5c42\u7684Transformer\u6a21\u578b\u3002\u5728\u521d\u59cb\u5316\u51fd\u6570__init__()\u4e2d\uff0c\u5b9a\u4e49\u4e86\u6a21\u578b\u4e2d\u7684\u4e00\u4e9b\u53c2\u6570\uff0c\u5982\u8bcd\u8868\u5927\u5c0fntoken\u3001\u5d4c\u5165\u7ef4\u5ea6ninp\u3001\u5934\u6570nhead\u3001\u9690\u85cf\u5c42\u5927\u5c0fnhid\u3001\u5c42\u6570nlayers\u7b49\u3002\u4f7f\u7528\u4e86\u4e00\u4e2aPositionalEncoding\u7c7b\u6765\u5bf9\u8f93\u5165\u8fdb\u884c\u4f4d\u7f6e\u7f16\u7801\uff0c\u540c\u65f6\u5b9a\u4e49\u4e86\u4e00\u4e2aTransformerEncoder\u5c42\u548c\u4e00\u4e2a\u7ebf\u6027\u5c42\uff0c\u5176\u4e2dTransformerEncoder\u5c42\u7531\u591a\u4e2aTransformerEncoderLayer\u7ec4\u6210\u3002<\/p>\n\n\n\n<p>\u5728forward()\u51fd\u6570\u4e2d\uff0c\u9996\u5148\u5bf9\u8f93\u5165\u8fdb\u884c\u4e86<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u7ee7\u7eed<\/p>\n\n\n\n<p>\u5d4c\u5165\u64cd\u4f5c\uff0c\u7136\u540e\u4f7f\u7528\u4e86PositionalEncoding\u7c7b\u5bf9\u8f93\u5165\u8fdb\u884c\u4e86\u4f4d\u7f6e\u7f16\u7801\u3002\u63a5\u7740\uff0c\u5c06\u7f16\u7801\u540e\u7684\u8f93\u5165\u548c\u8f93\u5165\u63a9\u7801\u4f20\u5165TransformerEncoder\u5c42\u8fdb\u884c\u524d\u5411\u4f20\u64ad\uff0c\u5f97\u5230TransformerEncoder\u5c42\u7684\u8f93\u51faoutput\u3002\u6700\u540e\uff0c\u5c06\u8f93\u51faoutput\u7ecf\u8fc7\u7ebf\u6027\u5c42\u548clog_softmax\u6fc0\u6d3b\u51fd\u6570\u5f97\u5230\u6a21\u578b\u7684\u8f93\u51fa\u7ed3\u679c\u3002<\/p>\n\n\n\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0cPositionalEncoding\u7c7b\u662f\u7528\u4e8e\u5bf9\u8f93\u5165\u8fdb\u884c\u4f4d\u7f6e\u7f16\u7801\u7684\u3002Transformer\u6a21\u578b\u4e2d\u7531\u4e8e\u6ca1\u6709\u5faa\u73af\u6216\u8005\u5377\u79ef\u7ed3\u6784\uff0c\u6240\u4ee5\u9700\u8981\u5bf9\u8f93\u5165\u7684\u4f4d\u7f6e\u4fe1\u606f\u8fdb\u884c\u7f16\u7801\uff0c\u4ece\u800c\u8ba9\u6a21\u578b\u80fd\u591f\u5bf9\u8f93\u5165\u4e2d\u7684\u4e0d\u540c\u4f4d\u7f6e\u4fe1\u606f\u8fdb\u884c\u533a\u5206\u548c\u5904\u7406\u3002PositionalEncoding\u7c7b\u7684\u5b9e\u73b0\u65b9\u6cd5\u91c7\u7528\u4e86\u8bba\u6587\u300aAttention is All You Need\u300b\u4e2d\u7684\u65b9\u6cd5\uff0c\u5373\u5c06\u4f4d\u7f6e\u4fe1\u606f\u7f16\u7801\u6210\u4e00\u7ec4\u6b63\u5f26\u548c\u4f59\u5f26\u51fd\u6570\u7684\u503c\uff0c\u5e76\u5c06\u7f16\u7801\u540e\u7684\u4f4d\u7f6e\u4fe1\u606f\u52a0\u5230\u8f93\u5165\u5f20\u91cf\u4e2d\u3002<\/p>\n\n\n\n<p>\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0a\u5b9a\u4e49\u597d\u7684Transformer\u6a21\u578b\u8fdb\u884c\u81ea\u7136\u8bed\u8a00\u5904\u7406\u4efb\u52a1\u7684\u8bad\u7ec3\u548c\u9884\u6d4b\u3002\u5177\u4f53\u7684\u8bad\u7ec3\u548c\u9884\u6d4b\u6d41\u7a0b\u53ef\u4ee5\u53c2\u8003\u524d\u9762\u7684\u7ae0\u8282\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u6df1\u5ea6\u5b66\u4e60\u5e94\u7528\u5b9e\u4f8b\u56fe\u50cf\u5206\u7c7b<\/p>\n\n\n\n<p>\u56fe\u50cf\u5206\u7c7b\u662f\u6df1\u5ea6\u5b66\u4e60\u4e2d\u5e38\u89c1\u7684\u5e94\u7528\u4e4b\u4e00\uff0c\u4e5f\u662f\u6df1\u5ea6\u5b66\u4e60\u5165\u95e8\u5e38\u7528\u7684\u793a\u4f8b\u3002\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528torchvision\u6a21\u5757\u63d0\u4f9b\u7684\u6570\u636e\u96c6\u548c\u6a21\u578b\u6765\u8fdb\u884c\u56fe\u50cf\u5206\u7c7b\u4efb\u52a1\u7684\u8bad\u7ec3\u548c\u9884\u6d4b\u3002\u4e0b\u9762\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u56fe\u50cf\u5206\u7c7b\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">scssCopy code<code>import torch\nimport torch.nn as nn\nimport torch.optim as optim\nimport torchvision\nimport torchvision.transforms as transforms\n\n# \u5b9a\u4e49\u6570\u636e\u9884\u5904\u7406\u65b9\u5f0f\ntransform = transforms.Compose(\n    [transforms.ToTensor(),\n     transforms.Normalize((0.5,), (0.5,))])\n\n# \u52a0\u8f7d\u6570\u636e\u96c6\ntrainset = torchvision.datasets.MNIST(root='.\/data', train=True,\n                                        download=True, transform=transform)\ntrainloader = torch.utils.data.DataLoader(trainset, batch_size=64,\n                                          shuffle=True, num_workers=2)\n\ntestset = torchvision.datasets.MNIST(root='.\/data', train=False,\n                                       download=True, transform=transform)\ntestloader = torch.utils.data.DataLoader(testset, batch_size=64,\n                                         shuffle=False, num_workers=2)\n\n# \u5b9a\u4e49\u6a21\u578b\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        self.conv1 = nn.Conv2d(1, 6, 5)\n        self.pool = nn.MaxPool2d(2, 2)\n        self.conv2 = nn.Conv2d(6, 16, 5)\n        self.fc1 = nn.Linear(16 * 4 * 4, 120)\n        self.fc2 = nn.Linear(120, 84)\n        self.fc3 = nn.Linear(84, 10)\n\n    def forward(self, x):\n        x = self.pool(F.relu(self.conv1(x)))\n        x = self.pool(F.relu(self.conv2(x)))\n        x = x.view(-1, 16 * 4 * 4)\n        x = F.relu(self.fc1(x))\n        x = F.relu(self.fc2(x))\n        x = self.fc3(x)\n        return x\n\n# \u5b9a\u4e49\u635f\u5931\u51fd\u6570\u548c\u4f18\u5316\u5668\nnet = Net()\ncriterion = nn.CrossEntropyLoss()\noptimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)\n\n# \u8bad\u7ec3\u6a21\u578b\nfor epoch in range(10):\n    running_loss = 0.0\n    for i, data in enumerate(trainloader, 0):\n        inputs, labels = data\n        optimizer.zero_grad()\n        outputs = net(inputs)\n        loss = criterion(outputs, labels)\n        loss.backward()\n        optimizer.step()\n\n        running_loss += loss.item()\n        if i % 100 == 99:\n            print('[%d, %5d] loss: %.3f' %\n                  (epoch + 1, i + 1, running_loss \/ 100))\n            running_loss = 0.0\n\n# \u6d4b\u8bd5\u6a21\u578b\ncorrect = 0\ntotal = 0\nwith torch.no_grad():\n    for data in testloader:\n        images, labels = data\n        outputs = net(images)\n        _, predicted = torch.max(outputs.data, 1)\n        total += labels.size(0)\n        correct += (predicted == labels).sum().item()\n\nprint('Accuracy of the network on the 10000 test images: %d %%' % (\n    100 * correct \/ total))\n<\/code><\/pre>\n\n\n\n<p>\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u9996\u5148\u5b9a\u4e49\u4e86\u6570\u636e\u9884\u5904\u7406\u65b9\u5f0ftransform\uff0c\u7528\u4e8e\u5c06\u8f93\u5165\u6570\u636e\u8fdb\u884c\u6807\u51c6\u5316\u548c\u8f6c\u6362\u6210\u5f20\u91cf\u3002\u7136\u540e<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u7ee7\u7eed<\/p>\n\n\n\n<p>\u4f7f\u7528torchvision.datasets\u6a21\u5757\u4e2d\u7684MNIST\u6570\u636e\u96c6\u52a0\u8f7d\u8bad\u7ec3\u96c6\u548c\u6d4b\u8bd5\u96c6\uff0c\u540c\u65f6\u4f7f\u7528torch.utils.data\u6a21\u5757\u4e2d\u7684DataLoader\u6765\u6784\u5efa\u6570\u636e\u8fed\u4ee3\u5668trainloader\u548ctestloader\uff0c\u7528\u4e8e\u540e\u7eed\u6a21\u578b\u7684\u8bad\u7ec3\u548c\u6d4b\u8bd5\u3002<\/p>\n\n\n\n<p>\u5b9a\u4e49\u4e86\u4e00\u4e2a\u7b80\u5355\u7684\u5377\u79ef\u795e\u7ecf\u7f51\u7edc\u6a21\u578bNet\uff0c\u5305\u542b\u4e24\u4e2a\u5377\u79ef\u5c42\u548c\u4e09\u4e2a\u5168\u8fde\u63a5\u5c42\u3002\u5728\u6a21\u578b\u7684forward()\u51fd\u6570\u4e2d\uff0c\u5148\u901a\u8fc7\u4e24\u4e2a\u5377\u79ef\u5c42\u63d0\u53d6\u8f93\u5165\u6570\u636e\u4e2d\u7684\u7279\u5f81\u4fe1\u606f\uff0c\u7136\u540e\u5c06\u7279\u5f81\u4fe1\u606f\u901a\u8fc7\u5168\u8fde\u63a5\u5c42\u8fdb\u884c\u5206\u7c7b\u9884\u6d4b\u3002<\/p>\n\n\n\n<p>\u63a5\u7740\uff0c\u5b9a\u4e49\u4e86\u635f\u5931\u51fd\u6570\u548c\u4f18\u5316\u5668\uff0c\u4f7f\u7528\u4ea4\u53c9\u71b5\u635f\u5931\u51fd\u6570\u548c\u968f\u673a\u68af\u5ea6\u4e0b\u964d\u4f18\u5316\u5668\u8fdb\u884c\u6a21\u578b\u7684\u8bad\u7ec3\u3002\u5728\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\uff0c\u5bf9\u8bad\u7ec3\u96c6\u8fdb\u884c\u904d\u5386\uff0c\u5bf9\u6bcf\u4e2abatch\u7684\u6570\u636e\u8fdb\u884c\u524d\u5411\u4f20\u64ad\u3001\u8ba1\u7b97\u635f\u5931\u3001\u53cd\u5411\u4f20\u64ad\u3001\u66f4\u65b0\u6a21\u578b\u53c2\u6570\u7b49\u64cd\u4f5c\u3002\u540c\u65f6\uff0c\u8bb0\u5f55\u6a21\u578b\u5728\u8bad\u7ec3\u96c6\u4e0a\u7684\u635f\u5931\u503c\uff0c\u5e76\u5728\u6bcf\u4e2aepoch\u7ed3\u675f\u65f6\u6253\u5370\u51fa\u5e73\u5747\u635f\u5931\u503c\u3002<\/p>\n\n\n\n<p>\u6700\u540e\uff0c\u4f7f\u7528\u6d4b\u8bd5\u96c6\u5bf9\u8bad\u7ec3\u597d\u7684\u6a21\u578b\u8fdb\u884c\u6d4b\u8bd5\uff0c\u5e76\u8ba1\u7b97\u6a21\u578b\u7684\u5206\u7c7b\u51c6\u786e\u7387\u3002\u5728\u6d4b\u8bd5\u8fc7\u7a0b\u4e2d\uff0c\u5bf9\u6d4b\u8bd5\u96c6\u8fdb\u884c\u904d\u5386\uff0c\u5bf9\u6bcf\u4e2abatch\u7684\u6570\u636e\u8fdb\u884c\u524d\u5411\u4f20\u64ad\uff0c\u5f97\u5230\u6a21\u578b\u7684\u8f93\u51fa\u7ed3\u679c\uff0c\u5e76\u4f7f\u7528torch.max()\u51fd\u6570\u8ba1\u7b97\u51fa\u6bcf\u4e2a\u6837\u672c\u9884\u6d4b\u7684\u7c7b\u522b\u3002\u7edf\u8ba1\u9884\u6d4b\u6b63\u786e\u7684\u6837\u672c\u6570\uff0c\u6700\u540e\u8ba1\u7b97\u51fa\u6a21\u578b\u5728\u6d4b\u8bd5\u96c6\u4e0a\u7684\u5206\u7c7b\u51c6\u786e\u7387\u3002<\/p>\n\n\n\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u4ee5\u4e0a\u793a\u4f8b\u4e2d\u7684\u5377\u79ef\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u4ec5\u9002\u7528\u4e8e\u624b\u5199\u6570\u5b57\u56fe\u50cf\u5206\u7c7b\u4efb\u52a1\u3002\u5728\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u9700\u8981\u6839\u636e\u4e0d\u540c\u7684\u4efb\u52a1\u548c\u6570\u636e\u96c6\u9009\u62e9\u4e0d\u540c\u7684\u6a21\u578b\u67b6\u6784\uff0c\u5e76\u8fdb\u884c\u76f8\u5e94\u7684\u8c03\u6574\u548c\u4f18\u5316\u3002\u540c\u65f6\uff0c\u4e5f\u53ef\u4ee5\u91c7\u7528\u8fc1\u79fb\u5b66\u4e60\u7b49\u6280\u672f\u6765\u501f\u52a9\u5df2\u6709\u7684\u9884\u8bad\u7ec3\u6a21\u578b\uff0c\u4ece\u800c\u66f4\u5feb\u5730\u8bad\u7ec3\u51fa\u9ad8\u6027\u80fd\u7684\u56fe\u50cf\u5206\u7c7b\u6a21\u578b\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u6df1\u5ea6\u5b66\u4e60\u5e94\u7528\u5b9e\u4f8b\u7269\u4f53\u68c0\u6d4b<\/p>\n\n\n\n<p>\u7269\u4f53\u68c0\u6d4b\u662f\u6df1\u5ea6\u5b66\u4e60\u4e2d\u7684\u53e6\u4e00\u4e2a\u91cd\u8981\u5e94\u7528\uff0c\u5176\u76ee\u6807\u662f\u5728\u56fe\u50cf\u4e2d\u5b9a\u4f4d\u5e76\u8bc6\u522b\u51fa\u591a\u4e2a\u7269\u4f53\u7684\u4f4d\u7f6e\u548c\u7c7b\u522b\u3002\u5728PyTorch\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528torchvision\u6a21\u5757\u63d0\u4f9b\u7684\u7269\u4f53\u68c0\u6d4b\u5de5\u5177\u5305\u6765\u8fdb\u884c\u7269\u4f53\u68c0\u6d4b\u4efb\u52a1\u7684\u8bad\u7ec3\u548c\u9884\u6d4b\u3002\u4e0b\u9762\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u7269\u4f53\u68c0\u6d4b\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pythonCopy code<code>import torch\nimport torchvision\nimport torchvision.transforms as transforms\nimport torchvision.models as models\nimport torchvision.datasets as datasets\nimport torchvision.utils as utils\nimport torch.nn as nn\nimport torch.optim as optim\nfrom torch.autograd import Variable\nimport time\n\n# \u5b9a\u4e49\u6570\u636e\u9884\u5904\u7406\u65b9\u5f0f\ntransform_train = transforms.Compose([\n    transforms.Resize((224, 224)),\n    transforms.RandomHorizontalFlip(),\n    transforms.ToTensor(),\n    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])\n])\n\ntransform_test = transforms.Compose([\n    transforms.Resize((224, 224)),\n    transforms.ToTensor(),\n    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])\n])\n\n# \u52a0\u8f7d\u6570\u636e\u96c6\ntrainset = datasets.CocoDetection(root='.\/data\/coco\/train2017\/',\n                                  annFile='.\/data\/coco\/annotations\/instances_train2017.json',\n                                  transform=transform_train)\n\ntestset = datasets.CocoDetection(root='.\/data\/coco\/val2017\/',\n                                 annFile='.\/data\/coco\/annotations\/instances_val2017.json',\n                                 transform=transform_test)\n\ntrainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=2)\ntestloader = torch.utils.data.DataLoader(testset, batch_size=4, shuffle=False, num_workers=2)\n\n# \u5b9a\u4e49\u6a21\u578b\nmodel = models.detection.fasterrcnn_resnet50_fpn(pretrained=True)\nnum_classes = 91  # 90\u4e2a\u7269\u4f53\u7c7b\u522b + \u80cc\u666f\u7c7b\u522b\nin_features = model.roi_heads.box_predictor.cls_score.in_features\nmodel.roi_heads.box_predictor = nn.Linear(in_features, num_classes)\n\n# \u5b9a\u4e49\u635f\u5931\u51fd\u6570\u548c\u4f18\u5316\u5668\nparams = [p for p in model.parameters() if p.requires_grad]\noptimizer = optim.SGD(params, lr=0.005, momentum=0.9, weight_decay=0.0005)\nlr_scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=3, gamma=0.1)\n\ndef train(model, data_loader, optimizer, criterion):\n    model.train()\n    running_loss = 0.0\n    for i, data in enumerate(data_loader, 0):\n        images, targets = data\n        images, targets = images.cuda(), [{k: v.cuda() for k, v in t.items()} for t in targets]\n\n        optimizer.zero_grad()\n\n        loss_dict = model(images, targets)\n        losses = sum(loss for loss in loss_dict.values())\n        loss_value = losses.item()\n\n        losses.backward()\n        optimizer.step()\n\n        running_loss += loss_value\n        if i % 100 == 99:\n            print('[%d, %5d] loss: %.3f' %\n                  (epoch + 1, i + 1, running_loss \/ 100))\n            running_loss = 0.0\n\ndef test(model, data_loader):\n    model.eval()\n    correct = 0\n    total = 0\n   \n<\/code><\/pre>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u7ee7\u7eed<\/p>\n\n\n\n<p>with torch.no_grad(): for data in data_loader: images, targets = data images, targets = images.cuda(), [{k: v.cuda() for k, v in t.items()} for t in targets]<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">scssCopy code<code>        outputs = model(images)\n\n        for i, output in enumerate(outputs):\n            _, predicted = torch.max(output['scores'], 0)\n            total += targets[i]['labels'].shape[0]\n            correct += (predicted == targets[i]['labels']).sum().item()\n\naccuracy = 100 * correct \/ total\nprint('Accuracy of the network on the test images: %d %%' % accuracy)\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u8bad\u7ec3\u6a21\u578b<\/h1>\n\n\n\n<p>device = torch.device(&#8216;cuda&#8217;) if torch.cuda.is_available() else torch.device(&#8216;cpu&#8217;) model.to(device) criterion = nn.CrossEntropyLoss()<\/p>\n\n\n\n<p>num_epochs = 5 for epoch in range(num_epochs): train(model, trainloader, optimizer, criterion) test(model, testloader) lr_scheduler.step()<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">objectivecCopy code<code>\n\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u9996\u5148\u5b9a\u4e49\u4e86\u6570\u636e\u9884\u5904\u7406\u65b9\u5f0ftransform_train\u548ctransform_test\uff0c\u5206\u522b\u7528\u4e8e\u8bad\u7ec3\u96c6\u548c\u6d4b\u8bd5\u96c6\u7684\u6570\u636e\u9884\u5904\u7406\u3002\u7136\u540e\u4f7f\u7528torchvision.datasets\u6a21\u5757\u4e2d\u7684CocoDetection\u6570\u636e\u96c6\u52a0\u8f7d\u8bad\u7ec3\u96c6\u548c\u6d4b\u8bd5\u96c6\uff0c\u5e76\u4f7f\u7528torch.utils.data\u6a21\u5757\u4e2d\u7684DataLoader\u6765\u6784\u5efa\u6570\u636e\u8fed\u4ee3\u5668trainloader\u548ctestloader\uff0c\u7528\u4e8e\u540e\u7eed\u6a21\u578b\u7684\u8bad\u7ec3\u548c\u6d4b\u8bd5\u3002\n\n\u5b9a\u4e49\u4e86\u4e00\u4e2a Faster R-CNN \u6a21\u578b\uff0c\u5e76\u4f7f\u7528\u9884\u8bad\u7ec3\u7684 ResNet50 \u6a21\u578b\u4f5c\u4e3a backbone\u3002\u540c\u65f6\u5c06 Faster R-CNN \u6a21\u578b\u7684\u5206\u7c7b\u5668\u5934\u90e8\u4fee\u6539\u4e3a\u5bf9\u7269\u4f53\u7684\u5206\u7c7b\uff0c\u5176\u4e2d num_classes \u8868\u793a\u7269\u4f53\u7c7b\u522b\u6570\u3002\n\n\u63a5\u7740\uff0c\u5b9a\u4e49\u4e86\u635f\u5931\u51fd\u6570\u548c\u4f18\u5316\u5668\uff0c\u4f7f\u7528 SGD \u4f18\u5316\u5668\u8fdb\u884c\u6a21\u578b\u7684\u8bad\u7ec3\u3002\u5728\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\uff0c\u5bf9\u8bad\u7ec3\u96c6\u8fdb\u884c\u904d\u5386\uff0c\u5bf9\u6bcf\u4e2abatch\u7684\u6570\u636e\u8fdb\u884c\u524d\u5411\u4f20\u64ad\u3001\u8ba1\u7b97\u635f\u5931\u3001\u53cd\u5411\u4f20\u64ad\u3001\u66f4\u65b0\u6a21\u578b\u53c2\u6570\u7b49\u64cd\u4f5c\u3002\u540c\u65f6\uff0c\u8bb0\u5f55\u6a21\u578b\u5728\u8bad\u7ec3\u96c6\u4e0a\u7684\u635f\u5931\u503c\uff0c\u5e76\u5728\u6bcf\u4e2aepoch\u7ed3\u675f\u65f6\u6253\u5370\u51fa\u5e73\u5747\u635f\u5931\u503c\u3002\u5728\u6bcf\u4e2a epoch \u7ed3\u675f\u65f6\uff0c\u8c03\u7528 test() \u51fd\u6570\u5728\u6d4b\u8bd5\u96c6\u4e0a\u6d4b\u8bd5\u6a21\u578b\u7684\u5206\u7c7b\u7cbe\u5ea6\u3002\n\n\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u4ee5\u4e0a\u793a\u4f8b\u4e2d\u7684 Faster R-CNN \u6a21\u578b\u4ec5\u9002\u7528\u4e8e COCO \u6570\u636e\u96c6\u4e0a\u7684\u7269\u4f53\u68c0\u6d4b\u4efb\u52a1\u3002\u5728\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u9700\u8981\u6839\u636e\u4e0d\u540c\u7684\u4efb\u52a1\u548c\u6570\u636e\u96c6\u9009\u62e9\u4e0d\u540c\u7684\u6a21\u578b\u67b6\u6784\uff0c\u5e76\u8fdb\u884c\u76f8\u5e94\u7684\u8c03\u6574\u548c\u4f18\u5316\u3002\u540c\u65f6\uff0c\u4e5f\u53ef\u4ee5\u91c7\u7528\u4e00\u4e9b\u66f4\u5148\u8fdb\u7684\u7269\u4f53\u68c0\u6d4b\u7b97\u6cd5\uff0c\u5982 YOLOv5\u3001EfficientDet \u7b49\u6765\u63d0\u9ad8\u68c0\u6d4b\u7cbe\u5ea6\u3002\n<\/code><\/pre>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u6df1\u5ea6\u5b66\u4e60\u5e94\u7528\u5b9e\u4f8b\u8bed\u4e49\u5206\u5272<\/p>\n\n\n\n<p>\u8bed\u4e49\u5206\u5272\u662f\u6307\u5c06\u56fe\u50cf\u4e2d\u7684\u6bcf\u4e2a\u50cf\u7d20\u5206\u914d\u4e00\u4e2a\u8bed\u4e49\u6807\u7b7e\uff0c\u7528\u4e8e\u5bf9\u56fe\u50cf\u8fdb\u884c\u50cf\u7d20\u7ea7\u522b\u7684\u5206\u5272\u548c\u7406\u89e3\u3002\u5728 PyTorch \u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528 torchvision \u6a21\u5757\u63d0\u4f9b\u7684\u8bed\u4e49\u5206\u5272\u5de5\u5177\u5305\u8fdb\u884c\u6a21\u578b\u8bad\u7ec3\u548c\u9884\u6d4b\u3002\u4e0b\u9762\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u8bed\u4e49\u5206\u5272\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pythonCopy code<code>import torch\nimport torchvision\nimport torchvision.transforms as transforms\nimport torchvision.models as models\nimport torch.nn as nn\nimport torch.optim as optim\nfrom torch.autograd import Variable\nimport time\n\n# \u5b9a\u4e49\u6570\u636e\u9884\u5904\u7406\u65b9\u5f0f\ntransform_train = transforms.Compose([\n    transforms.Resize((256, 256)),\n    transforms.RandomHorizontalFlip(),\n    transforms.ToTensor(),\n    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])\n])\n\ntransform_test = transforms.Compose([\n    transforms.Resize((256, 256)),\n    transforms.ToTensor(),\n    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])\n])\n\n# \u52a0\u8f7d\u6570\u636e\u96c6\ntrainset = torchvision.datasets.VOCSegmentation(root='.\/data', year='2012', image_set='train', download=True, transform=transform_train)\ntestset = torchvision.datasets.VOCSegmentation(root='.\/data', year='2012', image_set='val', download=True, transform=transform_test)\n\ntrainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=2)\ntestloader = torch.utils.data.DataLoader(testset, batch_size=4, shuffle=False, num_workers=2)\n\n# \u5b9a\u4e49\u6a21\u578b\nmodel = models.segmentation.fcn_resnet101(pretrained=True, progress=True)\nnum_classes = 21  # 20\u4e2a\u7269\u4f53\u7c7b\u522b + \u80cc\u666f\u7c7b\u522b\nin_features = model.classifier[-1].in_channels\nmodel.classifier[-1] = nn.Conv2d(in_features, num_classes, kernel_size=1)\n\n# \u5b9a\u4e49\u635f\u5931\u51fd\u6570\u548c\u4f18\u5316\u5668\nparams = [p for p in model.parameters() if p.requires_grad]\noptimizer = optim.SGD(params, lr=0.005, momentum=0.9, weight_decay=0.0005)\nlr_scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=3, gamma=0.1)\n\ncriterion = nn.CrossEntropyLoss()\n\n# \u5b9a\u4e49\u8bad\u7ec3\u51fd\u6570\u548c\u6d4b\u8bd5\u51fd\u6570\ndef train(model, data_loader, optimizer, criterion):\n    model.train()\n    running_loss = 0.0\n    for i, data in enumerate(data_loader, 0):\n        inputs, labels = data\n        inputs, labels = inputs.cuda(), labels.cuda()\n\n        optimizer.zero_grad()\n\n        outputs = model(inputs)\n        loss = criterion(outputs['out'], labels)\n\n        loss.backward()\n        optimizer.step()\n\n        running_loss += loss.item()\n        if i % 100 == 99:\n            print('[%d, %5d] loss: %.3f' %\n                  (epoch + 1, i + 1, running_loss \/ 100))\n            running_loss = 0.0\n\ndef test(model, data_loader):\n    model.eval()\n    correct = 0\n    total = 0\n    with torch.no_grad():\n        for data in data_loader:\n            images, labels = data\n            images, labels = images.cuda(), labels.cuda()\n\n            outputs = model(images)\n\n            _, predicted = torch\n<\/code><\/pre>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u7ee7\u7eed<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">scssCopy code<code>        max_scores, pred = torch.max(outputs['out'], dim=1)\n        total += labels.numel()\n        correct += (pred == labels).sum().item()\n\naccuracy = 100 * correct \/ total\nprint('Accuracy of the network on the test images: %d %%' % accuracy)\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u8bad\u7ec3\u6a21\u578b<\/h1>\n\n\n\n<p>device = torch.device(&#8216;cuda&#8217;) if torch.cuda.is_available() else torch.device(&#8216;cpu&#8217;) model.to(device)<\/p>\n\n\n\n<p>num_epochs = 5 for epoch in range(num_epochs): train(model, trainloader, optimizer, criterion) test(model, testloader) lr_scheduler.step()<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">scssCopy code<code>\n\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u9996\u5148\u5b9a\u4e49\u4e86\u6570\u636e\u9884\u5904\u7406\u65b9\u5f0f transform_train \u548c transform_test\uff0c\u5206\u522b\u7528\u4e8e\u8bad\u7ec3\u96c6\u548c\u6d4b\u8bd5\u96c6\u7684\u6570\u636e\u9884\u5904\u7406\u3002\u7136\u540e\u4f7f\u7528 torchvision.datasets \u6a21\u5757\u4e2d\u7684 VOCSegmentation \u6570\u636e\u96c6\u52a0\u8f7d\u8bad\u7ec3\u96c6\u548c\u6d4b\u8bd5\u96c6\uff0c\u5e76\u4f7f\u7528 torch.utils.data \u6a21\u5757\u4e2d\u7684 DataLoader \u6765\u6784\u5efa\u6570\u636e\u8fed\u4ee3\u5668 trainloader \u548c testloader\uff0c\u7528\u4e8e\u540e\u7eed\u6a21\u578b\u7684\u8bad\u7ec3\u548c\u6d4b\u8bd5\u3002\n\n\u5b9a\u4e49\u4e86\u4e00\u4e2a FCN-ResNet101 \u6a21\u578b\uff0c\u5176\u4e2d num_classes \u8868\u793a\u7269\u4f53\u7c7b\u522b\u6570\uff0cin_features \u8868\u793a\u6a21\u578b\u8f93\u51fa\u7279\u5f81\u56fe\u7684\u901a\u9053\u6570\u3002\u5728\u6a21\u578b\u7684\u8bad\u7ec3\u4e2d\uff0c\u4f7f\u7528 CrossEntropyLoss \u4f5c\u4e3a\u635f\u5931\u51fd\u6570\uff0c\u4f7f\u7528 SGD \u4f18\u5316\u5668\u8fdb\u884c\u6a21\u578b\u7684\u8bad\u7ec3\u3002\u5728\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\uff0c\u5bf9\u8bad\u7ec3\u96c6\u8fdb\u884c\u904d\u5386\uff0c\u5bf9\u6bcf\u4e2a batch \u7684\u6570\u636e\u8fdb\u884c\u524d\u5411\u4f20\u64ad\u3001\u8ba1\u7b97\u635f\u5931\u3001\u53cd\u5411\u4f20\u64ad\u3001\u66f4\u65b0\u6a21\u578b\u53c2\u6570\u7b49\u64cd\u4f5c\u3002\u540c\u65f6\uff0c\u8bb0\u5f55\u6a21\u578b\u5728\u8bad\u7ec3\u96c6\u4e0a\u7684\u635f\u5931\u503c\uff0c\u5e76\u5728\u6bcf\u4e2a epoch \u7ed3\u675f\u65f6\u6253\u5370\u51fa\u5e73\u5747\u635f\u5931\u503c\u3002\u5728\u6bcf\u4e2a epoch \u7ed3\u675f\u65f6\uff0c\u8c03\u7528 test() \u51fd\u6570\u5728\u6d4b\u8bd5\u96c6\u4e0a\u6d4b\u8bd5\u6a21\u578b\u7684\u5206\u5272\u7cbe\u5ea6\u3002\n\n\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u4ee5\u4e0a\u793a\u4f8b\u4e2d\u7684 FCN-ResNet101 \u6a21\u578b\u4ec5\u9002\u7528\u4e8e VOC \u6570\u636e\u96c6\u4e0a\u7684\u8bed\u4e49\u5206\u5272\u4efb\u52a1\u3002\u5728\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u9700\u8981\u6839\u636e\u4e0d\u540c\u7684\u4efb\u52a1\u548c\u6570\u636e\u96c6\u9009\u62e9\u4e0d\u540c\u7684\u6a21\u578b\u67b6\u6784\uff0c\u5e76\u8fdb\u884c\u76f8\u5e94\u7684\u8c03\u6574\u548c\u4f18\u5316\u3002\u540c\u65f6\uff0c\u4e5f\u53ef\u4ee5\u91c7\u7528\u4e00\u4e9b\u66f4\u5148\u8fdb\u7684\u8bed\u4e49\u5206\u5272\u7b97\u6cd5\uff0c\u5982 Deeplabv3+\u3001PSPNet \u7b49\u6765\u63d0\u9ad8\u5206\u5272\u7cbe\u5ea6\u3002\n<\/code><\/pre>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u6df1\u5ea6\u5b66\u4e60\u5e94\u7528\u5b9e\u4f8b\u673a\u5668\u7ffb\u8bd1<\/p>\n\n\n\n<p>\u673a\u5668\u7ffb\u8bd1\u662f\u6307\u5229\u7528\u8ba1\u7b97\u673a\u81ea\u52a8\u5b9e\u73b0\u4ece\u4e00\u79cd\u8bed\u8a00\u5230\u53e6\u4e00\u79cd\u8bed\u8a00\u7684\u7ffb\u8bd1\u3002\u5728 PyTorch \u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u6765\u5b9e\u73b0\u673a\u5668\u7ffb\u8bd1\uff0c\u5176\u4e2d\u7f16\u7801\u5668\u5c06\u6e90\u8bed\u8a00\u53e5\u5b50\u7f16\u7801\u4e3a\u5411\u91cf\uff0c\u89e3\u7801\u5668\u5c06\u5411\u91cf\u89e3\u7801\u4e3a\u76ee\u6807\u8bed\u8a00\u53e5\u5b50\u3002\u4e0b\u9762\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u673a\u5668\u7ffb\u8bd1\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pythonCopy code<code>import torch\nimport torch.nn as nn\nimport torch.optim as optim\nimport torch.nn.functional as F\nfrom torch.utils.data import Dataset, DataLoader\nfrom torch.nn.utils.rnn import pad_sequence\nimport numpy as np\nimport random\n\n# \u5b9a\u4e49\u8d85\u53c2\u6570\nSRC_VOCAB_SIZE = 10000\nTGT_VOCAB_SIZE = 10000\nEMBEDDING_SIZE = 256\nHIDDEN_SIZE = 512\nNUM_LAYERS = 2\nBATCH_SIZE = 64\nLEARNING_RATE = 1e-3\nNUM_EPOCHS = 10\nDEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n\n# \u5b9a\u4e49\u6570\u636e\u96c6\nclass TranslationDataset(Dataset):\n    def __init__(self, src_sentences, tgt_sentences):\n        self.src_sentences = src_sentences\n        self.tgt_sentences = tgt_sentences\n\n    def __len__(self):\n        return len(self.src_sentences)\n\n    def __getitem__(self, idx):\n        return self.src_sentences[idx], self.tgt_sentences[idx]\n\n# \u5b9a\u4e49\u6570\u636e\u9884\u5904\u7406\u65b9\u5f0f\ndef collate_fn(batch):\n    src_sentences, tgt_sentences = zip(*batch)\n    src_sentences = [torch.tensor(src_sentence) for src_sentence in src_sentences]\n    tgt_sentences = [torch.tensor(tgt_sentence) for tgt_sentence in tgt_sentences]\n\n    src_sentences = pad_sequence(src_sentences, padding_value=0)\n    tgt_sentences = pad_sequence(tgt_sentences, padding_value=0)\n\n    return src_sentences, tgt_sentences\n\n# \u52a0\u8f7d\u6570\u636e\u96c6\nsrc_sentences = np.load('.\/data\/src_sentences.npy')\ntgt_sentences = np.load('.\/data\/tgt_sentences.npy')\ntrain_size = int(0.8 * len(src_sentences))\n\ntrain_dataset = TranslationDataset(src_sentences[:train_size], tgt_sentences[:train_size])\nval_dataset = TranslationDataset(src_sentences[train_size:], tgt_sentences[train_size:])\n\ntrain_loader = DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True, collate_fn=collate_fn)\nval_loader = DataLoader(val_dataset, batch_size=BATCH_SIZE, shuffle=False, collate_fn=collate_fn)\n\n# \u5b9a\u4e49\u6a21\u578b\nclass Encoder(nn.Module):\n    def __init__(self, input_size, embedding_size, hidden_size, num_layers):\n        super(Encoder, self).__init__()\n        self.embedding = nn.Embedding(input_size, embedding_size)\n        self.gru = nn.GRU(embedding_size, hidden_size, num_layers=num_layers, bidirectional=True)\n\n    def forward(self, src_sentence):\n        embedded = self.embedding(src_sentence)\n        outputs, hidden = self.gru(embedded)\n        return outputs, hidden\n\nclass Decoder(nn.Module):\n    def __init__(self, output_size, embedding_size, hidden_size, num_layers):\n        super(Decoder, self).__init__()\n        self.embedding = nn.Embedding(output_size, embedding_size)\n        self.gru = nn.GRU(embedding_size, hidden_size, num_layers=num_layers)\n        self.out = nn.Linear(hidden_size, output_size)\n\n    def forward(self, input, hidden):\n        embedded = self.embedding(input.unsqueeze(0))\n        output,\n<\/code><\/pre>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u7ee7\u7eed<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">scssCopy code<code>    hidden = hidden.unsqueeze(0)\n    output, hidden = self.gru(embedded, hidden)\n    output = self.out(output.squeeze(0))\n    return output, hidden.squeeze(0)\n<\/code><\/pre>\n\n\n\n<p>class Seq2Seq(nn.Module): def <strong>init<\/strong>(self, encoder, decoder): super(Seq2Seq, self).<strong>init<\/strong>() self.encoder = encoder self.decoder = decoder<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">luaCopy code<code>def forward(self, src_sentence, tgt_sentence, teacher_forcing_ratio=0.5):\n    batch_size = src_sentence.shape[1]\n    max_len = tgt_sentence.shape[0]\n    vocab_size = self.decoder.out.out_features\n\n    outputs = torch.zeros(max_len, batch_size, vocab_size).to(DEVICE)\n    encoder_outputs, hidden = self.encoder(src_sentence)\n\n    decoder_input = tgt_sentence[0, :]\n    for t in range(1, max_len):\n        output, hidden = self.decoder(decoder_input, hidden)\n        outputs[t] = output\n        teacher_force = random.random() &lt; teacher_forcing_ratio\n        top1 = output.argmax(1)\n        decoder_input = tgt_sentence[t] if teacher_force else top1\n\n    return outputs\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u8bad\u7ec3\u6a21\u578b<\/h1>\n\n\n\n<p>encoder = Encoder(SRC_VOCAB_SIZE, EMBEDDING_SIZE, HIDDEN_SIZE, NUM_LAYERS) decoder = Decoder(TGT_VOCAB_SIZE, EMBEDDING_SIZE, HIDDEN_SIZE, NUM_LAYERS) model = Seq2Seq(encoder, decoder).to(DEVICE)<\/p>\n\n\n\n<p>criterion = nn.CrossEntropyLoss(ignore_index=0) optimizer = optim.Adam(model.parameters(), lr=LEARNING_RATE) lr_scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=1, gamma=0.1)<\/p>\n\n\n\n<p>def train(model, iterator, optimizer, criterion): model.train() epoch_loss = 0<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">scssCopy code<code>for i, (src_sentence, tgt_sentence) in enumerate(iterator):\n    src_sentence = src_sentence.to(DEVICE)\n    tgt_sentence = tgt_sentence.to(DEVICE)\n\n    optimizer.zero_grad()\n    output = model(src_sentence, tgt_sentence)\n    output = output[1:].view(-1, output.shape[-1])\n    tgt_sentence = tgt_sentence[1:].view(-1)\n    loss = criterion(output, tgt_sentence)\n    loss.backward()\n    optimizer.step()\n\n    epoch_loss += loss.item()\n\nreturn epoch_loss \/ len(iterator)\n<\/code><\/pre>\n\n\n\n<p>def evaluate(model, iterator, criterion): model.eval() epoch_loss = 0<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">scssCopy code<code>with torch.no_grad():\n    for i, (src_sentence, tgt_sentence) in enumerate(iterator):\n        src_sentence = src_sentence.to(DEVICE)\n        tgt_sentence = tgt_sentence.to(DEVICE)\n\n        output = model(src_sentence, tgt_sentence, 0)\n        output = output[1:].view(-1, output.shape[-1])\n        tgt_sentence = tgt_sentence[1:].view(-1)\n        loss = criterion(output, tgt_sentence)\n\n        epoch_loss += loss.item()\n\nreturn epoch_loss \/ len(iterator)\n<\/code><\/pre>\n\n\n\n<p>for epoch in range(NUM_EPOCHS): train_loss = train(model, train_loader, optimizer, criterion) val_loss = evaluate(model, val_loader, criterion) lr_scheduler.step()<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cssCopy code<code>print(f'Epoch: {epoch+1} | Train Loss: {train_loss:.3f} | Val Loss: {val_loss:.3f}')\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Copy code<code>\n\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u9996\u5148\u5b9a\u4e49\u4e86\u8d85\u53c2\u6570\uff0c\u5305\u62ec\u6e90\u8bed\u8a00\u548c\u76ee\u6807\u8bed\u8a00\u8bcd\u6c47\u8868\u5927\u5c0f\u3001\u5d4c\u5165\u5c42\u7ef4\u5ea6\u3001\u9690\u85cf\u5c42\u7ef4\u5ea6\u3001\u7f51\u7edc\u5c42\u6570\u3001\u6279\u6b21\u5927\u5c0f\u3001\u5b66\u4e60\u7387\u548c\u8fed\u4ee3\u6b21\u6570\u3002\u7136\u540e\u5b9a\u4e49\u4e86 TranslationDataset \u7c7b\uff0c\n<\/code><\/pre>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u6df1\u5ea6\u5b66\u4e60\u5e94\u7528\u5b9e\u4f8b\u8bed\u97f3\u8bc6\u522b<\/p>\n\n\n\n<p>\u8bed\u97f3\u8bc6\u522b\u662f\u6307\u5c06\u4eba\u7c7b\u8bed\u97f3\u4fe1\u53f7\u8f6c\u6362\u4e3a\u6587\u672c\u6216\u5176\u4ed6\u673a\u5668\u53ef\u4ee5\u5904\u7406\u7684\u5f62\u5f0f\u7684\u4efb\u52a1\u3002\u5728 PyTorch \u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u6765\u5b9e\u73b0\u8bed\u97f3\u8bc6\u522b\u3002\u4e0b\u9762\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u8bed\u97f3\u8bc6\u522b\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pythonCopy code<code>import torch\nimport torch.nn as nn\nimport torch.optim as optim\nimport torch.nn.functional as F\nfrom torch.utils.data import Dataset, DataLoader\nimport torchaudio\nimport numpy as np\n\n# \u5b9a\u4e49\u8d85\u53c2\u6570\nNUM_CLASSES = 10\nNUM_EPOCHS = 10\nLEARNING_RATE = 1e-3\nBATCH_SIZE = 32\nDEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n\n# \u52a0\u8f7d\u6570\u636e\u96c6\ntrain_dataset = torchaudio.datasets.SPEECHCOMMANDS('.\/data', url='speech_commands_v0.02', download=True)\ntest_dataset = torchaudio.datasets.SPEECHCOMMANDS('.\/data', url='speech_commands_v0.02', download=True, split='testing')\n\n# \u5b9a\u4e49\u6570\u636e\u9884\u5904\u7406\u51fd\u6570\ndef preprocess_data(data):\n    waveform, sample_rate, label = data\n    mfcc_transform = torchaudio.transforms.MFCC(sample_rate=sample_rate)\n    mfccs = mfcc_transform(waveform).squeeze(0)\n    return mfccs, label\n\n# \u5b9a\u4e49\u6570\u636e\u96c6\nclass SpeechCommandsDataset(Dataset):\n    def __init__(self, dataset):\n        self.dataset = dataset\n\n    def __len__(self):\n        return len(self.dataset)\n\n    def __getitem__(self, idx):\n        data = self.dataset[idx]\n        mfccs, label = preprocess_data(data)\n        return mfccs, label\n\n# \u52a0\u8f7d\u6570\u636e\u96c6\ntrain_dataset = SpeechCommandsDataset(train_dataset)\ntest_dataset = SpeechCommandsDataset(test_dataset)\n\ntrain_loader = DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True)\ntest_loader = DataLoader(test_dataset, batch_size=BATCH_SIZE, shuffle=False)\n\n# \u5b9a\u4e49\u6a21\u578b\nclass SpeechRecognitionModel(nn.Module):\n    def __init__(self):\n        super(SpeechRecognitionModel, self).__init__()\n        self.conv1 = nn.Conv2d(1, 64, kernel_size=(3,3), stride=(2,2), padding=(1,1))\n        self.bn1 = nn.BatchNorm2d(64)\n        self.conv2 = nn.Conv2d(64, 128, kernel_size=(3,3), stride=(2,2), padding=(1,1))\n        self.bn2 = nn.BatchNorm2d(128)\n        self.conv3 = nn.Conv2d(128, 256, kernel_size=(3,3), stride=(2,2), padding=(1,1))\n        self.bn3 = nn.BatchNorm2d(256)\n        self.conv4 = nn.Conv2d(256, 512, kernel_size=(3,3), stride=(2,2), padding=(1,1))\n        self.bn4 = nn.BatchNorm2d(512)\n        self.pool = nn.AdaptiveAvgPool2d((1, 1))\n        self.fc = nn.Linear(512, NUM_CLASSES)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = self.bn1(x)\n        x = F.relu(x)\n\n        x = self.conv2(x)\n        x = self.bn2(x)\n        x = F.relu(x)\n\n        x = self.conv3(x)\n        x = self.bn3(x)\n        x = F.relu(x)\n\n        x = self.conv4(x)\n        x = self.bn4\n<\/code><\/pre>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u7ee7\u7eed<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">scssCopy code<code>    x = F.relu(x)\n\n    x = self.pool(x)\n    x = x.view(x.size(0), -1)\n    x = self.fc(x)\n\n    return x\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u8bad\u7ec3\u6a21\u578b<\/h1>\n\n\n\n<p>model = SpeechRecognitionModel().to(DEVICE) criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=LEARNING_RATE)<\/p>\n\n\n\n<p>def train(model, iterator, optimizer, criterion): model.train() epoch_loss = 0 epoch_acc = 0<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cssCopy code<code>for mfccs, labels in iterator:\n    mfccs = mfccs.unsqueeze(1).to(DEVICE)\n    labels = labels.to(DEVICE)\n\n    optimizer.zero_grad()\n    output = model(mfccs)\n    loss = criterion(output, labels)\n    acc = (output.argmax(1) == labels).sum().item() \/ BATCH_SIZE\n    loss.backward()\n    optimizer.step()\n\n    epoch_loss += loss.item()\n    epoch_acc += acc\n\nreturn epoch_loss \/ len(iterator), epoch_acc \/ len(iterator)\n<\/code><\/pre>\n\n\n\n<p>def evaluate(model, iterator, criterion): model.eval() epoch_loss = 0 epoch_acc = 0<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">scssCopy code<code>with torch.no_grad():\n    for mfccs, labels in iterator:\n        mfccs = mfccs.unsqueeze(1).to(DEVICE)\n        labels = labels.to(DEVICE)\n\n        output = model(mfccs)\n        loss = criterion(output, labels)\n        acc = (output.argmax(1) == labels).sum().item() \/ BATCH_SIZE\n\n        epoch_loss += loss.item()\n        epoch_acc += acc\n\nreturn epoch_loss \/ len(iterator), epoch_acc \/ len(iterator)\n<\/code><\/pre>\n\n\n\n<p>for epoch in range(NUM_EPOCHS): train_loss, train_acc = train(model, train_loader, optimizer, criterion) val_loss, val_acc = evaluate(model, test_loader, criterion)<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cssCopy code<code>print(f'Epoch: {epoch+1} | Train Loss: {train_loss:.3f} | Train Acc: {train_acc:.3f} | Val Loss: {val_loss:.3f} | Val Acc: {val_acc:.3f}')\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Copy code<code>\n\u5728\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0c\u9996\u5148\u5b9a\u4e49\u4e86\u8d85\u53c2\u6570\uff0c\u5305\u62ec\u5206\u7c7b\u6570\u3001\u8fed\u4ee3\u6b21\u6570\u3001\u5b66\u4e60\u7387\u3001\u6279\u6b21\u5927\u5c0f\u548c\u8bbe\u5907\u7c7b\u578b\u3002\u7136\u540e\u52a0\u8f7d\u4e86 torchaudio \u4e2d\u7684 SPEECHCOMMANDS \u6570\u636e\u96c6\uff0c\u5e76\u5b9a\u4e49\u4e86\u6570\u636e\u9884\u5904\u7406\u51fd\u6570\u548c SpeechCommandsDataset \u7c7b\u6765\u5904\u7406\u6570\u636e\u3002\u63a5\u4e0b\u6765\u5b9a\u4e49\u4e86 SpeechRecognitionModel \u7c7b\u4f5c\u4e3a\u6a21\u578b\uff0c\u5176\u4e2d\u5305\u62ec\u591a\u4e2a\u5377\u79ef\u5c42\u3001\u6c60\u5316\u5c42\u548c\u5168\u8fde\u63a5\u5c42\u3002\u6700\u540e\u5b9a\u4e49\u4e86\u8bad\u7ec3\u548c\u9a8c\u8bc1\u51fd\u6570\u6765\u8bad\u7ec3\u548c\u6d4b\u8bd5\u6a21\u578b\u3002\u5728\u6bcf\u4e2a epoch \u4e2d\uff0c\u4f7f\u7528 train \u51fd\u6570\u8bad\u7ec3\u6a21\u578b\uff0c\u7136\u540e\u4f7f\u7528 evaluate \u51fd\u6570\u9a8c\u8bc1\u6a21\u578b\u3002\n<\/code><\/pre>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u5206\u5e03\u5f0f\u8bad\u7ec3<\/p>\n\n\n\n<p>PyTorch \u652f\u6301\u5206\u5e03\u5f0f\u8bad\u7ec3\uff0c\u5373\u4f7f\u7528\u591a\u53f0\u8ba1\u7b97\u673a\u6765\u8bad\u7ec3\u6a21\u578b\u3002\u5728\u5206\u5e03\u5f0f\u8bad\u7ec3\u4e2d\uff0c\u901a\u5e38\u5c06\u6570\u636e\u96c6\u5206\u6210\u591a\u4e2a\u90e8\u5206\uff0c\u6bcf\u4e2a\u90e8\u5206\u5206\u914d\u7ed9\u4e0d\u540c\u7684\u8ba1\u7b97\u673a\uff0c\u8ba1\u7b97\u673a\u4e4b\u95f4\u8fdb\u884c\u534f\u4f5c\u6765\u8bad\u7ec3\u6a21\u578b\u3002\u4ee5\u4e0b\u662f PyTorch \u4e2d\u5b9e\u73b0\u5206\u5e03\u5f0f\u8bad\u7ec3\u7684\u57fa\u672c\u6b65\u9aa4\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u542f\u52a8\u591a\u4e2a\u8fdb\u7a0b \u9996\u5148\uff0c\u9700\u8981\u5728\u591a\u53f0\u8ba1\u7b97\u673a\u4e0a\u542f\u52a8\u591a\u4e2a\u8fdb\u7a0b\u3002\u6bcf\u4e2a\u8fdb\u7a0b\u90fd\u4f1a\u8fd0\u884c\u76f8\u540c\u7684\u4ee3\u7801\uff0c\u4f46\u53ef\u80fd\u4f1a\u8bbf\u95ee\u4e0d\u540c\u7684\u6570\u636e\u3002\u5728 PyTorch \u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528 torch.distributed.launch \u5de5\u5177\u6765\u542f\u52a8\u591a\u4e2a\u8fdb\u7a0b\u3002\u4f8b\u5982\uff0c\u5728\u547d\u4ee4\u884c\u4e2d\u8f93\u5165\u4ee5\u4e0b\u547d\u4ee4\u53ef\u4ee5\u542f\u52a8\u4e24\u4e2a\u8fdb\u7a0b\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">cssCopy code<code>python -m torch.distributed.launch --nproc_per_node=2 train.py\n<\/code><\/pre>\n\n\n\n<p>\u5176\u4e2d\uff0c&#8211;nproc_per_node=2 \u6307\u5b9a\u6bcf\u4e2a\u8282\u70b9\u4e0a\u7684\u8fdb\u7a0b\u6570\u4e3a 2\uff0ctrain.py \u662f\u8bad\u7ec3\u811a\u672c\u7684\u540d\u79f0\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li>\u521d\u59cb\u5316\u5206\u5e03\u5f0f\u73af\u5883 \u5728\u6bcf\u4e2a\u8fdb\u7a0b\u4e2d\uff0c\u9700\u8981\u521d\u59cb\u5316\u5206\u5e03\u5f0f\u73af\u5883\u3002\u5728 PyTorch \u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528 torch.distributed.init_process_group \u51fd\u6570\u6765\u521d\u59cb\u5316\u5206\u5e03\u5f0f\u73af\u5883\u3002\u8be5\u51fd\u6570\u9700\u8981\u6307\u5b9a\u5206\u5e03\u5f0f\u8bad\u7ec3\u4f7f\u7528\u7684\u901a\u4fe1\u540e\u7aef\u3001\u8282\u70b9\u6570\u91cf\u3001\u5f53\u524d\u8282\u70b9\u7684\u6392\u540d\u7b49\u53c2\u6570\u3002\u4f8b\u5982\uff0c\u4ee5\u4e0b\u4ee3\u7801\u521d\u59cb\u5316\u4e86\u5206\u5e03\u5f0f\u73af\u5883\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">javascriptCopy code<code>import torch\nimport torch.distributed as dist\n\ndist.init_process_group(\n    backend='gloo',\n    init_method='tcp:\/\/127.0.0.1:23456',\n    rank=rank,\n    world_size=world_size\n)\n<\/code><\/pre>\n\n\n\n<p>\u5176\u4e2d\uff0cbackend \u53c2\u6570\u6307\u5b9a\u901a\u4fe1\u540e\u7aef\uff0cinit_method \u53c2\u6570\u6307\u5b9a\u5206\u5e03\u5f0f\u8fdb\u7a0b\u95f4\u901a\u4fe1\u7684\u65b9\u5f0f\uff0crank \u53c2\u6570\u6307\u5b9a\u5f53\u524d\u8fdb\u7a0b\u5728\u8282\u70b9\u4e2d\u7684\u6392\u540d\uff0cworld_size \u53c2\u6570\u6307\u5b9a\u8282\u70b9\u7684\u6570\u91cf\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li>\u52a0\u8f7d\u6570\u636e \u5728\u5206\u5e03\u5f0f\u8bad\u7ec3\u4e2d\uff0c\u9700\u8981\u5c06\u6570\u636e\u96c6\u5206\u6210\u591a\u4e2a\u90e8\u5206\uff0c\u6bcf\u4e2a\u90e8\u5206\u5206\u914d\u7ed9\u4e0d\u540c\u7684\u8fdb\u7a0b\u3002\u53ef\u4ee5\u4f7f\u7528 PyTorch \u7684 DistributedSampler \u7c7b\u6765\u5b9e\u73b0\u6570\u636e\u96c6\u7684\u5206\u5e03\u5f0f\u91c7\u6837\u3002\u4f8b\u5982\uff0c\u4ee5\u4e0b\u4ee3\u7801\u4f7f\u7528 DistributedSampler \u7c7b\u5b9e\u73b0\u6570\u636e\u96c6\u7684\u5206\u5e03\u5f0f\u91c7\u6837\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">scssCopy code<code>from torch.utils.data import DataLoader, DistributedSampler\n\ndataset = ...\nsampler = DistributedSampler(dataset)\ndataloader = DataLoader(dataset, batch_size=batch_size, sampler=sampler)\n<\/code><\/pre>\n\n\n\n<p>\u5176\u4e2d\uff0cdataset \u53c2\u6570\u6307\u5b9a\u6570\u636e\u96c6\uff0csampler \u53c2\u6570\u6307\u5b9a\u5206\u5e03\u5f0f\u91c7\u6837\u5668\uff0cdataloader \u53c2\u6570\u6307\u5b9a\u6570\u636e\u52a0\u8f7d\u5668\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"4\">\n<li>\u5b9a\u4e49\u6a21\u578b \u5728\u5206\u5e03\u5f0f\u8bad\u7ec3\u4e2d\uff0c\u6a21\u578b\u9700\u8981\u5728\u6240\u6709\u8fdb\u7a0b\u4e2d\u5b9a\u4e49\u3002\u4f8b\u5982\uff0c\u5728\u4ee5\u4e0b\u4ee3\u7801\u4e2d\uff0c\u6a21\u578b\u5b9a\u4e49\u5728 if rank == 0 \u7684\u6761\u4ef6\u8bed\u53e5\u4e2d\uff0c\u56e0\u4e3a\u53ea\u6709\u6392\u540d\u4e3a 0 \u7684\u8fdb\u7a0b\u9700\u8981\u5b9a\u4e49\u6a21\u578b\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">pythonCopy code<code>import torch.nn as nn\n\nif rank == 0:\n    model = nn.Linear(10, 1)\nelse:\n    model = None\n<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"5\">\n<li>\u5e7f\u64ad\u6a21\u578b\u53c2\u6570 \u5728\u5206\u5e03\u5f0f\u8bad\u7ec3\u4e2d\uff0c\u9700\u8981\u5728\u6240\u6709\u8fdb\u7a0b\u4e2d\u5e7f\u64ad\u6a21\u578b\u53c2\u6570\uff0c\u4ee5\u786e\u4fdd\u6a21\u578b\u53c2\u6570\u5728\u6240\u6709\u8fdb\u7a0b\u4e2d\u4fdd\u6301\u4e00\u81f4\u3002\u53ef\u4ee5\u4f7f\u7528 PyTorch \u7684 broadcast<\/li>\n<\/ol>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u7ee7\u7eed<\/p>\n\n\n\n<p>\u51fd\u6570\u6765\u5b9e\u73b0\u53c2\u6570\u7684\u5e7f\u64ad\u3002\u4f8b\u5982\uff0c\u4ee5\u4e0b\u4ee3\u7801\u4f7f\u7528 broadcast \u51fd\u6570\u5e7f\u64ad\u6a21\u578b\u53c2\u6570\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">wasmCopy code<code>import torch.distributed as dist\n\nif rank == 0:\n    # \u5c06\u6a21\u578b\u53c2\u6570\u53d1\u9001\u7ed9\u5176\u4ed6\u8fdb\u7a0b\n    for param in model.parameters():\n        dist.broadcast(param, src=0)\nelse:\n    # \u63a5\u6536\u6a21\u578b\u53c2\u6570\n    for param in model.parameters():\n        dist.broadcast(param, src=0)\n<\/code><\/pre>\n\n\n\n<p>\u5176\u4e2d\uff0csrc \u53c2\u6570\u6307\u5b9a\u5e7f\u64ad\u6e90\u7684\u8fdb\u7a0b\u7f16\u53f7\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"6\">\n<li>\u8ba1\u7b97\u68af\u5ea6 \u5728\u5206\u5e03\u5f0f\u8bad\u7ec3\u4e2d\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u9700\u8981\u8ba1\u7b97\u81ea\u5df1\u7684\u68af\u5ea6\u3002\u53ef\u4ee5\u4f7f\u7528 PyTorch \u7684 backward \u51fd\u6570\u6765\u8ba1\u7b97\u68af\u5ea6\u3002\u4f8b\u5982\uff0c\u4ee5\u4e0b\u4ee3\u7801\u8ba1\u7b97\u68af\u5ea6\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">scssCopy code<code>optimizer.zero_grad()\nloss.backward()\n<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"7\">\n<li>\u6c47\u603b\u68af\u5ea6 \u5728\u5206\u5e03\u5f0f\u8bad\u7ec3\u4e2d\uff0c\u9700\u8981\u6c47\u603b\u6240\u6709\u8fdb\u7a0b\u7684\u68af\u5ea6\uff0c\u4ee5\u66f4\u65b0\u6a21\u578b\u53c2\u6570\u3002\u53ef\u4ee5\u4f7f\u7528 PyTorch \u7684 all_reduce \u51fd\u6570\u6765\u6c47\u603b\u68af\u5ea6\u3002\u4f8b\u5982\uff0c\u4ee5\u4e0b\u4ee3\u7801\u4f7f\u7528 all_reduce \u51fd\u6570\u6c47\u603b\u68af\u5ea6\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">kotlinCopy code<code>import torch.distributed as dist\n\n# \u6c47\u603b\u68af\u5ea6\nfor param in model.parameters():\n    dist.all_reduce(param.grad.data, op=dist.ReduceOp.SUM)\n<\/code><\/pre>\n\n\n\n<p>\u5176\u4e2d\uff0cop \u53c2\u6570\u6307\u5b9a\u5f52\u7ea6\u64cd\u4f5c\u7684\u7c7b\u578b\uff0c\u8fd9\u91cc\u4f7f\u7528 ReduceOp.SUM \u8868\u793a\u6c42\u548c\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"8\">\n<li>\u66f4\u65b0\u6a21\u578b\u53c2\u6570 \u5728\u5206\u5e03\u5f0f\u8bad\u7ec3\u4e2d\uff0c\u9700\u8981\u5728\u6240\u6709\u8fdb\u7a0b\u4e2d\u66f4\u65b0\u6a21\u578b\u53c2\u6570\u3002\u53ef\u4ee5\u4f7f\u7528 PyTorch \u7684 step \u51fd\u6570\u6765\u66f4\u65b0\u6a21\u578b\u53c2\u6570\u3002\u4f8b\u5982\uff0c\u4ee5\u4e0b\u4ee3\u7801\u66f4\u65b0\u6a21\u578b\u53c2\u6570\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">scssCopy code<code>optimizer.step()\n<\/code><\/pre>\n\n\n\n<p>\u4ee5\u4e0a\u662f PyTorch \u4e2d\u5b9e\u73b0\u5206\u5e03\u5f0f\u8bad\u7ec3\u7684\u57fa\u672c\u6b65\u9aa4\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728\u5206\u5e03\u5f0f\u8bad\u7ec3\u4e2d\uff0c\u7531\u4e8e\u6d89\u53ca\u591a\u4e2a\u8fdb\u7a0b\u4e4b\u95f4\u7684\u901a\u4fe1\uff0c\u56e0\u6b64\u9700\u8981\u82b1\u8d39\u989d\u5916\u7684\u65f6\u95f4\u6765\u540c\u6b65\u8fdb\u7a0b\u4e4b\u95f4\u7684\u64cd\u4f5c\uff0c\u56e0\u6b64\u5206\u5e03\u5f0f\u8bad\u7ec3\u7684\u6548\u7387\u53ef\u80fd\u4f1a\u53d7\u5230\u4e00\u5b9a\u7684\u5f71\u54cd\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u6a21\u578b\u91cf\u5316\u4e0e\u538b\u7f29<\/p>\n\n\n\n<p>PyTorch \u6a21\u578b\u91cf\u5316\u548c\u538b\u7f29\u662f\u4e3a\u4e86\u5728\u4fdd\u6301\u6a21\u578b\u7cbe\u5ea6\u7684\u524d\u63d0\u4e0b\u51cf\u5c0f\u6a21\u578b\u7684\u5927\u5c0f\u548c\u8ba1\u7b97\u91cf\uff0c\u4ece\u800c\u5728\u79fb\u52a8\u8bbe\u5907\u548c\u8fb9\u7f18\u8bbe\u5907\u4e0a\u90e8\u7f72\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u53d8\u5f97\u66f4\u52a0\u53ef\u884c\u3002\u4ee5\u4e0b\u662f PyTorch \u6a21\u578b\u91cf\u5316\u548c\u538b\u7f29\u7684\u57fa\u672c\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u6a21\u578b\u91cf\u5316 \u6a21\u578b\u91cf\u5316\u662f\u6307\u5c06\u6a21\u578b\u4e2d\u7684\u6d6e\u70b9\u6570\u53c2\u6570\u8f6c\u6362\u4e3a\u6574\u6570\u6216\u8f83\u5c0f\u7684\u6d6e\u70b9\u6570\uff0c\u4ece\u800c\u51cf\u5c0f\u6a21\u578b\u7684\u5927\u5c0f\u548c\u8ba1\u7b97\u91cf\u3002PyTorch \u4e2d\u652f\u6301\u591a\u79cd\u6a21\u578b\u91cf\u5316\u65b9\u5f0f\uff0c\u5305\u62ec\u6574\u6570\u91cf\u5316\u548c\u6d6e\u70b9\u6570\u91cf\u5316\u3002\u5176\u4e2d\uff0c\u6574\u6570\u91cf\u5316\u5c06\u6a21\u578b\u4e2d\u7684\u6d6e\u70b9\u6570\u53c2\u6570\u8f6c\u6362\u4e3a\u6574\u6570\uff0c\u4ece\u800c\u51cf\u5c0f\u6a21\u578b\u7684\u5927\u5c0f\u548c\u8ba1\u7b97\u91cf\uff1b\u6d6e\u70b9\u6570\u91cf\u5316\u5c06\u6a21\u578b\u4e2d\u7684\u6d6e\u70b9\u6570\u53c2\u6570\u8f6c\u6362\u4e3a\u8f83\u5c0f\u7684\u6d6e\u70b9\u6570\uff0c\u4ece\u800c\u51cf\u5c0f\u6a21\u578b\u7684\u5927\u5c0f\u548c\u8ba1\u7b97\u91cf\u3002<\/li>\n\n\n\n<li>\u6a21\u578b\u538b\u7f29 \u6a21\u578b\u538b\u7f29\u662f\u6307\u901a\u8fc7\u5404\u79cd\u65b9\u6cd5\u51cf\u5c0f\u6a21\u578b\u7684\u5927\u5c0f\u548c\u8ba1\u7b97\u91cf\uff0c\u4ece\u800c\u5728\u79fb\u52a8\u8bbe\u5907\u548c\u8fb9\u7f18\u8bbe\u5907\u4e0a\u90e8\u7f72\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u3002PyTorch \u4e2d\u652f\u6301\u591a\u79cd\u6a21\u578b\u538b\u7f29\u65b9\u5f0f\uff0c\u5305\u62ec\u526a\u679d\u3001\u91cf\u5316\u3001\u4f4e\u79e9\u5206\u89e3\u548c\u77e5\u8bc6\u84b8\u998f\u7b49\u3002\u5176\u4e2d\uff0c\u526a\u679d\u662f\u6307\u5c06\u6a21\u578b\u4e2d\u7684\u5197\u4f59\u53c2\u6570\u548c\u8fde\u63a5\u5220\u9664\uff0c\u4ece\u800c\u51cf\u5c0f\u6a21\u578b\u7684\u5927\u5c0f\u548c\u8ba1\u7b97\u91cf\uff1b\u4f4e\u79e9\u5206\u89e3\u662f\u6307\u5c06\u6a21\u578b\u4e2d\u7684\u5377\u79ef\u6838\u77e9\u9635\u5206\u89e3\u4e3a\u591a\u4e2a\u5c0f\u7684\u77e9\u9635\uff0c\u4ece\u800c\u51cf\u5c0f\u6a21\u578b\u7684\u5927\u5c0f\u548c\u8ba1\u7b97\u91cf\uff1b\u77e5\u8bc6\u84b8\u998f\u662f\u6307\u4f7f\u7528\u4e00\u4e2a\u8f83\u5927\u7684\u6559\u5e08\u6a21\u578b\u6307\u5bfc\u4e00\u4e2a\u8f83\u5c0f\u7684\u5b66\u751f\u6a21\u578b\uff0c\u4ece\u800c\u51cf\u5c0f\u6a21\u578b\u7684\u5927\u5c0f\u548c\u8ba1\u7b97\u91cf\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u5728 PyTorch \u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528 Quantization Aware Training (QAT) \u6280\u672f\u5b9e\u73b0\u6a21\u578b\u91cf\u5316\uff0c\u4f7f\u7528 torch.quantization \u5305\u4e2d\u7684 API \u5b9e\u73b0\u6a21\u578b\u538b\u7f29\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u4f8b\u5b50\uff0c\u5c55\u793a\u4e86\u5982\u4f55\u5728 PyTorch \u4e2d\u5b9e\u73b0\u6a21\u578b\u91cf\u5316\u548c\u538b\u7f29\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pythonCopy code<code>import torch\nimport torch.nn as nn\nimport torch.optim as optim\nimport torchvision.datasets as datasets\nimport torchvision.transforms as transforms\nimport torch.quantization\n\n# \u5b9a\u4e49\u6a21\u578b\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        self.fc1 = nn.Linear(28*28, 256)\n        self.fc2 = nn.Linear(256, 10)\n\n    def forward(self, x):\n        x = x.view(-1, 28*28)\n        x = torch.relu(self.fc1(x))\n        x = self.fc2(x)\n        return x\n\n# \u52a0\u8f7d\u6570\u636e\ntrain_data = datasets.MNIST(\n    root='data', train=True, transform=transforms.ToTensor(), download=True)\ntest_data = datasets.MNIST(\n    root='data', train=False, transform=transforms.ToTensor(), download=True)\n\n# \u8bad\u7ec3\u6a21\u578b\nmodel = Net\n<\/code><\/pre>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u7ee7\u7eed<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u5b9a\u4e49\u635f\u5931\u51fd\u6570\u548c\u4f18\u5316\u5668<\/h1>\n\n\n\n<p>criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u8bad\u7ec3\u6a21\u578b<\/h1>\n\n\n\n<p>for epoch in range(5): running_loss = 0.0 for i, data in enumerate(train_data, 0): inputs, labels = data optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step()<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cssCopy code<code>    running_loss += loss.item()\n    if i % 100 == 99:\n        print('[%d, %5d] loss: %.3f' %\n              (epoch+1, i+1, running_loss\/100))\n        running_loss = 0.0\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u5c06\u6a21\u578b\u91cf\u5316<\/h1>\n\n\n\n<p>quantized_model = torch.quantization.quantize_dynamic( model, {nn.Linear}, dtype=torch.qint8)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u8bc4\u4f30\u6a21\u578b<\/h1>\n\n\n\n<p>correct = 0 total = 0 with torch.no_grad(): for data in test_data: images, labels = data outputs = quantized_model(images) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item()<\/p>\n\n\n\n<p>print(&#8216;Accuracy of the network on the 10000 test images: %d %%&#8217; % ( 100 * correct \/ total))<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Copy code<code>\n\u5728\u4e0a\u9762\u7684\u4ee3\u7801\u4e2d\uff0c\u6211\u4eec\u9996\u5148\u5b9a\u4e49\u4e86\u4e00\u4e2a\u7b80\u5355\u7684\u5168\u8fde\u63a5\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\uff0c\u7136\u540e\u4f7f\u7528 MNIST \u6570\u636e\u96c6\u8fdb\u884c\u8bad\u7ec3\u3002\u8bad\u7ec3\u5b8c\u6210\u540e\uff0c\u6211\u4eec\u4f7f\u7528 PyTorch \u7684 quantization \u5305\u4e2d\u7684 quantize_dynamic \u51fd\u6570\u5c06\u6a21\u578b\u91cf\u5316\u4e3a 8 \u4f4d\u6574\u6570\u578b\uff0c\u7136\u540e\u8bc4\u4f30\u91cf\u5316\u540e\u7684\u6a21\u578b\u7684\u7cbe\u5ea6\u3002\u53ef\u4ee5\u770b\u5230\uff0c\u91cf\u5316\u540e\u7684\u6a21\u578b\u7684\u7cbe\u5ea6\u5e76\u6ca1\u6709\u663e\u8457\u4e0b\u964d\uff0c\u4f46\u6a21\u578b\u7684\u5927\u5c0f\u548c\u8ba1\u7b97\u91cf\u5f97\u5230\u4e86\u663e\u8457\u7684\u51cf\u5c0f\u3002\n\n\u4ee5\u4e0a\u662f PyTorch \u6a21\u578b\u91cf\u5316\u548c\u538b\u7f29\u7684\u57fa\u672c\u65b9\u6cd5\u548c\u4e00\u4e2a\u7b80\u5355\u7684\u4f8b\u5b50\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u6a21\u578b\u91cf\u5316\u548c\u538b\u7f29\u5e76\u4e0d\u4e00\u5b9a\u80fd\u591f\u51cf\u5c0f\u6240\u6709\u6a21\u578b\u7684\u5927\u5c0f\u548c\u8ba1\u7b97\u91cf\uff0c\u56e0\u6b64\u9700\u8981\u6839\u636e\u5177\u4f53\u60c5\u51b5\u9009\u62e9\u5408\u9002\u7684\u65b9\u6cd5\u3002\n<\/code><\/pre>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u8fc1\u79fb\u5b66\u4e60<\/p>\n\n\n\n<p>\u8fc1\u79fb\u5b66\u4e60\uff08Transfer Learning\uff09\u662f\u6307\u5229\u7528\u5df2\u7ecf\u8bad\u7ec3\u597d\u7684\u6a21\u578b\uff0c\u5728\u65b0\u7684\u4efb\u52a1\u4e0a\u8fdb\u884c\u5fae\u8c03\uff0c\u4ee5\u52a0\u901f\u6a21\u578b\u7684\u8bad\u7ec3\u548c\u63d0\u9ad8\u6a21\u578b\u7684\u7cbe\u5ea6\u3002\u5728\u6df1\u5ea6\u5b66\u4e60\u4e2d\uff0c\u8fc1\u79fb\u5b66\u4e60\u5df2\u7ecf\u6210\u4e3a\u4e00\u79cd\u975e\u5e38\u5e38\u89c1\u7684\u6280\u672f\u3002PyTorch \u63d0\u4f9b\u4e86\u4e30\u5bcc\u7684\u8fc1\u79fb\u5b66\u4e60\u5de5\u5177\u548c\u6a21\u578b\uff0c\u4f7f\u5f97\u8fc1\u79fb\u5b66\u4e60\u53d8\u5f97\u975e\u5e38\u5bb9\u6613\u548c\u7075\u6d3b\u3002\u4ee5\u4e0b\u662f PyTorch \u4e2d\u5b9e\u73b0\u8fc1\u79fb\u5b66\u4e60\u7684\u57fa\u672c\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u52a0\u8f7d\u9884\u8bad\u7ec3\u6a21\u578b PyTorch \u63d0\u4f9b\u4e86\u8bb8\u591a\u9884\u8bad\u7ec3\u6a21\u578b\uff0c\u53ef\u4ee5\u5728 ImageNet \u7b49\u5927\u578b\u6570\u636e\u96c6\u4e0a\u8fdb\u884c\u8bad\u7ec3\uff0c\u5e76\u5728\u8bb8\u591a\u8ba1\u7b97\u673a\u89c6\u89c9\u4efb\u52a1\u4e2d\u83b7\u5f97\u5f88\u597d\u7684\u6027\u80fd\u3002\u53ef\u4ee5\u4f7f\u7528 torchvision \u5305\u4e2d\u7684 API \u52a0\u8f7d\u9884\u8bad\u7ec3\u6a21\u578b\uff0c\u4f8b\u5982\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">pythonCopy code<code>import torchvision.models as models\n\nmodel = models.resnet18(pretrained=True)\n<\/code><\/pre>\n\n\n\n<p>\u4e0a\u9762\u7684\u4ee3\u7801\u4e2d\uff0c\u6211\u4eec\u4f7f\u7528 torchvision \u5305\u4e2d\u7684 resnet18 \u6a21\u578b\uff0c\u5e76\u52a0\u8f7d ImageNet \u4e0a\u9884\u8bad\u7ec3\u7684\u6743\u91cd\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li>\u4fee\u6539\u6a21\u578b\u7ed3\u6784 \u5728\u8fc1\u79fb\u5b66\u4e60\u4e2d\uff0c\u901a\u5e38\u9700\u8981\u4fee\u6539\u9884\u8bad\u7ec3\u6a21\u578b\u7684\u7ed3\u6784\uff0c\u4ee5\u9002\u5e94\u65b0\u7684\u4efb\u52a1\u3002\u53ef\u4ee5\u4f7f\u7528 PyTorch \u7684 nn.Module \u7c7b\u6765\u4fee\u6539\u6a21\u578b\u7ed3\u6784\u3002\u4f8b\u5982\uff0c\u4ee5\u4e0b\u4ee3\u7801\u5c06 resnet18 \u6a21\u578b\u7684\u6700\u540e\u4e00\u5c42\u4fee\u6539\u4e3a\u4e00\u4e2a\u5168\u8fde\u63a5\u5c42\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">javascriptCopy code<code>import torch.nn as nn\n\nmodel.fc = nn.Linear(512, num_classes)\n<\/code><\/pre>\n\n\n\n<p>\u5176\u4e2d\uff0cnum_classes \u662f\u65b0\u4efb\u52a1\u4e2d\u7684\u7c7b\u522b\u6570\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li>\u51bb\u7ed3\u6a21\u578b\u53c2\u6570 \u5728\u8fc1\u79fb\u5b66\u4e60\u4e2d\uff0c\u901a\u5e38\u9700\u8981\u51bb\u7ed3\u6a21\u578b\u7684\u67d0\u4e9b\u53c2\u6570\uff0c\u4ee5\u514d\u8fd9\u4e9b\u53c2\u6570\u5728\u5fae\u8c03\u8fc7\u7a0b\u4e2d\u88ab\u6539\u53d8\u3002\u53ef\u4ee5\u4f7f\u7528 requires_grad \u5c5e\u6027\u6765\u51bb\u7ed3\u6a21\u578b\u7684\u53c2\u6570\u3002\u4f8b\u5982\uff0c\u4ee5\u4e0b\u4ee3\u7801\u51bb\u7ed3 resnet18 \u6a21\u578b\u7684\u524d\u9762\u51e0\u5c42\u53c2\u6570\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">graphqlCopy code<code>for param in model.parameters():\n    param.requires_grad = False\n<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"4\">\n<li>\u8bad\u7ec3\u6a21\u578b \u5728\u8fc1\u79fb\u5b66\u4e60\u4e2d\uff0c\u901a\u5e38\u53ea\u9700\u8981\u5fae\u8c03\u6a21\u578b\u7684\u6700\u540e\u4e00\u5c42\u6216\u51e0\u5c42\u53c2\u6570\uff0c\u800c\u4e0d\u662f\u5bf9\u6574\u4e2a\u6a21\u578b\u8fdb\u884c\u91cd\u65b0\u8bad\u7ec3\u3002\u53ef\u4ee5\u4f7f\u7528 PyTorch \u7684 nn.Module \u7c7b\u548c\u4f18\u5316\u5668\u6765\u8bad\u7ec3\u6a21\u578b\u3002\u4f8b\u5982\uff0c\u4ee5\u4e0b\u4ee3\u7801\u4f7f\u7528 SGD \u4f18\u5316\u5668\u8bad\u7ec3\u6a21\u578b\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">scssCopy code<code>import torch.optim as optim\n\ncriterion = nn.CrossEntropyLoss()\noptimizer = optim.SGD(model.fc.parameters(), lr=0.001, momentum=0.9)\n\nfor epoch in range(num_epochs):\n    running_loss = 0.0\n    for i, data in enumerate(train_data, 0):\n        inputs, labels = data\n        optimizer.zero_grad()\n        outputs = model(inputs)\n        loss = criterion(outputs, labels)\n        loss.backward()\n        optimizer.step()\n\n        running_loss += loss.item()\n        if i % 100 == 99:\n            print('[%d, %5d] loss: %.3f' %\n                  (epoch+1, i+1, running_loss\/100))\n            running_loss = 0.0\n<\/code><\/pre>\n\n\n\n<p>\u5728\u4e0a\u9762\u7684\u4ee3\u7801\u4e2d\uff0c\u6211\u4eec\u4f7f\u7528\u4ea4<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u7ee7\u7eed<\/p>\n\n\n\n<p>\u4ea4\u53c9\u71b5\u635f\u5931\u51fd\u6570\u548c SGD \u4f18\u5316\u5668\u8bad\u7ec3\u6a21\u578b\uff0c\u4ec5\u4f18\u5316\u6700\u540e\u4e00\u5c42\u53c2\u6570\uff08\u5373\u5168\u8fde\u63a5\u5c42\u53c2\u6570\uff09\uff0c\u5e76\u4f7f\u7528\u52a8\u91cf\u4e3a 0.9 \u7684 SGD \u4f18\u5316\u5668\u3002\u53ef\u4ee5\u6839\u636e\u9700\u8981\u4f7f\u7528\u5176\u4ed6\u635f\u5931\u51fd\u6570\u548c\u4f18\u5316\u5668\u3002<\/p>\n\n\n\n<p>\u4ee5\u4e0a\u662f PyTorch \u4e2d\u5b9e\u73b0\u8fc1\u79fb\u5b66\u4e60\u7684\u57fa\u672c\u65b9\u6cd5\u548c\u4e00\u4e2a\u7b80\u5355\u7684\u4f8b\u5b50\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u8fc1\u79fb\u5b66\u4e60\u7684\u6548\u679c\u5f88\u5927\u7a0b\u5ea6\u4e0a\u53d6\u51b3\u4e8e\u9884\u8bad\u7ec3\u6a21\u578b\u7684\u8d28\u91cf\u3001\u65b0\u4efb\u52a1\u7684\u76f8\u4f3c\u6027\u4ee5\u53ca\u5fae\u8c03\u7684\u5c42\u6570\u7b49\u56e0\u7d20\u3002\u56e0\u6b64\uff0c\u5728\u4f7f\u7528\u8fc1\u79fb\u5b66\u4e60\u65f6\uff0c\u9700\u8981\u6839\u636e\u5177\u4f53\u60c5\u51b5\u9009\u62e9\u5408\u9002\u7684\u9884\u8bad\u7ec3\u6a21\u578b\u548c\u5fae\u8c03\u65b9\u6cd5\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91ca\u603b\u7ed3\u4e0e\u56de\u987e<\/p>\n\n\n\n<p>PyTorch \u662f\u4e00\u4e2a\u57fa\u4e8e Python \u7684\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\uff0c\u5177\u6709\u6613\u7528\u3001\u9ad8\u6548\u3001\u7075\u6d3b\u7b49\u7279\u70b9\uff0c\u5df2\u7ecf\u6210\u4e3a\u8bb8\u591a\u7814\u7a76\u4eba\u5458\u548c\u5de5\u7a0b\u5e08\u4f7f\u7528\u6df1\u5ea6\u5b66\u4e60\u6280\u672f\u7684\u9996\u9009\u6846\u67b6\u4e4b\u4e00\u3002\u672c\u6587\u4e3b\u8981\u4ecb\u7ecd\u4e86 PyTorch \u7684\u57fa\u672c\u6982\u5ff5\u548c\u5e38\u7528\u6280\u672f\uff0c\u6d89\u53ca\u4ee5\u4e0b\u5185\u5bb9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>PyTorch \u5f20\u91cf\u64cd\u4f5c\u4e0e\u57fa\u672c\u6570\u5b66\u8fd0\u7b97 PyTorch \u4e2d\u7684\u5f20\u91cf\u64cd\u4f5c\u548c\u57fa\u672c\u6570\u5b66\u8fd0\u7b97\u5305\u62ec\u5f20\u91cf\u521b\u5efa\u3001\u5f62\u72b6\u548c\u7ef4\u5ea6\u64cd\u4f5c\u3001\u7d22\u5f15\u548c\u5207\u7247\u3001\u5f20\u91cf\u8fd0\u7b97\u3001\u7ebf\u6027\u4ee3\u6570\u64cd\u4f5c\u548c\u5e7f\u64ad\u673a\u5236\u7b49\u3002<\/li>\n\n\n\n<li>PyTorch \u81ea\u52a8\u6c42\u5bfc\u4e0e\u4f18\u5316 PyTorch \u652f\u6301\u52a8\u6001\u56fe\u548c\u9759\u6001\u56fe\u4e24\u79cd\u6a21\u5f0f\uff0c\u53ef\u4ee5\u81ea\u52a8\u6c42\u5bfc\uff0c\u5b9e\u73b0\u53cd\u5411\u4f20\u64ad\u548c\u68af\u5ea6\u4e0b\u964d\u7b49\u4f18\u5316\u65b9\u6cd5\u3002\u540c\u65f6\uff0cPyTorch \u63d0\u4f9b\u4e86\u4e30\u5bcc\u7684\u4f18\u5316\u5668\uff0c\u5305\u62ec SGD\u3001Adam \u7b49\u3002<\/li>\n\n\n\n<li>PyTorch \u6784\u5efa\u795e\u7ecf\u7f51\u7edc\u6a21\u578b PyTorch \u63d0\u4f9b\u4e86 nn.Module \u7c7b\u548c\u4e30\u5bcc\u7684\u6a21\u5757\uff0c\u53ef\u4ee5\u65b9\u4fbf\u5730\u6784\u5efa\u5404\u79cd\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\uff0c\u5305\u62ec\u5168\u8fde\u63a5\u795e\u7ecf\u7f51\u7edc\u3001\u5377\u79ef\u795e\u7ecf\u7f51\u7edc\u3001\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u3001LSTM \u7b49\u3002<\/li>\n\n\n\n<li>PyTorch \u6df1\u5ea6\u5b66\u4e60\u5e94\u7528\u5b9e\u4f8b PyTorch \u53ef\u4ee5\u7528\u4e8e\u8bb8\u591a\u6df1\u5ea6\u5b66\u4e60\u5e94\u7528\u5b9e\u4f8b\uff0c\u5305\u62ec\u56fe\u50cf\u5206\u7c7b\u3001\u7269\u4f53\u68c0\u6d4b\u3001\u8bed\u4e49\u5206\u5272\u3001\u673a\u5668\u7ffb\u8bd1\u3001\u8bed\u97f3\u8bc6\u522b\u7b49\u3002<\/li>\n\n\n\n<li>PyTorch \u5206\u5e03\u5f0f\u8bad\u7ec3 PyTorch \u652f\u6301\u5206\u5e03\u5f0f\u8bad\u7ec3\uff0c\u53ef\u4ee5\u4f7f\u7528\u591a\u4e2a GPU \u6216\u591a\u53f0\u670d\u52a1\u5668\u52a0\u901f\u8bad\u7ec3\u8fc7\u7a0b\u3002<\/li>\n\n\n\n<li>PyTorch \u6a21\u578b\u91cf\u5316\u548c\u538b\u7f29 PyTorch \u652f\u6301\u6a21\u578b\u91cf\u5316\u548c\u538b\u7f29\uff0c\u53ef\u4ee5\u5c06\u6a21\u578b\u7684\u5927\u5c0f\u548c\u8ba1\u7b97\u91cf\u51cf\u5c0f\uff0c\u4ece\u800c\u63d0\u9ad8\u6a21\u578b\u7684\u6548\u7387\u3002<\/li>\n\n\n\n<li>PyTorch \u8fc1\u79fb\u5b66\u4e60 PyTorch \u652f\u6301\u8fc1\u79fb\u5b66\u4e60\uff0c\u53ef\u4ee5\u5229\u7528\u5df2\u7ecf\u8bad\u7ec3\u597d\u7684\u6a21\u578b\uff0c\u5728\u65b0\u7684\u4efb\u52a1\u4e0a\u8fdb\u884c\u5fae\u8c03\uff0c\u52a0\u901f\u6a21\u578b\u7684\u8bad\u7ec3\u548c\u63d0\u9ad8\u6a21\u578b\u7684\u7cbe\u5ea6\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u603b\u7684\u6765\u8bf4\uff0cPyTorch \u662f\u4e00\u4e2a\u529f\u80fd\u4e30\u5bcc\u3001\u6613\u7528\u7075\u6d3b\u7684\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\uff0c\u5df2\u7ecf\u5728\u8bb8\u591a\u9886\u57df\u5f97\u5230\u4e86\u5e7f\u6cdb\u7684\u5e94\u7528\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u6df1\u5ea6\u5b66\u4e60\u6280\u672f\u662f\u4e00\u4e2a\u4e0d\u65ad\u53d1\u5c55\u7684\u9886\u57df\uff0cPyTorch \u4e5f\u5728\u4e0d\u65ad\u5730\u66f4\u65b0\u548c\u5b8c\u5584\u4e2d\uff0c\u56e0\u6b64\uff0c\u5efa\u8bae\u4f7f\u7528\u6700\u65b0\u7248\u672c\u7684 PyTorch\uff0c\u5e76\u6839\u636e\u5177\u4f53\u60c5\u51b5\u9009\u62e9\u5408\u9002\u7684\u65b9\u6cd5\u548c\u6280\u672f\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91ca\u5bf9\u6297\u6027\u751f\u6210\u7f51\u7edc (GANs)<\/p>\n\n\n\n<p>\u5bf9\u6297\u6027\u751f\u6210\u7f51\u7edc\uff08Generative Adversarial Networks\uff0c\u7b80\u79f0 GANs\uff09\u662f\u4e00\u79cd\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\uff0c\u7531 Goodfellow \u7b49\u4eba\u4e8e 2014 \u5e74\u63d0\u51fa\u3002GANs \u7684\u4e3b\u8981\u76ee\u7684\u662f\u751f\u6210\u5177\u6709\u9ad8\u5ea6\u903c\u771f\u5ea6\u7684\u6837\u672c\uff0c\u4f8b\u5982\u56fe\u50cf\u3001\u97f3\u9891\u548c\u89c6\u9891\u7b49\u3002<\/p>\n\n\n\n<p>GANs \u5305\u542b\u4e24\u4e2a\u795e\u7ecf\u7f51\u7edc\uff0c\u4e00\u4e2a\u662f\u751f\u6210\u5668\u7f51\u7edc\uff08Generator\uff09\uff0c\u53e6\u4e00\u4e2a\u662f\u5224\u522b\u5668\u7f51\u7edc\uff08Discriminator\uff09\u3002\u751f\u6210\u5668\u7f51\u7edc\u4ece\u968f\u673a\u566a\u58f0\u4e2d\u751f\u6210\u6837\u672c\uff0c\u5224\u522b\u5668\u7f51\u7edc\u5219\u6839\u636e\u6837\u672c\u7684\u771f\u5b9e\u6027\u5bf9\u5176\u8fdb\u884c\u5206\u7c7b\u3002\u4e8c\u8005\u5f62\u6210\u4e86\u4e00\u4e2a\u5bf9\u6297\u535a\u5f08\u7684\u6846\u67b6\uff0c\u751f\u6210\u5668\u7f51\u7edc\u7684\u76ee\u6807\u662f\u6b3a\u9a97\u5224\u522b\u5668\u7f51\u7edc\uff0c\u4f7f\u5176\u65e0\u6cd5\u533a\u5206\u751f\u6210\u6837\u672c\u548c\u771f\u5b9e\u6837\u672c\uff0c\u800c\u5224\u522b\u5668\u7f51\u7edc\u7684\u76ee\u6807\u5219\u662f\u5c3d\u53ef\u80fd\u51c6\u786e\u5730\u533a\u5206\u751f\u6210\u6837\u672c\u548c\u771f\u5b9e\u6837\u672c\u3002<\/p>\n\n\n\n<p>GANs \u7684\u8bad\u7ec3\u8fc7\u7a0b\u53ef\u4ee5\u6982\u62ec\u4e3a\u4ee5\u4e0b\u51e0\u4e2a\u6b65\u9aa4\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u521d\u59cb\u5316\u751f\u6210\u5668\u7f51\u7edc\u548c\u5224\u522b\u5668\u7f51\u7edc\u7684\u53c2\u6570\u3002<\/li>\n\n\n\n<li>\u4ece\u566a\u58f0\u5206\u5e03\u4e2d\u968f\u673a\u751f\u6210\u4e00\u6279\u6837\u672c\uff0c\u5e76\u5c06\u5176\u8f93\u5165\u751f\u6210\u5668\u7f51\u7edc\uff0c\u751f\u6210\u5668\u7f51\u7edc\u8f93\u51fa\u751f\u6210\u6837\u672c\u3002<\/li>\n\n\n\n<li>\u5c06\u751f\u6210\u6837\u672c\u548c\u771f\u5b9e\u6837\u672c\u6df7\u5408\u5728\u4e00\u8d77\uff0c\u5e76\u5c06\u5176\u8f93\u5165\u5224\u522b\u5668\u7f51\u7edc\uff0c\u5224\u522b\u5668\u7f51\u7edc\u8f93\u51fa\u6bcf\u4e2a\u6837\u672c\u662f\u771f\u5b9e\u6837\u672c\u7684\u6982\u7387\u3002<\/li>\n\n\n\n<li>\u6839\u636e\u5224\u522b\u5668\u7f51\u7edc\u7684\u8f93\u51fa\uff0c\u8ba1\u7b97\u5224\u522b\u5668\u7f51\u7edc\u7684\u635f\u5931\uff0c\u66f4\u65b0\u5224\u522b\u5668\u7f51\u7edc\u7684\u53c2\u6570\uff0c\u4f7f\u5176\u80fd\u591f\u66f4\u597d\u5730\u533a\u5206\u751f\u6210\u6837\u672c\u548c\u771f\u5b9e\u6837\u672c\u3002<\/li>\n\n\n\n<li>\u56fa\u5b9a\u5224\u522b\u5668\u7f51\u7edc\u7684\u53c2\u6570\uff0c\u5c06\u751f\u6210\u5668\u7f51\u7edc\u7684\u53c2\u6570\u66f4\u65b0\uff0c\u4f7f\u751f\u6210\u5668\u7f51\u7edc\u80fd\u591f\u751f\u6210\u66f4\u903c\u771f\u7684\u6837\u672c\u3002<\/li>\n\n\n\n<li>\u91cd\u590d\u6b65\u9aa4 2-5\uff0c\u76f4\u5230\u751f\u6210\u6837\u672c\u8db3\u591f\u903c\u771f\u4e3a\u6b62\u3002<\/li>\n<\/ol>\n\n\n\n<p>GANs \u7684\u4f18\u70b9\u5728\u4e8e\u5b83\u53ef\u4ee5\u751f\u6210\u9ad8\u8d28\u91cf\u7684\u6837\u672c\uff0c\u800c\u4e14\u751f\u6210\u6837\u672c\u7684\u591a\u6837\u6027\u975e\u5e38\u9ad8\u3002\u4f46\u662f\uff0cGANs \u7684\u8bad\u7ec3\u8fc7\u7a0b\u975e\u5e38\u4e0d\u7a33\u5b9a\uff0c\u5f88\u5bb9\u6613\u51fa\u73b0\u6a21\u5f0f\u5d29\u6e83\uff08Mode Collapse\uff09\u548c\u68af\u5ea6\u6d88\u5931\u7b49\u95ee\u9898\u3002\u6b64\u5916\uff0cGANs \u7684\u8bad\u7ec3\u4e5f\u9700\u8981\u66f4\u957f\u7684\u65f6\u95f4\u548c\u66f4\u9ad8\u7684\u8ba1\u7b97\u8d44\u6e90\u3002<\/p>\n\n\n\n<p>\u76ee\u524d\uff0cGANs \u5df2\u7ecf\u5728\u8bb8\u591a\u9886\u57df\u5f97\u5230\u4e86\u5e7f\u6cdb\u7684\u5e94\u7528\uff0c\u4f8b\u5982\u56fe\u50cf\u751f\u6210\u3001\u56fe\u50cf\u4fee\u590d\u3001\u8d85\u5206\u8fa8\u7387\u7b49\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91caPyTorch\u793e\u533a\u4e0e\u8d44\u6e90<\/p>\n\n\n\n<p>PyTorch \u793e\u533a\u975e\u5e38\u6d3b\u8dc3\uff0c\u62e5\u6709\u8bb8\u591a\u4f18\u79c0\u7684\u8d44\u6e90\u548c\u5de5\u5177\uff0c\u8fd9\u4e9b\u8d44\u6e90\u53ef\u4ee5\u5e2e\u52a9\u7528\u6237\u66f4\u597d\u5730\u5b66\u4e60\u548c\u4f7f\u7528 PyTorch\u3002\u4ee5\u4e0b\u662f PyTorch \u793e\u533a\u548c\u8d44\u6e90\u7684\u4e00\u4e9b\u4ecb\u7ecd\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>PyTorch \u5b98\u65b9\u7f51\u7ad9 PyTorch \u7684\u5b98\u65b9\u7f51\u7ad9\u63d0\u4f9b\u4e86\u4e30\u5bcc\u7684\u6587\u6863\u548c\u6559\u7a0b\uff0c\u5305\u62ec PyTorch \u7684\u5b89\u88c5\u548c\u4f7f\u7528\u3001PyTorch \u4e2d\u7684\u5f20\u91cf\u64cd\u4f5c\u548c\u57fa\u672c\u6570\u5b66\u8fd0\u7b97\u3001\u81ea\u52a8\u6c42\u5bfc\u548c\u4f18\u5316\u7b49\u65b9\u9762\u3002<\/li>\n\n\n\n<li>PyTorch \u8bba\u575b PyTorch \u8bba\u575b\u662f PyTorch \u793e\u533a\u7684\u4e3b\u8981\u4ea4\u6d41\u5e73\u53f0\uff0c\u7528\u6237\u53ef\u4ee5\u5728\u8bba\u575b\u4e2d\u4ea4\u6d41\u95ee\u9898\u3001\u5206\u4eab\u7ecf\u9a8c\u3001\u53d1\u5e03\u9879\u76ee\u7b49\u3002<\/li>\n\n\n\n<li>PyTorch Hub PyTorch Hub \u662f\u4e00\u4e2a\u6a21\u578b\u5e93\uff0c\u5305\u542b\u4e86\u8bb8\u591a\u9884\u8bad\u7ec3\u6a21\u578b\u548c\u6570\u636e\u96c6\uff0c\u7528\u6237\u53ef\u4ee5\u5feb\u901f\u4e0b\u8f7d\u548c\u4f7f\u7528\u8fd9\u4e9b\u6a21\u578b\u548c\u6570\u636e\u96c6\u3002<\/li>\n\n\n\n<li>PyTorch Lightning PyTorch Lightning \u662f\u4e00\u4e2a\u57fa\u4e8e PyTorch \u7684\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\uff0c\u63d0\u4f9b\u4e86\u66f4\u9ad8\u5c42\u6b21\u7684\u62bd\u8c61\u548c\u66f4\u7b80\u6d01\u7684\u4ee3\u7801\uff0c\u53ef\u4ee5\u52a0\u5feb\u6a21\u578b\u5f00\u53d1\u548c\u8bad\u7ec3\u7684\u901f\u5ea6\u3002<\/li>\n\n\n\n<li>PyTorch Geometric PyTorch Geometric \u662f\u4e00\u4e2a\u7528\u4e8e\u56fe\u795e\u7ecf\u7f51\u7edc\u7684 Python \u5e93\uff0c\u63d0\u4f9b\u4e86\u8bb8\u591a\u56fe\u795e\u7ecf\u7f51\u7edc\u7684\u5b9e\u73b0\u548c\u6570\u636e\u96c6\u3002<\/li>\n\n\n\n<li>PyTorch Ignite PyTorch Ignite \u662f\u4e00\u4e2a\u7528\u4e8e\u8bad\u7ec3\u548c\u8bc4\u4f30\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u7684\u9ad8\u7ea7\u5e93\uff0c\u53ef\u4ee5\u66f4\u65b9\u4fbf\u5730\u8fdb\u884c\u8bad\u7ec3\u548c\u8bc4\u4f30\u6a21\u578b\u3002<\/li>\n\n\n\n<li>PyTorch \u5f00\u6e90\u9879\u76ee PyTorch \u793e\u533a\u6709\u8bb8\u591a\u5f00\u6e90\u9879\u76ee\uff0c\u8fd9\u4e9b\u9879\u76ee\u5305\u62ec\u4e86\u8bb8\u591a\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u548c\u5de5\u5177\uff0c\u53ef\u4ee5\u5e2e\u52a9\u7528\u6237\u66f4\u597d\u5730\u4f7f\u7528 PyTorch\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u603b\u7684\u6765\u8bf4\uff0cPyTorch \u793e\u533a\u63d0\u4f9b\u4e86\u4e30\u5bcc\u7684\u8d44\u6e90\u548c\u5de5\u5177\uff0c\u53ef\u4ee5\u5e2e\u52a9\u7528\u6237\u66f4\u597d\u5730\u5b66\u4e60\u548c\u4f7f\u7528 PyTorch\u3002\u7528\u6237\u53ef\u4ee5\u5728\u8bba\u575b\u4e2d\u4ea4\u6d41\u95ee\u9898\uff0c\u4e0b\u8f7d\u548c\u4f7f\u7528 PyTorch Hub \u4e2d\u7684\u6a21\u578b\u548c\u6570\u636e\u96c6\uff0c\u4f7f\u7528 PyTorch Lightning \u7b80\u5316\u6a21\u578b\u5f00\u53d1\u548c\u8bad\u7ec3\uff0c\u4f7f\u7528 PyTorch Geometric \u5904\u7406\u56fe\u6570\u636e\uff0c\u4f7f\u7528 PyTorch Ignite \u66f4\u65b9\u4fbf\u5730\u8fdb\u884c\u8bad\u7ec3\u548c\u8bc4\u4f30\u6a21\u578b\u3002\u540c\u65f6\uff0c\u7528\u6237\u8fd8\u53ef\u4ee5\u53c2\u4e0e\u5f00\u6e90\u9879\u76ee\u7684\u5f00\u53d1\uff0c\u8d21\u732e\u81ea\u5df1\u7684\u4ee3\u7801\u548c\u7ecf\u9a8c\uff0c\u4e3a PyTorch \u793e\u533a\u7684\u53d1\u5c55\u505a\u51fa\u8d21\u732e\u3002<\/p>\n\n\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/chat.openai.com\/_next\/image?url=https%3A%2F%2Flh3.googleusercontent.com%2Fa%2FAGNmyxbwVdnTP0E2eBqDrujRQjV-wFP12Thr4vFgysVv5A%3Ds96-c&amp;w=96&amp;q=75\" alt=\"gun tei\"\/><\/figure>\n\n\n\n<p>\u8bf7\u8be6\u7ec6\u89e3\u91ca\u6df1\u5ea6\u5b66\u4e60\u7684\u672a\u6765\u53d1\u5c55<\/p>\n\n\n\n<p>\u6df1\u5ea6\u5b66\u4e60\u4f5c\u4e3a\u4eba\u5de5\u667a\u80fd\u7684\u6838\u5fc3\u6280\u672f\u4e4b\u4e00\uff0c\u5df2\u7ecf\u5728\u8bb8\u591a\u9886\u57df\u53d6\u5f97\u4e86\u663e\u8457\u7684\u8fdb\u5c55\u3002\u672a\u6765\uff0c\u6df1\u5ea6\u5b66\u4e60\u5728\u4ee5\u4e0b\u51e0\u4e2a\u65b9\u9762\u53ef\u80fd\u4f1a\u5f97\u5230\u66f4\u591a\u7684\u53d1\u5c55\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u81ea\u76d1\u7763\u5b66\u4e60 \u81ea\u76d1\u7763\u5b66\u4e60\u662f\u4e00\u79cd\u65e0\u9700\u4eba\u5de5\u6807\u6ce8\u6570\u636e\u96c6\u7684\u5b66\u4e60\u65b9\u5f0f\uff0c\u53ef\u4ee5\u5728\u6ca1\u6709\u6216\u8005\u5f88\u5c11\u6807\u6ce8\u6570\u636e\u7684\u60c5\u51b5\u4e0b\u5b66\u4e60\u3002\u81ea\u76d1\u7763\u5b66\u4e60\u5df2\u7ecf\u5728\u8ba1\u7b97\u673a\u89c6\u89c9\u3001\u8bed\u97f3\u8bc6\u522b\u7b49\u9886\u57df\u53d6\u5f97\u4e86\u4e00\u4e9b\u8fdb\u5c55\uff0c\u672a\u6765\u53ef\u80fd\u4f1a\u5728\u66f4\u591a\u7684\u9886\u57df\u5f97\u5230\u5e94\u7528\u3002<\/li>\n\n\n\n<li>\u8054\u90a6\u5b66\u4e60 \u8054\u90a6\u5b66\u4e60\u662f\u4e00\u79cd\u53ef\u4ee5\u5728\u591a\u4e2a\u8bbe\u5907\u4e0a\u8fdb\u884c\u8bad\u7ec3\u548c\u63a8\u7406\u7684\u5b66\u4e60\u65b9\u5f0f\uff0c\u53ef\u4ee5\u4fdd\u62a4\u6570\u636e\u9690\u79c1\u5e76\u63d0\u9ad8\u6a21\u578b\u7684\u53ef\u6269\u5c55\u6027\u548c\u9c81\u68d2\u6027\u3002\u8054\u90a6\u5b66\u4e60\u5df2\u7ecf\u5728\u4e00\u4e9b\u9886\u57df\u5f97\u5230\u5e94\u7528\uff0c\u4f8b\u5982\u533b\u7597\u548c\u91d1\u878d\u9886\u57df\uff0c\u672a\u6765\u53ef\u80fd\u4f1a\u5728\u66f4\u591a\u7684\u9886\u57df\u5f97\u5230\u63a8\u5e7f\u548c\u5e94\u7528\u3002<\/li>\n\n\n\n<li>\u7ec4\u5408\u6a21\u578b \u7ec4\u5408\u6a21\u578b\u662f\u5c06\u591a\u4e2a\u6a21\u578b\u7ec4\u5408\u8d77\u6765\u5f62\u6210\u4e00\u4e2a\u66f4\u590d\u6742\u7684\u6a21\u578b\uff0c\u53ef\u4ee5\u5728\u89e3\u51b3\u66f4\u590d\u6742\u7684\u4efb\u52a1\u65f6\u63d0\u9ad8\u6a21\u578b\u7684\u6027\u80fd\u3002\u7ec4\u5408\u6a21\u578b\u5df2\u7ecf\u5728\u4e00\u4e9b\u9886\u57df\u5f97\u5230\u4e86\u5e94\u7528\uff0c\u4f8b\u5982\u81ea\u7136\u8bed\u8a00\u5904\u7406\u548c\u8ba1\u7b97\u673a\u89c6\u89c9\u7b49\u9886\u57df\uff0c\u672a\u6765\u53ef\u80fd\u4f1a\u5728\u66f4\u591a\u7684\u9886\u57df\u5f97\u5230\u5e94\u7528\u3002<\/li>\n\n\n\n<li>\u53ef\u89e3\u91ca\u6027 \u53ef\u89e3\u91ca\u6027\u662f\u6307\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u53ef\u4ee5\u901a\u8fc7\u7b80\u5355\u7684\u65b9\u5f0f\u6765\u89e3\u91ca\u5176\u51b3\u7b56\u7684\u8fc7\u7a0b\u548c\u539f\u56e0\u3002\u53ef\u89e3\u91ca\u6027\u5df2\u7ecf\u6210\u4e3a\u6df1\u5ea6\u5b66\u4e60\u9886\u57df\u7684\u70ed\u70b9\u95ee\u9898\u4e4b\u4e00\uff0c\u672a\u6765\u53ef\u80fd\u4f1a\u5728\u66f4\u591a\u7684\u9886\u57df\u5f97\u5230\u5e94\u7528\u3002<\/li>\n\n\n\n<li>\u6a21\u578b\u538b\u7f29\u548c\u4f18\u5316 \u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u901a\u5e38\u9700\u8981\u5927\u91cf\u7684\u8ba1\u7b97\u8d44\u6e90\u548c\u5b58\u50a8\u7a7a\u95f4\uff0c\u8fd9\u5bf9\u4e8e\u79fb\u52a8\u8bbe\u5907\u548c\u8fb9\u7f18\u8bbe\u5907\u6765\u8bf4\u662f\u4e00\u4e2a\u6311\u6218\u3002\u672a\u6765\uff0c\u6a21\u578b\u538b\u7f29\u548c\u4f18\u5316\u53ef\u80fd\u4f1a\u6210\u4e3a\u6df1\u5ea6\u5b66\u4e60\u7684\u70ed\u70b9\u95ee\u9898\u4e4b\u4e00\uff0c\u4ee5\u4fbf\u5728\u4f4e\u529f\u8017\u8bbe\u5907\u4e0a\u5b9e\u73b0\u9ad8\u6548\u7684\u6a21\u578b\u63a8\u7406\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u603b\u4e4b\uff0c\u6df1\u5ea6\u5b66\u4e60\u5728\u672a\u6765\u7684\u53d1\u5c55\u4e2d\u4ecd\u7136\u5177\u6709\u5f88\u5927\u7684\u6f5c\u529b\uff0c\u540c\u65f6\u4e5f\u9700\u8981\u89e3\u51b3\u8bb8\u591a\u6311\u6218\u3002\u672a\u6765\u6df1\u5ea6\u5b66\u4e60\u7684\u53d1\u5c55\u9700\u8981\u66f4\u591a\u7684\u8de8\u5b66\u79d1\u4ea4\u53c9\u5408\u4f5c\uff0c\u4ee5\u4fbf\u5728\u5404\u4e2a\u9886\u57df\u53d6\u5f97\u66f4\u597d\u7684\u6548\u679c\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6211\u662f\u8981\u505aIT\u6559\u7a0b\u7684\u89c6\u9891\uff0c\u4f60\u80fd\u5426\u6839\u636e\u7f51\u7ad9\u7684 &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_mi_skip_tracking":false,"footnotes":""},"categories":[23],"tags":[],"class_list":["post-1768","post","type-post","status-publish","format-standard","hentry","category-material"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/edu.ujhb.org\/index.php?rest_route=\/wp\/v2\/posts\/1768","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/edu.ujhb.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/edu.ujhb.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/edu.ujhb.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/edu.ujhb.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1768"}],"version-history":[{"count":1,"href":"https:\/\/edu.ujhb.org\/index.php?rest_route=\/wp\/v2\/posts\/1768\/revisions"}],"predecessor-version":[{"id":1769,"href":"https:\/\/edu.ujhb.org\/index.php?rest_route=\/wp\/v2\/posts\/1768\/revisions\/1769"}],"wp:attachment":[{"href":"https:\/\/edu.ujhb.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1768"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/edu.ujhb.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1768"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/edu.ujhb.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1768"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}