{"id":752,"date":"2026-05-26T22:58:20","date_gmt":"2026-05-26T14:58:20","guid":{"rendered":"https:\/\/blog.nanoturtle.cn\/?p=752"},"modified":"2026-05-26T23:18:06","modified_gmt":"2026-05-26T15:18:06","slug":"pytorch-cat-dog-classification","status":"publish","type":"post","link":"https:\/\/blog.nanoturtle.cn\/index.php\/2026\/05\/26\/pytorch-cat-dog-classification\/","title":{"rendered":"PyTorch\u8bc6\u522b\u732b\u72d7\u7a0b\u5e8f"},"content":{"rendered":"<div class=\"eb-aurora-container\" data-status=\"\u6458\u8981\u751f\u6210\u4e2d\" data-finished=\"\u6458\u8981\u5df2\u751f\u6210\">\n\t\t\t\t<div class=\"eb-aurora-inner\">\n\t\t\t\t\t<img class=\"eb-aurora-bg\" src=\"https:\/\/blog.nanoturtle.cn\/wp-content\/plugins\/xhtheme-ai-toolbox\/assets\/images\/aurora-bg.svg\" alt=\"\" \/>\n\t\t\t\t\t<div class=\"eb-aurora-status\">\n\t\t\t\t\t\t<div class=\"eb-aurora-tag\">\n\t\t\t\t\t\t\t<div class=\"eb-aurora-pulse\"><\/div>\n\t\t\t\t\t\t\t<span class=\"eb-aurora-status-text\">\u6458\u8981\u751f\u6210\u4e2d<\/span>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"eb-aurora-disclaimer\">AI\u751f\u6210\uff0c\u4ec5\u4f9b\u53c2\u8003<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"eb-aurora-content\">\n\t\t\t\t\t\t<span class=\"eb-aurora-text\" data-text=\"\u672c\u9879\u76ee\u6f14\u793a\u4e86\u4f7f\u7528PyTorch\u5b9e\u73b0\u732b\u72d7\u56fe\u50cf\u5206\u7c7b\u7684\u5b8c\u6574\u6d41\u7a0b\u3002\u6838\u5fc3\u6280\u672f\u91c7\u7528\u8fc1\u79fb\u5b66\u4e60\u7b56\u7565\uff0c\u4ee5ResNet18\u4f5c\u4e3a\u9aa8\u5e72\u7f51\u7edc\uff0c\u51bb\u7ed3\u524d\u534a\u90e8\u5206\u7684\u9884\u8bad\u7ec3\u6743\u91cd\uff0c\u4ec5\u8bad\u7ec3\u6700\u540e\u7684\u5168\u8fde\u63a5\u5c42\u3002\u8fd9\u79cd\u65b9\u6cd5\u5145\u5206\u5229\u7528\u5927\u6a21\u578b\u63d0\u53d6\u7279\u5f81\u7684\u80fd\u529b\uff0c\u540c\u65f6\u663e\u8457\u964d\u4f4e\u4e86\u5bf9\u8ba1\u7b97\u8d44\u6e90\u7684\u9700\u6c42\u3002\u5bf9\u4e8e\u7f3a\u4e4f\u5f3a\u5927GPU\u7684\u5f00\u53d1\u8005\u800c\u8a00\uff0c\u901a\u8fc7\u51bb\u7ed3\u7279\u5f81\u63d0\u53d6\u5668\u5e76\u5fae\u8c03\u5206\u7c7b\u5668\uff0c\u662f\u5b9e\u73b0\u6df1\u5ea6\u5b66\u4e60\u56fe\u50cf\u5206\u7c7b\u4efb\u52a1\u7684\u53ef\u884c\u8def\u5f84\u3002\"><\/span><span class=\"eb-aurora-cursor\"><\/span>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n<p class=\"wp-block-paragraph\">\u8fd9\u4e2a\u9879\u76ee\u662f\u62ffAI\u8dd1\u7684\uff0c\u4ec5\u4f9b\u5b66\u4e60\u4f7f\u7528\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/cn-sy1.rains3.com\/ntblog\/2026\/05\/%E5%9B%BE%E7%89%87-947x1024.png\" alt=\"\" class=\"wp-image-760\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">0x00 \u80cc\u666f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u56fe\u50cf\u5206\u7c7b\u662f\u8ba1\u7b97\u673a\u89c6\u89c9\u9886\u57df\u7684\u201cHello World\u201d\u3002\u5728\u8fd9\u4e2a\u9879\u76ee\u4e2d\uff0c\u6211\u7684\u76ee\u6807\u662f\u533a\u5206\u732b\u548c\u72d7\u7684\u56fe\u7247\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e3a\u4ec0\u4e48\u4e0d\u81ea\u5df1\u4ece\u96f6\u5f00\u59cb\u8bad\u7ec3\u4e00\u4e2a\u7f51\u7edc\uff1f\u56e0\u4e3a\u5377\u79ef\u795e\u7ecf\u7f51\u7edc\uff08CNN\uff09\u901a\u5e38\u9700\u8981\u6d77\u91cf\u7684\u6570\u636e\u548c\u5f3a\u5927\u7684\u7b97\u529b\u3002\u4f5c\u4e3a\u66ff\u4ee3\u65b9\u6848\uff0c\u6211\u4eec\u91c7\u7528\u4e86<strong>\u8fc1\u79fb\u5b66\u4e60\uff08Transfer Learning\uff09<\/strong>\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u9aa8\u5e72\u7f51\u7edc<\/strong>\uff1a\u9009\u7528\u4e86 <code>ResNet18<\/code>\u3002\u8fd9\u662f\u4e00\u4e2a\u975e\u5e38\u7ecf\u5178\u7684\u8f7b\u91cf\u7ea7\u6df1\u5ea6\u6b8b\u5dee\u7f51\u7edc\uff0c\u6700\u521d\u5728 ImageNet \u5927\u8d5b\u4e2d\u5927\u653e\u5f02\u5f69\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u7b56\u7565<\/strong>\uff1a\u6211\u4eec\u51bb\u7ed3\u4e86\u7f51\u7edc\u524d\u534a\u90e8\u5206\u7684\u9884\u8bad\u7ec3\u6743\u91cd\uff08Feature Extractor\uff09\uff0c\u53ea\u66ff\u6362\u5e76\u8bad\u7ec3\u6700\u540e\u7684\u5168\u8fde\u63a5\u5c42\uff08Classifier\uff09\u3002\u8fd9\u6837\u65e2\u5229\u7528\u4e86\u5927\u6a21\u578b\u63d0\u53d6\u7279\u5f81\u7684\u80fd\u529b\uff0c\u53c8\u5927\u5927\u7f29\u77ed\u4e86\u8bad\u7ec3\u65f6\u95f4\uff08\u6211\u7684GPU\u5e76\u4e0d\u5f3a\u52b2\uff09\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">0x01 \u73af\u5883\u914d\u7f6e<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u9879\u76ee\u5728 Arch Linux \u73af\u5883\u4e0b\u5f00\u53d1\uff0c\u4f46\u5728\u73af\u5883\u914d\u7f6e\u9636\u6bb5\u9047\u5230\u4e86\u4e00\u4e2a\u5178\u578b\u7684\u517c\u5bb9\u6027\u95ee\u9898\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Python 3.14 \u4e0e PyQt6 \u7684\u51b2\u7a81<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u7531\u4e8e Arch \u6eda\u52a8\u66f4\u65b0\u673a\u5236\uff0c\u7cfb\u7edf\u4e2d\u7684 Python \u7248\u672c\u8f83\u65b0\uff083.14\uff09\uff0c\u800c PyQt6 \u5b98\u65b9\u5c1a\u672a\u53d1\u5e03\u9002\u914d Python 3.14 \u7684\u9884\u7f16\u8bd1\u5305\uff0c\u5bfc\u81f4\u5b89\u88c5PyQt6\u65f6\u62a5\u4e86<code>No matching distribution found<\/code>\u3002\u6211\u679c\u65ad\u653e\u5f03\u4e863.14\u7684venv,\u5b89\u88c5\u4e863.12\u7248\u672c\u7684Python\u6210\u529f\u89e3\u51b3\u95ee\u9898\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">0x02 \u6a21\u578b\u8bad\u7ec3<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u6211\u4f7f\u7528 <code>torchvision<\/code>\u7684 <code>ImageFolder<\/code>\u52a0\u8f7d\u6570\u636e\u96c6\uff0c\u5e76\u5e94\u7528\u4e86\u4e00\u7cfb\u5217\u6570\u636e\u589e\u5f3a\u548c\u6807\u51c6\u5316\u53d8\u6362\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u8bad\u7ec3\u65e5\u5fd7\u8282\u9009\uff1a<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>[epoch 1] \u2605 New best val_acc=94.38% saved <\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>[epoch 10] \u2605 New best val_acc=99.00% saved<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6700\u7ec8\uff0c\u6a21\u578b\u5728\u9a8c\u8bc1\u96c6\u4e0a\u8fbe\u5230\u4e86 <strong>99.00%<\/strong>\u200b \u7684\u6700\u4f73\u51c6\u786e\u7387\uff0c\u6700\u7ec8\u7684\u6d4b\u8bd5\u96c6\u51c6\u786e\u7387\u4e3a <strong>98.12%<\/strong>\u3002\u5bf9\u4e8e\u8fd9\u6837\u4e00\u4e2a\u8f7b\u91cf\u7ea7\u6a21\u578b\u6765\u8bf4\uff0c\u8fd9\u662f\u4e00\u4e2a\u76f8\u5f53\u4e0d\u9519\u7684\u6210\u7ee9\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">0x03 \u9884\u6d4b\u7a0b\u5e8f\u56fe\u5f62\u5316\u8bbe\u8ba1<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e3a\u4e86\u8ba9\u6a21\u578b\u771f\u6b63\u201c\u53ef\u7528\u201d\uff0c\u6211\u7f16\u5199\u4e86\u57fa\u4e8e PyQt6 \u7684\u56fe\u5f62\u754c\u9762\u3002\u4e3a\u4e86\u63d0\u5347\u89c6\u89c9\u4f53\u9a8c\uff0c\u653e\u5f03\u4e86\u4f20\u7edf\u7684\u539f\u751f\u63a7\u4ef6\u98ce\u683c\uff0c\u91c7\u7528\u4e86<strong>\u6df1\u8272\u4e3b\u9898 (Dark Mode)<\/strong>\u200b \u8bbe\u8ba1\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u754c\u9762\u6838\u5fc3\u7ec4\u4ef6\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5de6\u4fa7\uff1a\u56fe\u7247\u9884\u89c8\u533a<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u4f7f\u7528 <code>QLabel<\/code>\u52a8\u6001\u663e\u793a\u7528\u6237\u9009\u62e9\u7684\u56fe\u7247\u3002<\/li>\n\n\n\n<li>\u6dfb\u52a0\u4e86\u5706\u89d2\u548c\u8fb9\u6846\u6837\u5f0f\uff0c\u63d0\u5347\u8d28\u611f\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u53f3\u4fa7\uff1a\u63a7\u5236\u4e0e\u6570\u636e\u533a<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>\u6a21\u578b\u52a0\u8f7d<\/strong>\uff1a\u901a\u8fc7 <code>QPushButton<\/code>\u89e6\u53d1\u6587\u4ef6\u9009\u62e9\u5668\uff0c\u52a0\u8f7d <code>best_catdog.pth<\/code>\u3002<\/li>\n\n\n\n<li><strong>\u81ea\u5b9a\u4e49\u6982\u7387\u6761 (PredictionBar)<\/strong>\uff1a\u91cd\u5199 <code>QProgressBar<\/code>\u6837\u5f0f\uff0c\u505a\u51fa\u4e86\u7c7b\u4f3c\u6e38\u620f UI \u7684\u52a8\u6001\u6e10\u53d8\u8fdb\u5ea6\u6761\u3002\u732b\u7684\u6982\u7387\u663e\u793a\u4e3a\u6696\u6a59\u8272 (#FF9800)\uff0c\u72d7\u7684\u6982\u7387\u663e\u793a\u4e3a\u79d1\u6280\u84dd (#2196F3)\u3002<\/li>\n\n\n\n<li><strong>Matplotlib \u6570\u636e\u53ef\u89c6\u5316<\/strong>\uff1a\u5c06 Matplotlib \u56fe\u8868\u76f4\u63a5\u5d4c\u5165 PyQt6 \u7a97\u53e3\u3002\u6bcf\u6b21\u9884\u6d4b\u540e\uff0c\u67f1\u72b6\u56fe\u4f1a\u52a8\u6001\u5237\u65b0\uff0c\u76f4\u89c2\u5c55\u793a\u5404\u7c7b\u522b\u7684\u7f6e\u4fe1\u5ea6\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">0x04 \u6587\u4ef6\u5206\u4eab<\/h2>\n\n\n\n\n\n<div class=\"wp-block-material-buttons\">\n<div class=\"wp-block-material-button\" id=\"block-material-button-0\"><a href=\"https:\/\/1816076529.share.123865.com\/123pan\/qPh5Vv-lpBD?pwd=Mc4O#\" class=\"mdc-button mdc-button--elevated\" target=\"_blank\" rel=\"noopener\"><i class=\"material-icons mdc-button__icon\">spa<\/i><div class=\"mdc-button__ripple\"><\/div><span class=\"mdc-button__label\">\u4e0b\u8f7d<\/span><\/a><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u672c\u9879\u76ee\u6f14\u793a\u4e86\u4f7f\u7528PyTorch\u5b9e\u73b0\u732b\u72d7\u56fe\u50cf\u5206\u7c7b\u7684\u5b8c\u6574\u6d41\u7a0b\u3002\u6838\u5fc3\u6280\u672f\u91c7\u7528\u8fc1\u79fb\u5b66\u4e60\u7b56\u7565\uff0c\u4ee5ResNet18\u4f5c\u4e3a\u9aa8\u5e72\u7f51\u7edc\uff0c\u51bb\u7ed3\u524d\u534a\u90e8\u5206\u7684\u9884\u8bad\u7ec3\u6743\u91cd\uff0c\u4ec5\u8bad\u7ec3\u6700\u540e\u7684\u5168\u8fde\u63a5\u5c42\u3002\u8fd9\u79cd\u65b9\u6cd5\u5145\u5206\u5229\u7528\u5927\u6a21\u578b\u63d0\u53d6\u7279\u5f81\u7684\u80fd\u529b\uff0c\u540c\u65f6\u663e\u8457\u964d\u4f4e\u4e86\u5bf9\u8ba1\u7b97\u8d44\u6e90\u7684\u9700\u6c42\u3002\u5bf9\u4e8e\u7f3a\u4e4f\u5f3a\u5927GPU\u7684\u5f00\u53d1\u8005\u800c\u8a00\uff0c\u901a\u8fc7\u51bb\u7ed3\u7279\u5f81\u63d0\u53d6\u5668\u5e76\u5fae\u8c03\u5206\u7c7b\u5668\uff0c\u662f\u5b9e\u73b0\u6df1\u5ea6\u5b66\u4e60\u56fe\u50cf\u5206\u7c7b\u4efb\u52a1\u7684\u53ef\u884c\u8def\u5f84\u3002<\/p>\n","protected":false},"author":1,"featured_media":760,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","_excerptai":2,"_xhaitool_aitasks":false,"_xhaitool_aitasks_status":true,"_aiimage_cueword":"","_aiimage_status":0,"_xhai_excerpt":"\u672c\u9879\u76ee\u6f14\u793a\u4e86\u4f7f\u7528PyTorch\u5b9e\u73b0\u732b\u72d7\u56fe\u50cf\u5206\u7c7b\u7684\u5b8c\u6574\u6d41\u7a0b\u3002\u6838\u5fc3\u6280\u672f\u91c7\u7528\u8fc1\u79fb\u5b66\u4e60\u7b56\u7565\uff0c\u4ee5ResNet18\u4f5c\u4e3a\u9aa8\u5e72\u7f51\u7edc\uff0c\u51bb\u7ed3\u524d\u534a\u90e8\u5206\u7684\u9884\u8bad\u7ec3\u6743\u91cd\uff0c\u4ec5\u8bad\u7ec3\u6700\u540e\u7684\u5168\u8fde\u63a5\u5c42\u3002\u8fd9\u79cd\u65b9\u6cd5\u5145\u5206\u5229\u7528\u5927\u6a21\u578b\u63d0\u53d6\u7279\u5f81\u7684\u80fd\u529b\uff0c\u540c\u65f6\u663e\u8457\u964d\u4f4e\u4e86\u5bf9\u8ba1\u7b97\u8d44\u6e90\u7684\u9700\u6c42\u3002\u5bf9\u4e8e\u7f3a\u4e4f\u5f3a\u5927GPU\u7684\u5f00\u53d1\u8005\u800c\u8a00\uff0c\u901a\u8fc7\u51bb\u7ed3\u7279\u5f81\u63d0\u53d6\u5668\u5e76\u5fae\u8c03\u5206\u7c7b\u5668\uff0c\u662f\u5b9e\u73b0\u6df1\u5ea6\u5b66\u4e60\u56fe\u50cf\u5206\u7c7b\u4efb\u52a1\u7684\u53ef\u884c\u8def\u5f84\u3002","footnotes":""},"categories":[24],"tags":[18,62,21,61],"class_list":["post-752","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-24","tag-python","tag-image-classification","tag-21","tag-transfer-learning"],"uagb_featured_image_src":{"full":["https:\/\/cn-sy1.rains3.com\/ntblog\/2026\/05\/QJoadwo2-%E5%9B%BE%E7%89%87.png",960,1038,false],"thumbnail":["https:\/\/cn-sy1.rains3.com\/ntblog\/2026\/05\/QJoadwo2-%E5%9B%BE%E7%89%87-150x150.png",150,150,true],"medium":["https:\/\/cn-sy1.rains3.com\/ntblog\/2026\/05\/%E5%9B%BE%E7%89%87-277x300.png",277,300,true],"medium_large":["https:\/\/cn-sy1.rains3.com\/ntblog\/2026\/05\/%E5%9B%BE%E7%89%87-768x830.png",768,830,true],"large":["https:\/\/cn-sy1.rains3.com\/ntblog\/2026\/05\/%E5%9B%BE%E7%89%87-947x1024.png",947,1024,true],"1536x1536":["https:\/\/cn-sy1.rains3.com\/ntblog\/2026\/05\/QJoadwo2-%E5%9B%BE%E7%89%87.png",960,1038,false],"2048x2048":["https:\/\/cn-sy1.rains3.com\/ntblog\/2026\/05\/QJoadwo2-%E5%9B%BE%E7%89%87.png",960,1038,false]},"uagb_author_info":{"display_name":"NanoTurtle","author_link":"https:\/\/blog.nanoturtle.cn\/author\/nanoturtle\/"},"uagb_comment_info":0,"uagb_excerpt":"\u672c\u9879\u76ee\u6f14\u793a\u4e86\u4f7f\u7528PyTorch\u5b9e\u73b0\u732b\u72d7\u56fe\u50cf\u5206\u7c7b\u7684\u5b8c\u6574\u6d41\u7a0b\u3002\u6838\u5fc3\u6280\u672f\u91c7\u7528\u8fc1\u79fb\u5b66\u4e60\u7b56\u7565\uff0c\u4ee5ResNet18\u4f5c\u4e3a\u9aa8\u5e72&hellip;","_links":{"self":[{"href":"https:\/\/blog.nanoturtle.cn\/index.php\/wp-json\/wp\/v2\/posts\/752","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.nanoturtle.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.nanoturtle.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.nanoturtle.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.nanoturtle.cn\/index.php\/wp-json\/wp\/v2\/comments?post=752"}],"version-history":[{"count":5,"href":"https:\/\/blog.nanoturtle.cn\/index.php\/wp-json\/wp\/v2\/posts\/752\/revisions"}],"predecessor-version":[{"id":762,"href":"https:\/\/blog.nanoturtle.cn\/index.php\/wp-json\/wp\/v2\/posts\/752\/revisions\/762"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.nanoturtle.cn\/index.php\/wp-json\/wp\/v2\/media\/760"}],"wp:attachment":[{"href":"https:\/\/blog.nanoturtle.cn\/index.php\/wp-json\/wp\/v2\/media?parent=752"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.nanoturtle.cn\/index.php\/wp-json\/wp\/v2\/categories?post=752"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.nanoturtle.cn\/index.php\/wp-json\/wp\/v2\/tags?post=752"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}