四川市网站建设视频弹幕网站怎么做的

当前位置: 首页 > news >正文

四川市网站建设,视频弹幕网站怎么做的,中国免费广告网,一般个人网址是什么目录 DAY 35 模型可视化与推理1.三种不同的模型可视化方法#xff1a;推荐torchinfo打印summary权重分布可视化2.进度条功能#xff1a;手动和自动写法#xff0c;让打印结果更加美观3.推理的写法#xff1a;评估模式作业#xff1a;调整模型定义时的超参数#xff0c;对… 目录 DAY 35 模型可视化与推理1.三种不同的模型可视化方法推荐torchinfo打印summary权重分布可视化2.进度条功能手动和自动写法让打印结果更加美观3.推理的写法评估模式作业调整模型定义时的超参数对比下效果。 DAY 35 模型可视化与推理 import torch import torch.nn as nn import torch.optim as optim from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler import time import matplotlib.pyplot as pltdevice torch.device(cuda:0 if torch.cuda.is_available() else cpu) print(f使用设备: {device})iris load_iris() X iris.data y iris.target X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42) scaler MinMaxScaler() X_train scaler.fit_transform(X_train) X_test scaler.transform(X_test) X_train torch.FloatTensor(X_train).to(device) y_train torch.LongTensor(y_train).to(device) X_test torch.FloatTensor(X_test).to(device) y_test torch.LongTensor(y_test).to(device)class MLP(nn.Module):def init(self):super(MLP, self).init()self.fc1 nn.Linear(4, 10)self.relu nn.ReLU()self.fc2 nn.Linear(10, 3)def forward(self, x):out self.fc1(x)out self.relu(out)out self.fc2(out)return outmodel MLP().to(device) criterion nn.CrossEntropyLoss() optimizer optim.SGD(model.parameters(), lr0.01) num_epochs 20000 losses [] start_time time.time()for epoch in range(num_epochs):outputs model(X_train)loss criterion(outputs, y_train)optimizer.zero_grad()loss.backward()optimizer.step()if (epoch 1) % 200 0:losses.append(loss.item())print(fEpoch [{epoch1}/{num_epochs}], Loss: {loss.item():.4f})if (epoch 1) % 100 0:print(fEpoch [{epoch1}/{num_epochs}], Loss: {loss.item():.4f})time_all time.time() - start_time print(fTraining time: {time_all:.2f} seconds)plt.plot(range(len(losses)), losses) plt.xlabel(Epoch) plt.ylabel(Loss) plt.title(Training Loss over Epochs) plt.show() 使用设备: cpu Epoch [10020000], Loss: 1.0420 Epoch [20020000], Loss: 0.9975 Epoch [20020000], Loss: 0.9975 Epoch [30020000], Loss: 0.9480 Epoch [40020000], Loss: 0.8947 Epoch [40020000], Loss: 0.8947 Epoch [50020000], Loss: 0.8393 Epoch [60020000], Loss: 0.7838 Epoch [60020000], Loss: 0.7838 Epoch [70020000], Loss: 0.7300 Epoch [80020000], Loss: 0.6797 Epoch [80020000], Loss: 0.6797 Epoch [90020000], Loss: 0.6337 Epoch [100020000], Loss: 0.5927 Epoch [100020000], Loss: 0.5927 Epoch [110020000], Loss: 0.5566 Epoch [120020000], Loss: 0.5251 Epoch [120020000], Loss: 0.5251 Epoch [130020000], Loss: 0.4975 Epoch [140020000], Loss: 0.4733 Epoch [140020000], Loss: 0.4733 Epoch [150020000], Loss: 0.4518 Epoch [160020000], Loss: 0.4325 Epoch [160020000], Loss: 0.4325 Epoch [170020000], Loss: 0.4150 Epoch [180020000], Loss: 0.3990 Epoch [180020000], Loss: 0.3990 Epoch [190020000], Loss: 0.3840 Epoch [200020000], Loss: 0.3701 Epoch [200020000], Loss: 0.3701 Epoch [210020000], Loss: 0.3570 Epoch [220020000], Loss: 0.3447 Epoch [220020000], Loss: 0.3447 Epoch [230020000], Loss: 0.3329 Epoch [240020000], Loss: 0.3218 Epoch [240020000], Loss: 0.3218 Epoch [250020000], Loss: 0.3112 Epoch [260020000], Loss: 0.3011 Epoch [260020000], Loss: 0.3011 Epoch [270020000], Loss: 0.2914 Epoch [280020000], Loss: 0.2822 Epoch [280020000], Loss: 0.2822 Epoch [290020000], Loss: 0.2735 Epoch [300020000], Loss: 0.2651 Epoch [300020000], Loss: 0.2651 Epoch [310020000], Loss: 0.2572 Epoch [320020000], Loss: 0.2496 Epoch [320020000], Loss: 0.2496 Epoch [330020000], Loss: 0.2423 Epoch [340020000], Loss: 0.2354 Epoch [340020000], Loss: 0.2354 Epoch [350020000], Loss: 0.2288 Epoch [360020000], Loss: 0.2226 Epoch [360020000], Loss: 0.2226 Epoch [370020000], Loss: 0.2166 Epoch [380020000], Loss: 0.2109 Epoch [380020000], Loss: 0.2109 Epoch [390020000], Loss: 0.2054 Epoch [400020000], Loss: 0.2003 Epoch [400020000], Loss: 0.2003 Epoch [410020000], Loss: 0.1953 Epoch [420020000], Loss: 0.1906 Epoch [420020000], Loss: 0.1906 Epoch [430020000], Loss: 0.1861 Epoch [440020000], Loss: 0.1818 Epoch [440020000], Loss: 0.1818 Epoch [450020000], Loss: 0.1777 Epoch [460020000], Loss: 0.1738 Epoch [460020000], Loss: 0.1738 Epoch [470020000], Loss: 0.1700 Epoch [480020000], Loss: 0.1664 Epoch [480020000], Loss: 0.1664 Epoch [490020000], Loss: 0.1630 Epoch [500020000], Loss: 0.1597 Epoch [500020000], Loss: 0.1597 Epoch [510020000], Loss: 0.1566 Epoch [520020000], Loss: 0.1536 Epoch [520020000], Loss: 0.1536 Epoch [530020000], Loss: 0.1507 Epoch [540020000], Loss: 0.1479 Epoch [540020000], Loss: 0.1479 Epoch [550020000], Loss: 0.1452 Epoch [560020000], Loss: 0.1427 Epoch [560020000], Loss: 0.1427 Epoch [570020000], Loss: 0.1402 Epoch [580020000], Loss: 0.1379 Epoch [580020000], Loss: 0.1379 Epoch [590020000], Loss: 0.1356 Epoch [600020000], Loss: 0.1335 Epoch [600020000], Loss: 0.1335 Epoch [610020000], Loss: 0.1314 Epoch [620020000], Loss: 0.1294 Epoch [620020000], Loss: 0.1294 Epoch [630020000], Loss: 0.1274 Epoch [640020000], Loss: 0.1256 Epoch [640020000], Loss: 0.1256 Epoch [650020000], Loss: 0.1238 Epoch [660020000], Loss: 0.1220 Epoch [660020000], Loss: 0.1220 Epoch [670020000], Loss: 0.1204 Epoch [680020000], Loss: 0.1188 Epoch [680020000], Loss: 0.1188 Epoch [690020000], Loss: 0.1172 Epoch [700020000], Loss: 0.1157 Epoch [700020000], Loss: 0.1157 Epoch [710020000], Loss: 0.1143 Epoch [720020000], Loss: 0.1129 Epoch [720020000], Loss: 0.1129 Epoch [730020000], Loss: 0.1115 Epoch [740020000], Loss: 0.1102 Epoch [740020000], Loss: 0.1102 Epoch [750020000], Loss: 0.1089 Epoch [760020000], Loss: 0.1077 Epoch [760020000], Loss: 0.1077 Epoch [770020000], Loss: 0.1065 Epoch [780020000], Loss: 0.1054 Epoch [780020000], Loss: 0.1054 Epoch [790020000], Loss: 0.1043 Epoch [800020000], Loss: 0.1032 Epoch [800020000], Loss: 0.1032 Epoch [810020000], Loss: 0.1022 Epoch [820020000], Loss: 0.1012 Epoch [820020000], Loss: 0.1012 Epoch [830020000], Loss: 0.1002 Epoch [840020000], Loss: 0.0992 Epoch [840020000], Loss: 0.0992 Epoch [850020000], Loss: 0.0983 Epoch [860020000], Loss: 0.0974 Epoch [860020000], Loss: 0.0974 Epoch [870020000], Loss: 0.0965 Epoch [880020000], Loss: 0.0957 Epoch [880020000], Loss: 0.0957 Epoch [890020000], Loss: 0.0949 Epoch [900020000], Loss: 0.0941 Epoch [900020000], Loss: 0.0941 Epoch [910020000], Loss: 0.0933 Epoch [920020000], Loss: 0.0926 Epoch [920020000], Loss: 0.0926 Epoch [930020000], Loss: 0.0918 Epoch [940020000], Loss: 0.0911 Epoch [940020000], Loss: 0.0911 Epoch [950020000], Loss: 0.0904 Epoch [960020000], Loss: 0.0898 Epoch [960020000], Loss: 0.0898 Epoch [970020000], Loss: 0.0891 Epoch [980020000], Loss: 0.0885 Epoch [980020000], Loss: 0.0885 Epoch [990020000], Loss: 0.0878 Epoch [1000020000], Loss: 0.0872 Epoch [1000020000], Loss: 0.0872 Epoch [1010020000], Loss: 0.0866 Epoch [1020020000], Loss: 0.0861 Epoch [1020020000], Loss: 0.0861 Epoch [1030020000], Loss: 0.0855 Epoch [1040020000], Loss: 0.0850 Epoch [1040020000], Loss: 0.0850 Epoch [1050020000], Loss: 0.0844 Epoch [1060020000], Loss: 0.0839 Epoch [1060020000], Loss: 0.0839 Epoch [1070020000], Loss: 0.0834 Epoch [1080020000], Loss: 0.0829 Epoch [1080020000], Loss: 0.0829 Epoch [1090020000], Loss: 0.0824 Epoch [1100020000], Loss: 0.0819 Epoch [1100020000], Loss: 0.0819 Epoch [1110020000], Loss: 0.0815 Epoch [1120020000], Loss: 0.0810 Epoch [1120020000], Loss: 0.0810 Epoch [1130020000], Loss: 0.0806 Epoch [1140020000], Loss: 0.0802 Epoch [1140020000], Loss: 0.0802 Epoch [1150020000], Loss: 0.0797 Epoch [1160020000], Loss: 0.0793 Epoch [1160020000], Loss: 0.0793 Epoch [1170020000], Loss: 0.0789 Epoch [1180020000], Loss: 0.0785 Epoch [1180020000], Loss: 0.0785 Epoch [1190020000], Loss: 0.0781 Epoch [1200020000], Loss: 0.0778 Epoch [1200020000], Loss: 0.0778 Epoch [1210020000], Loss: 0.0774 Epoch [1220020000], Loss: 0.0770 Epoch [1220020000], Loss: 0.0770 Epoch [1230020000], Loss: 0.0767 Epoch [1240020000], Loss: 0.0763 Epoch [1240020000], Loss: 0.0763 Epoch [1250020000], Loss: 0.0760 Epoch [1260020000], Loss: 0.0756 Epoch [1260020000], Loss: 0.0756 Epoch [1270020000], Loss: 0.0753 Epoch [1280020000], Loss: 0.0750 Epoch [1280020000], Loss: 0.0750 Epoch [1290020000], Loss: 0.0747 Epoch [1300020000], Loss: 0.0744 Epoch [1300020000], Loss: 0.0744 Epoch [1310020000], Loss: 0.0741 Epoch [1320020000], Loss: 0.0738 Epoch [1320020000], Loss: 0.0738 Epoch [1330020000], Loss: 0.0735 Epoch [1340020000], Loss: 0.0732 Epoch [1340020000], Loss: 0.0732 Epoch [1350020000], Loss: 0.0729 Epoch [1360020000], Loss: 0.0726 Epoch [1360020000], Loss: 0.0726 Epoch [1370020000], Loss: 0.0724 Epoch [1380020000], Loss: 0.0721 Epoch [1380020000], Loss: 0.0721 Epoch [1390020000], Loss: 0.0719 Epoch [1400020000], Loss: 0.0716 Epoch [1400020000], Loss: 0.0716 Epoch [1410020000], Loss: 0.0713 Epoch [1420020000], Loss: 0.0711 Epoch [1420020000], Loss: 0.0711 Epoch [1430020000], Loss: 0.0709 Epoch [1440020000], Loss: 0.0706 Epoch [1440020000], Loss: 0.0706 Epoch [1450020000], Loss: 0.0704 Epoch [1460020000], Loss: 0.0702 Epoch [1460020000], Loss: 0.0702 Epoch [1470020000], Loss: 0.0699 Epoch [1480020000], Loss: 0.0697 Epoch [1480020000], Loss: 0.0697 Epoch [1490020000], Loss: 0.0695 Epoch [1500020000], Loss: 0.0693 Epoch [1500020000], Loss: 0.0693 Epoch [1510020000], Loss: 0.0691 Epoch [1520020000], Loss: 0.0689 Epoch [1520020000], Loss: 0.0689 Epoch [1530020000], Loss: 0.0687 Epoch [1540020000], Loss: 0.0685 Epoch [1540020000], Loss: 0.0685 Epoch [1550020000], Loss: 0.0683 Epoch [1560020000], Loss: 0.0681 Epoch [1560020000], Loss: 0.0681 Epoch [1570020000], Loss: 0.0679 Epoch [1580020000], Loss: 0.0677 Epoch [1580020000], Loss: 0.0677 Epoch [1590020000], Loss: 0.0675 Epoch [1600020000], Loss: 0.0673 Epoch [1600020000], Loss: 0.0673 Epoch [1610020000], Loss: 0.0671 Epoch [1620020000], Loss: 0.0670 Epoch [1620020000], Loss: 0.0670 Epoch [1630020000], Loss: 0.0668 Epoch [1640020000], Loss: 0.0666 Epoch [1640020000], Loss: 0.0666 Epoch [1650020000], Loss: 0.0664 Epoch [1660020000], Loss: 0.0663 Epoch [1660020000], Loss: 0.0663 Epoch [1670020000], Loss: 0.0661 Epoch [1680020000], Loss: 0.0660 Epoch [1680020000], Loss: 0.0660 Epoch [1690020000], Loss: 0.0658 Epoch [1700020000], Loss: 0.0656 Epoch [1700020000], Loss: 0.0656 Epoch [1710020000], Loss: 0.0655 Epoch [1720020000], Loss: 0.0653 Epoch [1720020000], Loss: 0.0653 Epoch [1730020000], Loss: 0.0652 Epoch [1740020000], Loss: 0.0650 Epoch [1740020000], Loss: 0.0650 Epoch [1750020000], Loss: 0.0649 Epoch [1760020000], Loss: 0.0647 Epoch [1760020000], Loss: 0.0647 Epoch [1770020000], Loss: 0.0646 Epoch [1780020000], Loss: 0.0645 Epoch [1780020000], Loss: 0.0645 Epoch [1790020000], Loss: 0.0643 Epoch [1800020000], Loss: 0.0642 Epoch [1800020000], Loss: 0.0642 Epoch [1810020000], Loss: 0.0640 Epoch [1820020000], Loss: 0.0639 Epoch [1820020000], Loss: 0.0639 Epoch [1830020000], Loss: 0.0638 Epoch [1840020000], Loss: 0.0636 Epoch [1840020000], Loss: 0.0636 Epoch [1850020000], Loss: 0.0635 Epoch [1860020000], Loss: 0.0634 Epoch [1860020000], Loss: 0.0634 Epoch [1870020000], Loss: 0.0633 Epoch [1880020000], Loss: 0.0631 Epoch [1880020000], Loss: 0.0631 Epoch [1890020000], Loss: 0.0630 Epoch [1900020000], Loss: 0.0629 Epoch [1900020000], Loss: 0.0629 Epoch [1910020000], Loss: 0.0628 Epoch [1920020000], Loss: 0.0627 Epoch [1920020000], Loss: 0.0627 Epoch [1930020000], Loss: 0.0626 Epoch [1940020000], Loss: 0.0624 Epoch [1940020000], Loss: 0.0624 Epoch [1950020000], Loss: 0.0623 Epoch [1960020000], Loss: 0.0622 Epoch [1960020000], Loss: 0.0622 Epoch [1970020000], Loss: 0.0621 Epoch [1980020000], Loss: 0.0620 Epoch [1980020000], Loss: 0.0620 Epoch [1990020000], Loss: 0.0619 Epoch [2000020000], Loss: 0.0618 Epoch [2000020000], Loss: 0.0618 Training time: 8.60 seconds1.三种不同的模型可视化方法推荐torchinfo打印summary权重分布可视化 print(model) MLP((fc1): Linear(in_features4, out_features10, biasTrue)(relu): ReLU()(fc2): Linear(in_features10, out_features3, biasTrue) )for name, param in model.named_parameters():print(fParameter name: {name}, Shape: {param.shape}) Parameter name: fc1.weight, Shape: torch.Size([10, 4]) Parameter name: fc1.bias, Shape: torch.Size([10]) Parameter name: fc2.weight, Shape: torch.Size([3, 10]) Parameter name: fc2.bias, Shape: torch.Size([3])import numpy as np weight_data {} for name, param in model.named_parameters():if weight in name:weight_data[name] param.detach().cpu().numpy()fig, axes plt.subplots(1, len(weight_data), figsize(15, 5)) fig.suptitle(Weight Distribution of Layers)for i, (name, weights) in enumerate(weight_data.items()):weights_flat weights.flatten()axes[i].hist(weights_flat, bins50, alpha0.7)axes[i].set_title(name)axes[i].set_xlabel(Weight Value)axes[i].set_ylabel(Frequency)axes[i].grid(True, linestyle–, alpha0.7)plt.tight_layout() plt.subplots_adjust(top0.85) plt.show()print(\n 权重统计信息 )for name, weights in weight_data.items():mean np.mean(weights)std np.std(weights)min_val np.min(weights)max_val np.max(weights)print(f{name}:)print(f 均值: {mean:.6f})print(f 标准差: {std:.6f})print(f 最小值: {min_val:.6f})print(f 最大值: {max_val:.6f})print(- * 30) 权重统计信息

fc1.weight:均值: 0.038066标准差: 0.929686最小值: -2.286270最大值: 2.450587

fc2.weight:均值: -0.023167标准差: 1.232054最小值: -3.803612最大值: 2.585007 ——————————from torchsummary import summarysummary(model, input_size(4,)) —————————————————————-Layer (type) Output Shape Param # Linear-1 [-1, 10] 50ReLU-2 [-1, 10] 0Linear-3 [-1, 3] 33Total params: 83 Trainable params: 83

Non-trainable params: 0

Input size (MB): 0.00 Forward/backward pass size (MB): 0.00 Params size (MB): 0.00 Estimated Total Size (MB): 0.00 —————————————————————-from torchinfo import summarysummary(model, input_size(4, )) Layer (type:depth-idx) Output Shape Param #MLP [3] – ├─Linear: 1-1 [10] 50 ├─ReLU: 1-2 [10] – ├─Linear: 1-3 [3] 33Total params: 83 Trainable params: 83 Non-trainable params: 0 Total mult-adds (M): 0.00Input size (MB): 0.00 Forward/backward pass size (MB): 0.00 Params size (MB): 0.00 Estimated Total Size (MB): 0.002.进度条功能手动和自动写法让打印结果更加美观 from tqdm import tqdm import timewith tqdm(total10) as pbar: for i in range(10):time.sleep(0.5)pbar.update(1) 100%|██████████| 1010 [00:0500:00, 1.95it/s]from tqdm import tqdm import timewith tqdm(total5, desc下载文件, unit个) as pbar:for i in range(5):time.sleep(1)pbar.update(1) 下载文件: 100%|██████████| 55 [00:0500:00, 1.01s/个]from tqdm import tqdm import timefor i in tqdm(range(3), desc处理任务, unitepoch):time.sleep(1) 处理任务: 100%|██████████| 33 [00:0300:00, 1.01s/epoch]from tqdm import tqdm import timetotal 0 with tqdm(total10, desc累加进度) as pbar:for i in range(1, 11):time.sleep(0.3)total ipbar.update(1)pbar.set_postfix({当前总和: total}) 累加进度: 100%|██████████| 1010 [00:0300:00, 3.27it/s, 当前总和55]import torch import torch.nn as nn import torch.optim as optim from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler import time import matplotlib.pyplot as plt from tqdm import tqdm device torch.device(cuda:0 if torch.cuda.is_available() else cpu) print(f使用设备: {device})iris load_iris() X iris.data y iris.target X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42) scaler MinMaxScaler() X_train scaler.fit_transform(X_train) X_test scaler.transform(X_test) X_train torch.FloatTensor(X_train).to(device) y_train torch.LongTensor(y_train).to(device) X_test torch.FloatTensor(X_test).to(device) y_test torch.LongTensor(y_test).to(device)class MLP(nn.Module):def init(self):super(MLP, self).init()self.fc1 nn.Linear(4, 10)self.relu nn.ReLU()self.fc2 nn.Linear(10, 3)def forward(self, x):out self.fc1(x)out self.relu(out)out self.fc2(out)return outmodel MLP().to(device) criterion nn.CrossEntropyLoss() optimizer optim.SGD(model.parameters(), lr0.01) num_epochs 20000 losses [] epochs [] start_time time.time()with tqdm(totalnum_epochs, desc训练进度, unitepoch) as pbar:for epoch in range(num_epochs):outputs model(X_train)loss criterion(outputs, y_train)optimizer.zero_grad()loss.backward()optimizer.step()if (epoch 1) % 200 0:losses.append(loss.item())epochs.append(epoch 1)pbar.set_postfix({Loss: f{loss.item():.4f}})if (epoch 1) % 1000 0:pbar.update(1000)if pbar.n num_epochs:pbar.update(num_epochs - pbar.n)time_all time.time() - start_time print(fTraining time: {time_all:.2f} seconds) 使用设备: cpu训练进度: 100%|██████████| 2000020000 [00:0800:00, 2395.41epoch/s, Loss0.0608]Training time: 8.35 seconds3.推理的写法评估模式 model.eval()with torch.no_grad():outputs model(Xtest), predicted torch.max(outputs, 1)correct (predicted y_test).sum().item()accuracy correct / y_test.size(0)print(f测试集准确率: {accuracy * 100:.2f}%) 测试集准确率: 96.67%作业调整模型定义时的超参数对比下效果。 import torch import torch.nn as nn import torch.optim as optim from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler import time import matplotlib.pyplot as plt from tqdm import tqdm device torch.device(cuda:0 if torch.cuda.is_available() else cpu) print(f使用设备: {device}\n)iris load_iris() X iris.data y iris.target X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42) scaler MinMaxScaler() X_train scaler.fit_transform(X_train) X_test scaler.transform(X_test) X_train torch.FloatTensor(X_train).to(device) y_train torch.LongTensor(y_train).to(device) X_test torch.FloatTensor(X_test).to(device) y_test torch.LongTensor(y_test).to(device)class MLP_Original(nn.Module):def init(self):super(MLP_Original, self).init()self.fc1 nn.Linear(4, 10)self.relu nn.ReLU()self.fc2 nn.Linear(10, 3)def forward(self, x):out self.fc1(x)out self.relu(out)out self.fc2(out)return outclass MLP_Larger(nn.Module):def init(self):super(MLP_Larger, self).init()self.fc1 nn.Linear(4, 20)self.relu nn.ReLU()self.fc2 nn.Linear(20, 10)self.fc3 nn.Linear(10, 3)def forward(self, x):out self.fc1(x)out self.relu(out)out self.fc2(out)out self.relu(out)out self.fc3(out)return outclass MLP_Smaller(nn.Module):def init(self):super(MLP_Smaller, self).init()self.fc1 nn.Linear(4, 5)self.relu nn.ReLU()self.fc2 nn.Linear(5, 3)def forward(self, x):out self.fc1(x)out self.relu(out)out self.fc2(out)return outclass MLP_Tanh(nn.Module):def init(self):super(MLP_Tanh, self).init()self.fc1 nn.Linear(4, 10)self.act nn.Tanh()self.fc2 nn.Linear(10, 3)def forward(self, x):out self.fc1(x)out self.act(out)out self.fc2(out)return outdef train_and_evaluate(model_class, optimizer_class, lr, num_epochs20000):model model_class().to(device)criterion nn.CrossEntropyLoss()optimizer optimizer_class(model.parameters(), lrlr)losses []epochs []start_time time.time()with tqdm(totalnum_epochs, descf训练 {model_class.name}, unitepoch) as pbar:for epoch in range(num_epochs):outputs model(X_train)loss criterion(outputs, y_train)optimizer.zero_grad()loss.backward()optimizer.step()if (epoch 1) % 200 0:losses.append(loss.item())epochs.append(epoch 1)pbar.set_postfix({Loss: f{loss.item():.4f}})if (epoch 1) % 1000 0:pbar.update(1000)if pbar.n num_epochs:pbar.update(num_epochs - pbar.n)time_all time.time() - start_timewith torch.no_grad():outputs model(Xtest), predicted torch.max(outputs.data, 1)accuracy (predicted y_test).sum().item() / y_test.size(0)print(f{model_class.name} 训练时间: {time_all:.2f}秒, 测试准确率: {accuracy:.4f}\n)return epochs, losses, accuracyconfigs [(MLP_Original, optim.SGD, 0.01),(MLP_Larger, optim.SGD, 0.01),(MLP_Smaller, optim.SGD, 0.01),(MLP_Tanh, optim.SGD, 0.01),(MLP_Original, optim.Adam, 0.001),(MLP_Original, optim.SGD, 0.1),(MLP_Original, optim.SGD, 0.001) ]plt.figure(figsize(12, 8)) for config in configs:epochs, losses, accuracy train_and_evaluate(*config)plt.plot(epochs, losses, labelf{config[0].name} {config[1].name} lr{config[2]} (Acc:{accuracy:.2f}))plt.xlabel(Epoch) plt.ylabel(Loss) plt.title(Training Loss Comparison with Different Hyperparameters) plt.legend() plt.grid(True) plt.show() 使用设备: cpu训练 MLP_Original: 100%|██████████| 2000020000 [00:0800:00, 2347.88epoch/s, Loss0.0629]MLP_Original 训练时间: 8.52秒, 测试准确率: 0.9667训练 MLP_Larger: 100%|██████████| 2000020000 [00:1000:00, 1848.93epoch/s, Loss0.0480]MLP_Larger 训练时间: 10.82秒, 测试准确率: 1.0000训练 MLP_Smaller: 100%|██████████| 2000020000 [00:0800:00, 2366.75epoch/s, Loss0.1377]MLP_Smaller 训练时间: 8.45秒, 测试准确率: 0.9667训练 MLP_Tanh: 100%|██████████| 2000020000 [00:0800:00, 2326.77epoch/s, Loss0.0646]MLP_Tanh 训练时间: 8.60秒, 测试准确率: 0.9667训练 MLP_Original: 100%|██████████| 2000020000 [00:1300:00, 1468.79epoch/s, Loss0.0466]MLP_Original 训练时间: 13.62秒, 测试准确率: 1.0000训练 MLP_Original: 100%|██████████| 2000020000 [00:0800:00, 2334.48epoch/s, Loss0.0468]MLP_Original 训练时间: 8.57秒, 测试准确率: 1.0000训练 MLP_Original: 100%|██████████| 2000020000 [00:0800:00, 2334.72epoch/s, Loss0.4256]MLP_Original 训练时间: 8.57秒, 测试准确率: 0.9000浙大疏锦行