{"id":1185,"date":"2023-06-15T16:47:39","date_gmt":"2023-06-15T08:47:39","guid":{"rendered":"http:\/\/xinyixx.com\/?p=1185"},"modified":"2023-06-17T10:58:19","modified_gmt":"2023-06-17T02:58:19","slug":"python16","status":"publish","type":"post","link":"https:\/\/www.xinyixx.com\/index.php\/2023\/06\/15\/python16\/","title":{"rendered":"python\u7a0b\u5e8f16\uff1a\u5199\u4e00\u4e2a\u63d0\u9ad8\u56fe\u7247\u6e05\u6670\u5ea6\u7684\u7a0b\u5e8f"},"content":{"rendered":"\n<p>\u63d0\u9ad8\u56fe\u7247\u6e05\u6670\u5ea6\u53ef\u4ee5\u4f7f\u7528\u8d85\u5206\u8fa8\u7387\uff08Super-Resolution\uff0cSR\uff09\u6280\u672f\uff0cPyTorch\u662f\u4e00\u4e2a\u5f88\u597d\u7684\u5b9e\u73b0\u5de5\u5177\u3002<\/p>\n\n\n\n<p>\u8d85\u5206\u8fa8\u7387\u7684\u539f\u7406\u662f\u901a\u8fc7\u5bf9\u4f4e\u5206\u8fa8\u7387\u56fe\u50cf\u8fdb\u884c\u63d2\u503c\u6216\u8005\u91cd\u5efa\uff0c\u5f97\u5230\u9ad8\u5206\u8fa8\u7387\u56fe\u50cf\u3002\u8fd9\u4e00\u8fc7\u7a0b\u53ef\u4ee5\u901a\u8fc7\u5377\u79ef\u795e\u7ecf\u7f51\u7edc\u8fdb\u884c\u5b66\u4e60\u548c\u5b9e\u73b0\u3002\u8bad\u7ec3\u65f6\uff0c\u4f7f\u7528\u4f4e\u5206\u8fa8\u7387\u56fe\u50cf\u548c\u76f8\u5e94\u7684\u9ad8\u5206\u8fa8\u7387\u56fe\u50cf\u5bf9\u6a21\u578b\u8fdb\u884c\u8bad\u7ec3\uff0c\u4ee5\u4fbf\u6a21\u578b\u80fd\u591f\u5b66\u4e60\u5230\u4f4e\u5206\u8fa8\u7387\u56fe\u50cf\u548c\u9ad8\u5206\u8fa8\u7387\u56fe\u50cf\u4e4b\u95f4\u7684\u6620\u5c04\u5173\u7cfb\u3002\u5728\u6d4b\u8bd5\u65f6\uff0c\u5c06\u4f4e\u5206\u8fa8\u7387\u56fe\u50cf\u8f93\u5165\u5230\u6a21\u578b\u4e2d\uff0c\u5373\u53ef\u5f97\u5230\u9ad8\u5206\u8fa8\u7387\u56fe\u50cf\u3002<\/p>\n\n\n\n<p>\u548c\u4ee5\u524d\u4e00\u6837\uff0c\u9700\u8981\u5728\u7ec8\u7aef\u91cc\u4e0b\u8f7d\u6a21\u578b\uff1a<code>pip install torch torchvision numpy matplotlib<\/code><\/p>\n\n\n\n<p>\u5176\u4e2d\uff0ctorch\u662fPyTorch\u6846\u67b6\uff0ctorchvision\u662fPyTorch\u7684\u89c6\u89c9\u5e93\uff0cnumpy\u662fPython\u7684\u6570\u503c\u8ba1\u7b97\u5e93\uff0cmatplotlib\u662fPython\u7684\u7ed8\u56fe\u5e93\u3002<\/p>\n\n\n\n<p>\u4e0b\u9762\u662f\u6e90\u4ee3\u7801\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import torch<br>import torch.nn as nn<br>import torch.optim as optim<br>from torch.utils.data import DataLoader<br>from torchvision import transforms<br>from torchvision.datasets import ImageFolder<br><br>class SRModel(nn.Module):<br>    def __init__(self):<br>        super(SRModel, self).__init__()<br>        self.conv1 = nn.Conv2d(3, 64, kernel_size=3, padding=1)<br>        self.conv2 = nn.Conv2d(64, 64, kernel_size=3, padding=1)<br>        self.conv3 = nn.Conv2d(64, 32, kernel_size=3, padding=1)<br>        self.conv4 = nn.Conv2d(32, 3, kernel_size=3, padding=1)<br>        self.relu = nn.ReLU(inplace=True)<br><br>    def forward(self, x):<br>        out = self.relu(self.conv1(x))<br>        out = self.relu(self.conv2(out))<br>        out = self.relu(self.conv3(out))<br>        out = self.conv4(out)<br>        return out<br><br>def train_sr_model(model, train_loader, val_loader, num_epochs=10, lr=0.001):<br>    criterion = nn.MSELoss()<br>    optimizer = optim.Adam(model.parameters(), lr=lr)<br>    for epoch in range(num_epochs):<br>        # \u8bad\u7ec3\u6a21\u578b<br>        model.train()<br>        train_loss = 0.0<br>        for i, (inputs, targets) in enumerate(train_loader):<br>            optimizer.zero_grad()<br>            outputs = model(inputs)<br>            loss = criterion(outputs, targets)<br>            loss.backward()<br>            optimizer.step()<br>            train_loss += loss.item() * inputs.size(0)<br>        train_loss \/= len(train_loader.dataset)<br><br>        # \u9a8c\u8bc1\u6a21\u578b<br>        model.eval()<br>        val_loss = 0.0<br>        with torch.no_grad():<br>            for inputs, targets in val_loader:<br>                outputs = model(inputs)<br>                loss = criterion(outputs, targets)<br>                val_loss += loss.item() * inputs.size(0)<br>            val_loss \/= len(val_loader.dataset)<br><br>        # \u6253\u5370\u8bad\u7ec3\u4fe1\u606f<br>        print(f\"Epoch {epoch+1}\/{num_epochs}: Train Loss={train_loss:.4f}, Val Loss={val_loss:.4f}\")<br><br>train_transforms = transforms.Compose([<br>    transforms.Resize((256, 256)),<br>    transforms.RandomCrop(224),<br>    transforms.ToTensor(),<br>])<br>val_transforms = transforms.Compose([<br>    transforms.Resize((224, 224)),<br>    transforms.ToTensor(),<br>])<br>train_dataset = ImageFolder(\"path\/to\/train\/dataset\", transform=train_transforms)<br>val_dataset = ImageFolder(\"path\/to\/val\/dataset\", transform=val_transforms)<br>train_loader = DataLoader(train_dataset, batch_size=8, shuffle=True)<br>val_loader = DataLoader(val_dataset, batch_size=8)<br><br>model = SRModel()<br>train_sr_model(model, train_loader, val_loader)<\/pre>\n\n\n\n<p>\u4e0a\u9762\u5b9e\u73b0\u4e86\u4e00\u4e2a\u8d85\u5206\u8fa8\u7387\u6a21\u578b\u7684\u8bad\u7ec3\uff0c\u4f7f\u7528\u4e86PyTorch\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u3002\u6a21\u578b\u4f7f\u7528\u4e86\u56db\u4e2a\u5377\u79ef\u5c42\u548c\u4e00\u4e2aReLU\u6fc0\u6d3b\u51fd\u6570\uff0c\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u4f7f\u7528\u4e86MSE\u635f\u5931\u51fd\u6570\u548cAdam\u4f18\u5316\u5668\u3002\u5bf9\u8bad\u7ec3\u96c6\u548c\u9a8c\u8bc1\u96c6\u8fdb\u884c\u4e86\u9884\u5904\u7406\uff0c\u5e76\u4f7f\u7528DataLoader\u8fdb\u884c\u6279\u91cf\u52a0\u8f7d\u3002\u6700\u7ec8\u8f93\u51fa\u4e86\u8bad\u7ec3\u96c6\u548c\u9a8c\u8bc1\u96c6\u7684\u635f\u5931\u4fe1\u606f\u3002<\/p>\n\n\n\n<p>\u540c\u5b66\u53ef\u4ee5\u5728pycharm\u91cc\u6d4b\u8bd5\u8fd0\u884c\u4e00\u4e0b\uff0c\u6709\u95ee\u9898\u53ef\u4ee5\u79c1\u4fe1\u6211\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u63d0\u9ad8\u56fe\u7247\u6e05\u6670\u5ea6\u53ef\u4ee5\u4f7f\u7528\u8d85\u5206\u8fa8\u7387\uff08Super-Resolution\uff0cSR\uff09\u6280\u672f\uff0cPyTorch\u662f\u4e00\u4e2a\u5f88\u597d\u7684\u5b9e\u73b0\u5de5 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[14,10],"tags":[71,69,77],"class_list":["post-1185","post","type-post","status-publish","format-standard","hentry","category-teacher","category-coding","tag-python","tag-learning","tag-coding","entry"],"_links":{"self":[{"href":"https:\/\/www.xinyixx.com\/index.php\/wp-json\/wp\/v2\/posts\/1185","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xinyixx.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xinyixx.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xinyixx.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xinyixx.com\/index.php\/wp-json\/wp\/v2\/comments?post=1185"}],"version-history":[{"count":0,"href":"https:\/\/www.xinyixx.com\/index.php\/wp-json\/wp\/v2\/posts\/1185\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.xinyixx.com\/index.php\/wp-json\/wp\/v2\/media?parent=1185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xinyixx.com\/index.php\/wp-json\/wp\/v2\/categories?post=1185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xinyixx.com\/index.php\/wp-json\/wp\/v2\/tags?post=1185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}